I have my code packaged into a jar
The jar is packaged ok.
jar -tfv target/test-1.0-SNAPSHOT.jar
com/
com/codevalid/
com/codevalid/App.class
log4j.x
Ok, this is what i finally ended up doing.
I built the jar using
mvn assembly:single
and used
java -jar ./target/App-1.0-SNAPSHOT-jar-with-dependencies.jar com.codevalid.App
I did see an alternative where i could have used
mvn exec:java -Dexec.mainClass="com.codevalid.App"
But i was not sure how pass the name of the jar as a classpath
You can run a jar file using the exec:java
goal by adding some arguments
:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<mainClass>org.example.Main</mainClass>
<arguments>
<argument>-jar</argument>
<argument>target/myJar-1.0-SNAPSHOT.jar</argument>
</arguments>
</configuration>
</plugin>
If you have an executable jar and don't want to define the entry point, you need to set the executable
and use the exec:exec
goal:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<executable>java</executable>
<arguments>
<argument>-jar</argument>
<argument>target/myJar-1.0-SNAPSHOT.jar</argument>
</arguments>
</configuration>
</plugin>
You have to specify classpathScope and includePluginDependencies or includeProjectDependencies parameters to pickup jar files on the classpath.
Here is an example:
<configuration>
<executable>java</executable>
<mainClass>com.google.jstestdriver.JsTestDriver</mainClass>
<classpathScope>test</classpathScope>
<includePluginDependencies>true</includePluginDependencies>
<includeProjectDependencies>true</includeProjectDependencies>
<commandlineArgs>--port 9876</commandlineArgs>
</configuration>
You need to include your jar file as a dependency to the exec plugin, e.g. like this:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.codevalid.App</mainClass>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>myGroup</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
You can skip the dependency
declaration if the com.codevalid.App
class is compiled as part of your current project.