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>
?
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:
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.
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
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/
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>