If default distribution tasks are not sufficient, custom distribution archive can be created. using Maven Assembly Plugin.
Steps required to create custom distribution archive:
a) create your Unix and/or Windows start and stop scripts in /dist directory:
#!/usr/bin/env sh scriptdir=`dirname $0` classpath=$scriptdir/conf:$scriptdir/lib/* nohup java $* -cp "$classpath" play.core.server.ProdServerStart $scriptdir > $scriptdir/logs/system.out 2>&1 &
kill $(cat RUNNING_PID)
set scriptdir=%~dp0 set classpath=%scriptdir%/conf;%scriptdir%/lib/* java %* -cp "%classpath%" play.core.server.ProdServerStart %scriptdir%
set /p pid=< RUNNING_PID taskkill /F /PID %pid% del RUNNING_PID
b) create assembly descriptor assembly-dist.xml:
<?xml version="1.0" encoding="UTF-8"?> <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> <id>dist</id> <formats> <format>tgz</format> <format>zip</format> </formats> <includeSiteDirectory>false</includeSiteDirectory> <includeBaseDirectory>false</includeBaseDirectory> <fileSets> <fileSet> <directory>${basedir}/dist</directory> <outputDirectory></outputDirectory> <fileMode>755</fileMode> <lineEnding>unix</lineEnding> <includes> <include>start</include> <include>stop</include> </includes> </fileSet> <fileSet> <directory>${basedir}/dist</directory> <outputDirectory></outputDirectory> <lineEnding>windows</lineEnding> <includes> <include>start.bat</include> <include>stop.bat</include> </includes> </fileSet> <fileSet> <directory>${basedir}/conf</directory> <outputDirectory>conf</outputDirectory> <fileMode>600</fileMode> <lineEnding>unix</lineEnding> </fileSet> <!-- empty 'logs' directory --> <fileSet> <directory>.</directory> <outputDirectory>logs</outputDirectory> <excludes> <exclude>*/**</exclude> </excludes> </fileSet> </fileSets> <files> <file> <source>${basedir}/LICENSE</source> </file> <file> <source>${basedir}/README</source> </file> <file> <source>${project.build.directory}/${project.build.finalName}-sans-externalized.jar</source> <outputDirectory>lib</outputDirectory> <destName>${project.build.finalName}-sans-externalized.jar</destName> <!-- or <destName>${project.groupId}.${project.build.finalName}-sans-externalized.jar</destName> --> </file> </files> <dependencySets> <dependencySet> <scope>runtime</scope> <outputDirectory>lib</outputDirectory> <useProjectArtifact>false</useProjectArtifact> <outputFileNameMapping>${artifact.artifactId}-${artifact.version}$\{dashClassifier?\}.${artifact.extension}</outputFileNameMapping> <!-- or <outputFileNameMapping>${artifact.groupId}.${artifact.artifactId}-${artifact.version}$\{dashClassifier?\}.${artifact.extension}</outputFileNameMapping> --> </dependencySet> </dependencySets> </assembly>
c) add configuration to pom.xml file, preferably in separate profile:
<profiles> <profile> <id>dist</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <executions> <execution> <id>sans-externalized-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> <configuration> <classifier>sans-externalized</classifier> <excludes> <exclude>application.conf</exclude> <exclude>logback.xml</exclude> <exclude>routes</exclude> </excludes> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.0.0</version> <configuration> <descriptors> <descriptor>${basedir}/assembly-dist.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile>
d) generate distribution:
mvn package -Pdist