| 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> | |
| ==== |