| executablewar |
| ============= |
| |
| This package can be overlaid into a WAR file to make it executable, |
| automatically loading the WEB-INF/lib directory into the classpath |
| and launching a different main class. |
| |
| Add the magic block to your Maven pom.xml, setting the value of |
| `Executable-War-Package` to the package of your main classes. |
| |
| With this magic in place, users can execute your WAR file as |
| a standard JAR, including the class name on the command line: |
| |
| ==== |
| java -jar your.war Action ... |
| ==== |
| |
| At runtime the class `${Executable-War-Package}.${Action}` will be |
| loaded dynamically from the WEB-INF/lib directory and its static |
| main method will be invoked with all remaining arguments. |
| |
| Files under `WEB-INF/` may also be accessed by the built-in actions |
| `--ls` (list files) and `--cat` (output content to standard out). |
| This may be useful for user-level documentation to unpack resources |
| packaged with the application. The `WEB-INF`/ prefix is assumed by |
| these actions, and should not be specified on the command line. |
| |
| |
| pom.xml magic |
| ------------- |
| |
| ==== |
| <build> |
| <plugins> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-war-plugin</artifactId> |
| <configuration> |
| <archive> |
| <manifest> |
| <mainClass>ExecutableWarMain</mainClass> |
| </manifest> |
| <manifestEntries> |
| <Executable-War-Package>your.package.prefix</Executable-War-Package> |
| </manifestEntries> |
| </archive> |
| </configuration> |
| </plugin> |
| |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-dependency-plugin</artifactId> |
| <executions> |
| <execution> |
| <id>make-executable</id> |
| <phase>generate-resources</phase> |
| <goals> |
| <goal>unpack</goal> |
| </goals> |
| <configuration> |
| <artifactItems> |
| <artifactItem> |
| <groupId>gerrit</groupId> |
| <artifactId>executablewar</artifactId> |
| <overWrite>true</overWrite> |
| <outputDirectory>${project.build.directory}/executablewar</outputDirectory> |
| <includes>**/*.class</includes> |
| </artifactItem> |
| </artifactItems> |
| </configuration> |
| </execution> |
| </executions> |
| </plugin> |
| |
| <plugin> |
| <artifactId>maven-antrun-plugin</artifactId> |
| <executions> |
| <execution> |
| <id>fix-output</id> |
| <phase>process-classes</phase> |
| <configuration> |
| <tasks> |
| <property name="d" location="${basedir}/target/${project.name}-${project.version}"/> |
| |
| <copy todir="${d}"> |
| <fileset dir="${basedir}/target/executablewar" includes="**/*"/> |
| </copy> |
| </tasks> |
| </configuration> |
| <goals> |
| <goal>run</goal> |
| </goals> |
| </execution> |
| </executions> |
| </plugin> |
| </plugins> |
| </build> |
| |
| <dependencies> |
| <dependency> |
| <groupId>gerrit</groupId> |
| <artifactId>executablewar</artifactId> |
| <version>1.0-SNAPSHOT</version> |
| <scope>provided</scope> |
| </dependency> |
| </dependencies> |
| ==== |