Ich habe lange im Internet gesucht und kann nicht herausfinden, wie ich das Plug-In für Maven-War oder ähnliches so konfiguriert habe, dass die Systemabhängigkeiten in den Built-War-Ordner (WEB-INF/lib-Ordner) aufgenommen werden.
Ich benutze das Maven Dependency Plugin im Falle eines jar-build als:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
aber ich kann nicht verstehen, was im Falle eines Kriegsaufbaus zu tun ist. Ich habe versucht, das Maven-War-Plugin zu verwenden, aber es enthält keine Systemabhängigkeiten im Build.
[AKTUALISIEREN]
Ich habe Abhängigkeiten vom Typ:
<dependency>
<groupId>LoginRadius</groupId>
<artifactId>LoginRadius</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}\lib\LoginRadius-1.0.jar</systemPath>
</dependency>
in meinem POM und diese Abhängigkeiten sind nicht in WEB-INF/lib enthalten, wenn der Krieg aufgebaut wird.
Lassen Sie mich versuchen, die Optionen zusammenzufassen, die ich ausprobiert habe:
<packagingIncludes>${Java.home}/lib/jfxrt.jar</packagingIncludes>
Das geht nicht! Wenn Sie nur den Jar-Namen haben, wird alles andere ausgeschlossen. Wenn Sie also versuchen möchten, versuchen Sie es
<packagingIncludes>${Java.home}/lib/jfxrt.jar,**/*</packagingIncludes>
Jatins Antwort schien etwas komplex zu sein und ich versuchte immer wieder, durch das POM zu gehen, um herauszufinden, wo genau die Systemgefäße waren, die in WEB-INF POM enthalten sein sollen.
Jedenfalls habe ich diese Lösung verwendet, die zunächst nicht funktionierte, aber nach einiger Zeit und einigen Korrekturen funktionierte:
installed the jar in my local repository
mit dem folgenden Befehl:
mvn install:install-file -Dfile="C:\Users\hp\Documents\NetBeansProjects\TwitterAndLoginRadiusMaven\lib\LoginRadius-1.0.jar" -DgroupId=LoginRadius -DartifactId=LoginRadius -Dversion=1.0 -Dpackaging=jar
Nachdem ich den obigen Befehl ausgeführt hatte, änderte ich die Abhängigkeit in POM in
<dependency>
<groupId>LoginRadius</groupId>
<artifactId>LoginRadius</artifactId>
<!--<scope>system</scope>-->
<version>1.0</version>
<!--<systemPath>${basedir}\lib\LoginRadius-1.0.jar</systemPath>-->
</dependency>
HINWEIS - Siehe Ich habe den Systemumfang und den Systempfad kommentiert.
Beim Aufbau des Krieges ist diese LoginRadius-1.0.jar jetzt in WEB-INF/lib enthalten
Wenn Sie die Bibliothek eines Drittanbieters nicht zufällig in Ihrem lokalen Repository installieren können, können Sie aufgrund einiger alberner Namens-/Paketierungsprüfungen durch den Drittanbieter Ihre Abhängigkeiten im Bereich system
zum Erstellungszeitpunkt (zumindest wenn Sie dies tun) hinzufügen eine Webapp erstellen) mit maven-war-plugin
, wo Sie eine solche Konfiguration erstellen müssen.
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<failOnMissingWebXml>true</failOnMissingWebXml>
<webResources>
<resource>
<directory>path/to/lib/in/project</directory>
<targetPath>WEB-INF/lib</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
Nicht sicher, aber ich glaube, dass sich die Bibliothek lokal im Basisverzeichnis des Projekts befinden muss. Ich neige dazu, ein Verzeichnis unter src/main/
zu erstellen, das lib
genannt wird, um diese Arten von Drittanbieter-Bibliotheken aufzunehmen. Während des Erstellungsprozesses werden sie im richtigen Verzeichnis abgelegt und der Kriegsdatei hinzugefügt.
Wenn Sie als JAR-Abhängigkeiten gedacht waren, finden Sie unten ein Beispiel für pom.xml, das benötigte Dateien benötigt und eine Kriegsdatei generiert:
<build>
<defaultGoal>install</defaultGoal>
<sourceDirectory>${project.basedir}/src/main/Java</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/Java</testSourceDirectory>
<outputDirectory>${project.basedir}/target/classes</outputDirectory>
<testOutputDirectory>${project.basedir}/target/test-classes</testOutputDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<debug>true</debug>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<includeEmptyDirs>true</includeEmptyDirs>
<webResources>
<resource>
<directory>ui</directory>
<targetPath></targetPath>
<includes>
<include>**</include>
</includes>
</resource>
<resource>
<directory>lib</directory>
<targetPath>WEB-INF</targetPath>
<includes>
<include>**/*.xml</include>
<include>**/log4j.properties</include>
</includes>
</resource>
//edited below
<resource>
<directory>lib</directory>
<targetPath>WEB_INF/lib</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
<webXml>${project.basedir}/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
Basierend auf Ihrem ursprünglichen POM würde ich vorschlagen, sie direkt in das Verzeichnis WEB-INF/lib zu senden
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/lib</outputDirectory>
</configuration>
mvn org.Apache.maven.plugins:maven-install-plugin:2.5.1:install-file \
-Dfile=~/Desktop/medici-1.0.1.jar \
-DgroupId=com.hp \
-DartifactId=medici \
-Dversion=1.0.1 \
-Dpackaging=jar \
-DlocalRepositoryPath=lib
Wenn alles gut gegangen ist, können Sie Ihr Artefakt in lib veröffentlichen.
project$ find lib
lib
lib/com
lib/com/hp
lib/com/hp/medici
lib/com/hp/medici/1.0.1
lib/com/hp/medici/1.0.1/medici-1.0.1.jar
lib/com/hp/medici/1.0.1/medici-1.0.1.pom
lib/com/hp/medici/maven-metadata-local.xml
Note the structure here mimics what you’d find in ~/.m2.
Nun deklarieren Sie in Ihrer pom.xml in Ihrem Projekt ein Maven-Repository.
<repositories>
<repository>
<id>local-repo</id>
<url>file://${basedir}/lib</url>
</repository>
</repositories>
Und zu guter Letzt, deklarieren Sie in Ihrer pom.xml eine Abhängigkeit von der lokalen .jar, wie Sie es für jede Abhängigkeit tun würden.
<dependencies>
<dependency>
<groupId>com.hp.medici</groupId>
<artifactId>medici</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
Es kann ein Problem des Bereichs sein, in dem die Abhängigkeiten definiert sind:
Um einen Krieg in Maven zu erzeugen, müssen zwei Ziele ausgeführt werden: "Kompilieren" und "Krieg: Krieg". Wenn Sie das Kriegsziel alleine ausführen, wird die Java-Quelle nicht kompiliert. Wenn Sie möchten, führen Sie eines der Hauptziele aus, z. B. "Paket".
Bei Verwendung von Eclipse:
wählen Sie im Projekt-Explorer das POM aus und wählen Sie die Kontextmenüoption "Ausführen". Dadurch wird das Maven-Laufprofil erstellt und ausgeführt (oder ein vorhandenes Profil verwendet). Maven-Laufprofile verhalten sich wie normale Lauf-/Debug-Profile, mit der Ausnahme, dass die Dialogfelder zur Profilbearbeitung Maven-spezifische Funktionen unterstützen.
quelle: https://coderanch.com/t/594897/ide/include-maven-dependencies-war-file
Sie können das Kriegsplugin so konfigurieren, dass all oder einige jar enthalten ist odernach Ihrem Bedarf wie unten beschrieben. Einfach & funktioniert
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<webResources>
<resource>
<directory>${project.basedir}\lib</directory>
<targetPath>WEB-INF/lib</targetPath>
<filtering>false</filtering>
<includes>
<include>**/*.jar</include>
</includes>
<excludes>
<include>**/javax.servlet-api-3.1.0.jar</include>
</excludes>
</resource>
</webResources>
</configuration>
</plugin>