Reputation: 9781
I'm trying to write a maven assembly and I'm not sure how to continue. It's fairly complicated, so the examples I google don't really help. This is what I'm trying to do:
jar-with-dependencies
descriptorRef
. This works as well.How do I create an assembly.xml
that will do both the jar with dependencies (unpacking all of those jar files) and include a war file from another project (which is not unpacked).
Any help would be appreciated.
Upvotes: 1
Views: 1627
Reputation: 570595
How do I create an assembly.xml that will do both the jar with dependencies (unpacking all of those jar files) and include a war file from another project (which is not unpacked).
Assuming you have a project structure similar to the one below (I'm assuming a simple structure since you didn't mention anything particular about it):
. ├── pom.xml └── src ├── main │ ├── assembly │ │ └── uberjar.xml │ └── java │ └── com │ └── stackoverflow │ └── App.java └── test └── java └── com └── stackoverflow └── AppTest.java
With the following pom.xml:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow</groupId>
<artifactId>Q3762049</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- this is the war we want to include in the assembly -->
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>my-webapp</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
<!-- and below, the other dependencies -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
...
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/uberjar.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
As you can see,
jar-with-dependencies
descriptor here, we are going to reuse it in our own custom assembly descriptor. runtime
scope so that we'll be able to include it in the assembly.And now, the custom uberjar.xml
:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>uberjar</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<scope>runtime</scope>
<useProjectArtifact>false</useProjectArtifact>
<excludes>
<exclude>*:war</exclude>
</excludes>
</dependencySet>
<dependencySet>
<unpack>false</unpack>
<scope>runtime</scope>
<useProjectArtifact>false</useProjectArtifact>
<includes>
<include>*:war</include>
</includes>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
This is a little variation of the jar-with-dependencies
descriptor that will create a jar:
As shown below:
$ mvn clean package [INFO] Scanning for projects... ... $ cd target; jar xvf Q3762049-1.0-SNAPSHOT-uberjar.jar created: META-INF/ inflated: META-INF/MANIFEST.MF created: org/ created: org/apache/ created: org/apache/commons/ created: org/apache/commons/lang/ created: org/apache/commons/lang/builder/ created: org/apache/commons/lang/enum/ created: org/apache/commons/lang/enums/ created: org/apache/commons/lang/exception/ created: org/apache/commons/lang/math/ created: org/apache/commons/lang/mutable/ created: org/apache/commons/lang/text/ created: org/apache/commons/lang/time/ inflated: META-INF/LICENSE.txt inflated: META-INF/NOTICE.txt inflated: org/apache/commons/lang/ArrayUtils.class ... created: META-INF/maven/ created: META-INF/maven/commons-lang/ created: META-INF/maven/commons-lang/commons-lang/ inflated: META-INF/maven/commons-lang/commons-lang/pom.xml inflated: META-INF/maven/commons-lang/commons-lang/pom.properties inflated: my-webapp-1.0-SNAPSHOT.war created: com/ created: com/stackoverflow/ inflated: com/stackoverflow/App.class
Upvotes: 2