2012-03-29 38 views
6

我把我的代码打包成一个罐子maven exec:java内部运行类文件

罐子打包好了。

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中的类文件中有个别类文件时?

+1

你的问题是什么? – magomi 2012-03-29 12:11:27

+0

对不起,如何使用maven exec在jar中运行类文件:java – codevalid 2012-03-29 12:16:50

+0

这可能有帮助。 http://stackoverflow.com/questions/42337857/mvn-execjava-to-run-a-java-file-in-an-external-jar-file – prime 2017-02-20 10:31:58

回答

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> 

如果com.codevalid.App类被编译为当前项目的一部分,你可以跳过dependency声明。

+1

嗨,感谢您的信息,但这似乎只适用于库中的jar。我想要做的就是测试jar,然后才能将其安装在回购站中。有什么办法可以指定**这个jar的位置**给maven exec:java – codevalid 2012-03-29 16:52:30

5

好的,这是我最终做的。
我建立

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作为类路径

0

您必须指定classpathScopeincludePluginDependenciesincludeProjectDependencies参数用于拾取类路径上的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> 
1

您可以通过添加使用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> 
+0

如果我想将一些参数传递给org.example.Main类的主要方法,该怎么办? – prime 2017-02-20 06:13:29

+1

@prime我没有测试过,但我认为你可以使用[''](http://www.mojohaus.org/exec-maven-plugin/exec-mojo.html#commandlineArgs)将参数传递给实际应用 – Kapep 2017-02-20 12:36:45

+0

感谢您的建议,将检查。无论如何得到了一个实际问题的答案http:// stackoverflow。COM /问题/ 42337857/MVN-execjava到运行-A-Java的文件中,一个外部的-JAR文件 – prime 2017-02-20 12:41:27