There are several ways to prepare a whole application bundle with all it's dependencies, properly written MANIFEST.MF and all other necessary things.
The best way I have found is the Appassembler plugin.
<project> ... <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>appassembler-maven-plugin</artifactId> <version>1.1-SNAPSHOT</version> <executions> <execution> <id>appassemble</id> <goals><goal>assemble</goal></goals> <phase>package</phase> </execution> </executions> <configuration> <programs> <program> <mainClass>com.mycompany.app.App</mainClass> <name>app</name> </program> </programs> </configuration> </plugin> </plugins> </build> <pluginRepositories> <pluginRepository> <id>codehaus</id> <name>Codehaus Release Repo</name> <url>http://repository.codehaus.org</url> </pluginRepository> <pluginRepository> <id>codehaus-snapshot</id> <name>Codehaus Snapshot Repo</name> <url>http://snapshots.repository.codehaus.org</url> </pluginRepository> </pluginRepositories> </project>
This creates an application ready for zipping in
target/appassembler/
. More advanced example at plugin's usage
page.
This pom.xml
copies the dependencies to the
target/lib/
dir and creates the MANIFEST.MF
file.
<project> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <mainClass>cz.dynawest.jtexy.sandbox.swing.SwingSandboxApp</mainClass> </properties> <build> <plugins> <!-- Jar - MANIFEST.MF options. --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>${mainClass}</mainClass> <classpathPrefix>lib/</classpathPrefix> </manifest> </archive> </configuration> </plugin> <!-- Dependencies to lib/ . --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <includeScope>runtime</includeScope> </configuration> </plugin> </plugins> </build> <profiles> <!-- "Create distribution zip" profile. --> <profile> <id>dist</id> <build> <plugins> <!-- dependency:copy-dependencies --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>dep-copy</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin> <!-- It's also a good idea to create SOURCES and JAVADOC .jar's. --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.1</version> <executions> <execution> <id>attach-sources</id> <phase>verify</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.6.1</version> <executions> <execution> <id>attach-javadoc</id> <phase>verify</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> </project>