web-dev-qa-db-fra.com

Comment inclure les dépendances du système dans la guerre construites en utilisant maven

J'ai cherché sur Internet pendant un bon bout de temps et je n'arrive pas à comprendre comment configurer le plugin maven-war ou quelque chose de similaire pour que les dépendances du système soient incluses dans le fichier build-war (dossier WEB-INF/lib)

J'utilise le plugin maven dependency dans le cas d'une construction de jar comme: 

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

mais je suis incapable de comprendre ce qu'il faut faire en cas de guerre. J'ai essayé d'utiliser le plugin maven-war, mais cela n'inclut pas les dépendances du système dans la construction.

[METTRE À JOUR]

J'ai des dépendances de type: 

<dependency>
    <groupId>LoginRadius</groupId>
    <artifactId>LoginRadius</artifactId>
    <scope>system</scope>
    <version>1.0</version>
    <systemPath>${basedir}\lib\LoginRadius-1.0.jar</systemPath>
</dependency>

dans mon POM et ces dépendances ne sont pas inclus dans WEB-INF/lib lorsque la guerre est construite.

26
coding_idiot

Laissez-moi essayer de résumer les options que j'ai essayées: 

<packagingIncludes>${Java.home}/lib/jfxrt.jar</packagingIncludes>

Ça ne marche pas! De plus, le seul nom du bocal exclut tout le reste, donc si vous êtes prêt à essayer, essayez 

<packagingIncludes>${Java.home}/lib/jfxrt.jar,**/*</packagingIncludes>

La réponse de Jatin a semblé un peu complexe et j'ai essayé de parcourir encore et encore le POM pour déterminer où étaient exactement les fichiers système mentionnés pour être inclus dans WEB-INF POM.

Quoi qu'il en soit, j'ai fini par utiliser cette solution, qui ne fonctionnait pas au début, mais après un certain temps et quelques corrections ont fonctionné: 

installed the jar in my local repository en utilisant la commande ci-dessous: 

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

Après avoir exécuté la commande ci-dessus, j'ai changé la dépendance dans POM en

<dependency>
            <groupId>LoginRadius</groupId>
            <artifactId>LoginRadius</artifactId>
            <!--<scope>system</scope>-->
            <version>1.0</version>
            <!--<systemPath>${basedir}\lib\LoginRadius-1.0.jar</systemPath>-->
        </dependency>

NOTE - Voir J'ai commenté l'étendue du système et SystemPath. 

Construire la guerre maintenant, inclut ce LoginRadius-1.0.jar dans WEB-INF/lib

12
coding_idiot

Si par hasard vous ne pouvez pas installer la bibliothèque tierce dans votre référentiel local, vous pouvez toujours ajouter vos dépendances system à votre paquet final lors de la compilation construisez une application Web) en utilisant le maven-war-plugin où vous auriez besoin de créer une configuration comme celle-ci.

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

Pas sûr, mais je pense que la bibliothèque doit être quelque part localisée dans le répertoire de base du projet. J'ai tendance à créer un répertoire sous src/main/ appelé lib pour contenir ces sortes de bibliothèques tierces. Pendant le processus de construction, ils sont placés dans le bon répertoire et ajoutés au fichier war.

6
JRSofty

Si vous voulez parler de dépendances de jar, voici un exemple de pom.xml qui prend les fichiers nécessaires et génère un fichier war:

 <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

Sur la base de votre POM initial, je vous suggère de les envoyer directement dans le répertoire WEB-INF/lib 

                    <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

Si tout s'est bien passé, vous pouvez trouver votre artefact publié dans lib.

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.

Désormais, dans votre pom.xml, déclarez-le dans votre projet un référentiel Maven.

<repositories>
    <repository>
        <id>local-repo</id>
        <url>file://${basedir}/lib</url>
    </repository>
</repositories>

Enfin, dans votre pom.xml, déclarez une dépendance sur le fichier .jar local, comme vous le feriez pour toute dépendance.

<dependencies>
    <dependency>
        <groupId>com.hp.medici</groupId>
        <artifactId>medici</artifactId>
        <version>1.0.1</version>
    </dependency>
</dependencies>
0
Tiago Medici

Ce peut être un problème de la portée où les dépendances sont définies:

  • compile: les dépendances de la portée "compile" seront automatiquement copiées dans le fichier WEB-INF/lib de la cible, dans le cadre de la construction Maven. 
  • fourni: les dépendances de l'étendue "fournie" ne seront pas copiées (vous l'utiliserez pour les fichiers JAR fournis par le serveur, tels que JSP-api.jar). 

Pour générer un WAR dans Maven, il faut lancer 2 objectifs: "compiler" et "war: war". Exécuter l'objectif de guerre seul ne compilera pas la source Java. Si vous préférez, lancez l'un des objectifs principaux, tel que "package". 

Si vous utilisez Eclipse

sélectionnez le POM dans l'explorateur de projet et sélectionnez l'option de menu contextuel "Exécuter". Ceci construira et exécutera le profil d’exécution Maven (ou utilisera un profil existant). Les profils d'exécution Maven se comportent exactement comme les profils d'exécution/de débogage classiques, à la différence que leurs boîtes de dialogue de modification de profil prennent en charge des fonctionnalités spécifiques à Maven. 

source: https://coderanch.com/t/594897/ide/include-maven-dependencies-war-file

0
tremendows

Vous pouvez configurer le plugin war pour avoir tout ou certains jar inclus ou exclus selon vos besoins, comme indiqué ci-dessous. Simple & fonctionne

           <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