Generazione di WAR file da una configurazione di Maven multiprogetto
-
28-09-2019 - |
Domanda
Ho un href="http://en.wikipedia.org/wiki/Apache_Maven" rel="nofollow"> Maven progetto
La roba rilevanti i miei file POM : Parent POM: pom comune: persistenza pom: web pom: Forse ho rotto qualcosa nella copia & incolla, ma l'XML è valido. Come si può risolvere questo problema? <groupId>com.test</groupId>
<artifactId>test</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<modules>
<module>components/TestWeb</module>
<module>components/TestOther</module>
<module>components/TestPersistence</module>
<module>components/TestCommon</module>
</modules>
<build>
<defaultGoal>package</defaultGoal>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<dependentWarExcludes>
**/hibernate.cfg.xml,**/sql-map-config.xml,**/web.xml,WEB-INF/classes/META-INF/**
</dependentWarExcludes>
</configuration>
</plugin>
</plugins>
</build>
<modelVersion>4.0.0</modelVersion>
<artifactId>test-common</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<relativePath>../../pom.xml</relativePath>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>test-persistence</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<relativePath>../../pom.xml</relativePath>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.test</groupId>
<artifactId>test-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>test-web</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>TestWeb</name>
<parent>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<relativePath>../../pom.xml</relativePath>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependency>
<groupId>com.test</groupId>
<artifactId>test-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.test</groupId>
<artifactId>test-persistence</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.test</groupId>
<artifactId>test-other</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
mvn war:war
, il file WAR viene generato vuoto.
Soluzione
Avere plugin nel progetto principale non funziona. È possibile configurare i plugin qui, come questo
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.2</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
, ma devono ancora essere fatto riferimento in sottoprogetti di essere attivi (ad eccezione per i plugin che fanno parte del processo di default, come Maven-compiler-plugin e Maven-risorse-plugin).
Quindi, o si sposta il guerra-plugin configurazione pluginManagement
nel progetto principale e comprendono
<build>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<execution>
<goals>...</goals>
</execution>
</plugin>
</build>
nel progetto guerra o si sposta l'intera configurazione in guerra.
Nota aggiuntiva: Assicurarsi che l'ordine dei moduli nel pom radice è allineato alle relazioni di dipendenza tra i progetti (Nel tuo caso basta invertire l'ordine).
Altri suggerimenti
Ho creato una struttura di progetto simile e incollato le POM hai fornito, ma non si poteva riprodurre il problema. Esecuzione mvn package
dal pom aggregare solo funziona come previsto:
$ mvn package [INFO] Scanning for projects... ... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] ------------------------------------------------------------------------ [INFO] Unnamed - com.test:test:pom:0.0.1-SNAPSHOT ............ SUCCESS [5.819s] [INFO] Unnamed - com.test:test-common:jar:0.0.1-SNAPSHOT ..... SUCCESS [3.343s] [INFO] Unnamed - com.test:test-persistence:jar:0.0.1-SNAPSHOT SUCCESS [0.136s] [INFO] Unnamed - com.test:test-other:jar:0.0.1-SNAPSHOT ...... SUCCESS [0.079s] [INFO] Unnamed - com.test:test-web:war:0.0.1-SNAPSHOT ........ SUCCESS [1.899s] [INFO] ------------------------------------------------------------------------ [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ ...
E produce il seguente risultato:
$ tree . . ├── components │ ├── TestCommon │ │ ├── pom.xml │ │ ├── ... │ │ └── target │ │ ├── maven-archiver │ │ │ └── pom.properties │ │ └── test-common-0.0.1-SNAPSHOT.jar │ ├── TestOther │ │ ├── pom.xml │ │ ├── ... │ │ └── target │ │ ├── maven-archiver │ │ │ └── pom.properties │ │ └── test-other-0.0.1-SNAPSHOT.jar │ ├── TestPersistence │ │ ├── pom.xml │ │ ├── ... │ │ └── target │ │ ├── maven-archiver │ │ │ └── pom.properties │ │ └── test-persistence-0.0.1-SNAPSHOT.jar │ └── TestWeb │ ├── pom.xml │ ├── src │ │ └── main │ │ └── webapp │ │ ├── index.jsp │ │ └── WEB-INF │ │ └── web.xml │ └── target │ ├── maven-archiver │ │ └── pom.properties │ ├── test-web-0.0.1-SNAPSHOT │ │ ├── index.jsp │ │ ├── META-INF │ │ └── WEB-INF │ │ ├── classes │ │ ├── lib │ │ │ ├── test-common-0.0.1-SNAPSHOT.jar │ │ │ ├── test-other-0.0.1-SNAPSHOT.jar │ │ │ └── test-persistence-0.0.1-SNAPSHOT.jar │ │ └── web.xml │ └── test-web-0.0.1-SNAPSHOT.war └── pom.xml
Quindi, il problema deve avere qualcosa a che fare con il vostro progetto guerra stessa, la sua struttura o qualcosa di simile. Si prega di mostrare la sua struttura e l'uscita di Maven durante l'esecuzione war:war
su di esso.
A proposito, qui è come un POM dovrebbe tipicamente apparire come in una costruzione in più moduli:
<project>
<modelVersion>4.0.0</modelVersion>
<!--groupId>com.test</groupId--> <!-- unnecessary, you inherit it -->
<artifactId>test-web</artifactId>
<packaging>war</packaging>
<!--version>0.0.1-SNAPSHOT</version--> <!-- unnecessary, you inherit it -->
<parent>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<relativePath>../../pom.xml</relativePath>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId> <!-- DRY, use built-in properties -->
<artifactId>test-common</artifactId>
<version>${project.version}</version> <!-- DRY, use built-in properties -->
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>test-persistence</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>test-other</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
Un'altra cosa, la guerra plugin di configurazione dal progetto principale ereditato (è possibile verificare che eseguendo help:effective-pom
nel modulo web), ma avrebbe senso per configurarlo nel modulo web stesso.