wake-up-neo.net

Wie man Systemabhängigkeiten in den mit Maven erstellten Krieg einbezieht

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.

26
coding_idiot

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

12
coding_idiot

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.

6
JRSofty

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>
4
Jatin

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>
2
jdevora
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>
0
Tiago Medici

Es kann ein Problem des Bereichs sein, in dem die Abhängigkeiten definiert sind:

  • compile: Abhängigkeiten im Compile-Bereich werden automatisch als Teil des Maven-Builds in die WEB-INF/lib des Ziels kopiert. 
  • provided: Abhängigkeiten im "angegebenen" Bereich werden nicht kopiert (Sie würden dies für vom Server bereitgestellte jars wie JSP-api.jar verwenden). 

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

0
tremendows

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>
0
Ankit Nigam