Maven assembly plugin example
Maven assembly plugin is primarily intended to allow users to aggregate the project output along with its dependencies, modules, site documentation, and other files into a single distribution archive like zip, tar, tar.gz, war, etc. Another example where this is handy is to create deployable files for different environments like myapp-1.10-SNAPSHOT-dev.zip, myapp-1.10-SNAPSHOT-test.zip, and myapp-1.10-SNAPSHOT-prod.zip where each containing environment related properties files packaged.
3 steps to create an assembly
- choose or write the assembly descriptor files to use like dev-assembly.xml, prod-assembly.xml, etc
- configure the Assembly Plugin in your project's pom.xml, and include the above descriptor files
- run "mvn assembly:single" on your project.
For example:
The pom.xml file
<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.app/groupId> <artifactId>myapp</artifactId> <packaging>war</packaging> <name>myapp</name> <version>1.10-SNAPSHOT</version> ... <plugins> .... <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <id>assemble</id> <phase>package</phase> <configuration> <descriptors> <descriptor>assembly/dev-assembly.xml</descriptor> <descriptor>assembly/test-assembly.xml</descriptor> <descriptor>assembly/prod-assembly.xml</descriptor> </descriptors> </configuration> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugins> .... </project>
Now the dev-assembly.xml file
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>dev</id> <includeBaseDirectory>false</includeBaseDirectory> <formats> <format>zip</format> </formats> <fileSets> <fileSet> <directory>config/dev</directory> <outputDirectory>/app-properties</outputDirectory> </fileSet> <fileSet> <directory>jboss-config/dev/deploy</directory> <outputDirectory>/ds</outputDirectory> </fileSet> </fileSets> <files> <file> <source>jboss-config/common/myapp-container.properties</source> <outputDirectory>/myapp-container-properties</outputDirectory> <destName>my-app-dev.properties</destName> </file> </files> </assembly>
The prod environment prod-assembly.xml will have something like
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>prod</id> <includeBaseDirectory>false</includeBaseDirectory> <formats> <format>zip</format> </formats> <fileSets> <fileSet> <directory>config/prod</directory> <outputDirectory>/app-properties</outputDirectory> </fileSet> <fileSet> <directory>jboss-config/prod/deploy</directory> <outputDirectory>/ds</outputDirectory> </fileSet> </fileSets> <files> <file> <source>jboss-config/common/myapp-container.properties</source> <outputDirectory>/container-properties</outputDirectory> <destName>my-app-prod.properties</destName> </file> </files> </assembly>
The main goal in the assembly plugin is the single goal. It is used to create all assemblies.
Now to generate different packages like myapp-1.10-SNAPSHOT-dev.zip, myapp-1.10-SNAPSHOT-test.zip, and myapp-1.10-SNAPSHOT-prod.zip
mvn package
Labels: Maven
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home