One really useful task that one of my junior developers recently asked my help with was to create an executable jar from a maven project. He had mostly figured it out on his own but I still think this is a useful topic to cover. To achieve this we will be using the Maven Assembly plug-in running in Maven 3.
As a starting point of this implementation I will be using the sample code from an earlier article [Setting up a webservice using Guice & Sitebricks](/Programming/Java/2011/06/25/Setting-up-a-webservice-using-Guice-Sitebricks/) which can be downloaded from [github](https://github.com/techtraits/guice-server-example). First lets go and create our main class, Please add a Java class file at helloworld/src/main/java/com/flybynight/helloworld and add the following code to let us know or jar was packed properly.
Next create a manifest file for your executable jar at src/main/resources/META-INF/MANIFEST.MF and add set the main class parameter to the Driver class we just wrote by adding the following text Main-Class: com.flybynight.helloworld.Driver.
Now create a assembly description file for you project, create a file at src/assemble/descriptor.xml and add the text below. We are defining an assembly execution called exe which will create an executable jar in the target directory. A detailed description of all the parameters in the descriptor file can be found here.
We are almost done now the last step is to add the maven assembly plug-in definition to our pom.xml file. Find the plugins tag in the xml and add the following lines here. Notice how we are referencing the manifest and descriptor file here.
Now to test your code run the mvn assembly:assembly target to generate the execute the assembly plugin. You should now see the target/helloworld-exe.jar file. To test the jar run java -jar target/helloworld-exe.jar. You should see "hello" printed to console.