web-dev-qa-db-fra.com

Comment puis-je ajouter un fichier war à un autre Java dépendances d'application Web?

J'ai un projet web maven. La sortie du projet est un fichier war. Je veux ajouter ce fichier war en tant que dépendance à project_b.
Le projet_b pom.xml fichier, avoir un plugin comme suit:

...
<plugin>
    <inherited>true</inherited>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <warName>geoserver</warName>
        <webappDirectory>${project.build.directory}/geoserver</webappDirectory>
        <packagingExcludes>WEB-INF/lib/servlet-api*.jar</packagingExcludes>
        <archive>
            <manifest>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>
            <manifestEntries>
                <GeoServerModule>core</GeoServerModule>
                <Application-Name>${project.build.finalname}</Application-Name>
                <Project-Version>${project.version}</Project-Version>
                <Iteration-Name>${iteration}</Iteration-Name>
                <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
                <Git-Revision>${build.commit.id}</Git-Revision>
            </manifestEntries>
        </archive>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>war</goal>
            </goals>
        </execution>
    </executions>
</plugin>
...

Comment ajouter le war de l'application Web à project_b avec <groupId>org.itsme</groupId>, <artifactId>spring3-mvc-maven-xml-hello-world</artifactId>, <packaging>war</packaging> et <version>1.0-SNAPSHOT</version>?

19
Morteza Malvandi

Dans Maven, l'ajout de dépendance n'est qu'un jeu d'enfant. Jetez un oeil sur le pom.xml suivant.

<project
    xmlns="http://maven.Apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd"
>
    <modelVersion>4.0.0</modelVersion>

    <!-- Project Details -->
    <groupId>ykyuen</groupId>
    <artifactId>project-Apple</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>
    <name>project-Apple</name>

    <dependencies>
        <!-- project-Apple depends on project-banana -->
        <dependency>
            <groupId>ykyuen</groupId>
            <artifactId>project-banana</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
</project>

La définition de la dépendance ci-dessus revient à importer le projet-banana.jar dans project-Apple.

Maintenant, j'ai un autre projet d'application Web Maven appelé project-orange avec un type d'emballage égal à war. L'ajout du lien de dépendance ci-dessus ne fonctionne pas du tout puisque Java ne voit pas le fichier .war comme un chemin de classe.

Pour résoudre le problème, il existe deux approches:

  1. Créez un module Maven qui contient les classes de project-orange avec un emballage en pot. Vous pouvez maintenant traiter le nouveau module Maven comme une dépendance normale.

  2. Configurez le plug-in maven-war de telle sorte qu'il crée le fichier .jar lors de la création du fichier .war. Ajoutez le code suivant sous le nœud de votre projet de guerre. Ce qui suit est un exemple.

.

...
<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <attachClasses>true</attachClasses>
                <classesClassifier>classes</classesClassifier>
            </configuration>
        </plugin>
    </plugins>
</build>
...

Après avoir exécuté l'installation de mvn, vous pouvez trouver les fichiers d'archive suivants dans le dossier cible

  • project-orange.war
  • project-orange-classes.jar

Vous pouvez maintenant modifier le pom.xml de project-Apple pour ajouter la nouvelle dépendance.

<project
    xmlns="http://maven.Apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd"
>
    <modelVersion>4.0.0</modelVersion>

    <!-- Project Details -->
    <groupId>ykyuen</groupId>
    <artifactId>project-Apple</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>
    <name>project-Apple</name>

    <dependencies>
        <!-- project-Apple depends on project-banana -->
        <dependency>
            <groupId>ykyuen</groupId>
            <artifactId>project-banana</artifactId>
            <version>1.0</version>
        </dependency>
        <!-- project-Apple depends on project-orange -->
        <dependency>
            <groupId>ykyuen</groupId>
            <artifactId>project-orange</artifactId>
            <version>1.0</version>
            <!-- To map the project-orange-classes.jar -->
            <classifier>classes</classifier>
        </dependency>
    </dependencies>
</project>

référence : http://eureka.ykyuen.info/2009/10/30/maven-dependency-on-jarwar-package/

37
Morteza Malvandi

Récemment, j'étais également confronté au même problème. C'est ainsi que je l'ai résolu très simplement.

Étape 1: Dans le pom du projet d'origine (Ne dépend d'aucun projet) Configurez le plugin de guerre maven de telle sorte qu'il construira la guerre ainsi que le pot. Le pot sera téléchargé dans le référentiel maven lorsque nous effectuerons une installation propre de mvn.

Ma première partie de pom ressemblait à ceci:

<modelVersion>4.0.0</modelVersion>
<groupId>com.pancharatna</groupId>
<artifactId>TestWebApp</artifactId>
**<packaging>jar</packaging>**
<version>1.0-SNAPSHOT</version>

Ensuite, ajoutez un autre plugin dans la section build:

<build>
    <finalName>TestWebApp</finalName>
    <plugins>
        **<plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <executions>
                <execution>
                    <id>make-a-war</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>war</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>**

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

    </plugins>
</build>

Étape 2: Dans le 2ème projet (qui dépend du premier projet), placez le pot de dépendance (projet d'origine) dans le pom.

   <dependency>
        <groupId>com.pancharatna</groupId>
        <artifactId>TestWebApp</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>

Étape 3: Effectuez une installation propre mvn pour le projet, puis pour le deuxième projet

Étape 4: Facultatif: Au lieu de construire les projets séquentiellement et séparément comme mentionné à l'étape 3, nous pouvons créer un pom parent. Nous pouvons simplement exécuter mvn clean install .:

C:/Test/
        ├───Project1
        │   └───src/main/...
        │   └───pom.xml
        │
        ├───Project2
        │   └───src/main/...
        │   └───pom.xml
        │
        ├───pom.xml   <!-- parent pom -->

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.MyApp</groupId>
    <artifactId>myproject</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>myproject</name>
    <url>http://maven.Apache.org</url>
    </dependencies>
    <modules>
        <module>/Project1</module>
        <module>/Project2</module>
    </modules>
</project>
4
user6452160