我将我的代码打包到jar
中罐装好了。
jar -tfv target/test-1.0-SNAPSHOT.jar
com/
com/codevalid/
com/codevalid/App.class
log4j.xml
META-INF/maven/com.codevalid/test/pom.xml
META-INF/maven/com.codevalid/test/pom.properties
我可以使用exec:java
如何使用maven exec:java
在jar中运行类文件?
答案 0 :(得分:6)
好的,这就是我最终做的事情。
我使用
mvn assembly:single
并使用
java -jar ./target/App-1.0-SNAPSHOT-jar-with-dependencies.jar com.codevalid.App
我确实看到了我可以使用
的替代方案mvn exec:java -Dexec.mainClass="com.codevalid.App"
但我不确定如何将 jar的名称作为类路径传递
答案 1 :(得分:3)
您需要将您的jar文件包含为exec插件的依赖项,例如:像这样:
<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>
如果将dependency
类编译为当前项目的一部分,则可以跳过com.codevalid.App
声明。
答案 2 :(得分:2)
您可以使用exec:java
目标运行jar文件,方法是添加一些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>
如果您有可执行jar并且不想定义入口点,则需要设置executable
并使用exec:exec
目标:
<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>
答案 3 :(得分:1)
您必须将 classpathScope 和 includePluginDependencies 或 includeProjectDependencies 参数指定给类路径中的拾取jar文件。
以下是一个例子:
<configuration>
<executable>java</executable>
<mainClass>com.google.jstestdriver.JsTestDriver</mainClass>
<classpathScope>test</classpathScope>
<includePluginDependencies>true</includePluginDependencies>
<includeProjectDependencies>true</includeProjectDependencies>
<commandlineArgs>--port 9876</commandlineArgs>
</configuration>