mvn exec:java在外部JAR文件中运行java文件

时间:2017-02-20 06:30:11

标签: java maven-exec-plugin

在pom.xml中,使用maven-dependency-plugin将特定的外部JAR文件下载到一个单独的位置(在/tmp/externalTestJars/testjar.jar中)。

我想使用exec-maven-plugin testjar.jar 文件(Main.java)中运行java类。

我发现this SO question提出了同样的问题,但这个问题的答案对我没有帮助。

如果我直接运行Main.java文件(在使用mvn exec:java创建了.jar的原始项目中),我可以使用下面的pom配置。

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
    <mainClass>org.example.Main</mainClass>
    <!-- need to pass two arguments to the Main.java file main method -->
    <arguments>
        <argument>arg one</argument>
        <argument>arg two</argument>
    </arguments>
</configuration>
</plugin>

在上面的SO问题中,它有如下答案在.jar文件中运行java文件。

<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>/tmp/externalTestJars/testjar.jar</argument>
    </arguments>
</configuration>
</plugin>

但在我的情况下,这些参数将被视为要传递给Main.java中的main方法的参数,因为它需要两个参数。所以这种方法对我没用。

这可以使用exec maven插件完成,还是有其他方法可以做到这一点。

1 个答案:

答案 0 :(得分:4)

如果你想运行类似于vao@vao-VirtualBox:~$ nodejs > var MongoClient = require('mongodb').MongoClient, ... co = require('co'), ... assert = require('assert'); undefined > > co(function*() { ... var db = yield MongoClient.connect('mongodb://localhost:27017/test'); ... var col = db.collection('t'); ... var q = {$where: function() {return ((this.f1.length||'') + (this.f2.length||'') +(this.f3 || '').length) >0;}}; ... //var cursor = col.find({f1.length:{$gt:0}}); ... var cursor = col.find({f1:"a"}); ... col.find().toArray(function(err, items) {}); ... var stream = col.find(q).stream(); ... stream.on("data", function(item) {}); ... stream.on("end", function() {}); ... ... while(yield cursor.hasNext()) { ... var doc = yield cursor.next(); ... console.dir(doc); ... } ... ... db.close(); ... }).catch(function(err) { ... console.log(err.stack); ... }); Promise { <pending> } > > { _id: ObjectID { _bsontype: 'ObjectID', id: Buffer { '0': 88, '1': 172, '2': 1, '3': 143, '4': 157, '5': 175, '6': 27, '7': 230, '8': 160, '9': 208, '10': 69, '11': 88 } }, f1: 'a', f2: '', f3: '' } (To exit, press ^C again or type .exit) > 的类,插件应该配置如下。

java -cp /tmp/externalTestJars/testjar.jar org.example.Main

如果您要运行类似于<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <executable>java</executable> <arguments> <argument>-cp</argument> <argument>/tmp/externalTestJars/testjar.jar</argument> <argument>org.example.Main</argument> </arguments> </configuration> </plugin> 的类(假设java -jar /tmp/externalTestJars/testjar.jarorg.example.Main被定义为Main-Class),则应如下配置插件。

MANIFEST.MF

在这两种情况下都使用<configuration> <executable>java</executable> <arguments> <argument>-jar</argument> <argument>/tmp/externalTestJars/testjar.jar</argument> </arguments> </configuration>

运行它

编辑:使用mvn exec:exec的示例。

mvn exec:java

注意:如果项目和jar文件<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.3.2</version> <executions> <execution> <phase>install</phase> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>org.example.Main</mainClass> <additionalClasspathElements> <additionalClasspathElement> /tmp/externalTestJars/testjar.jar </additionalClasspathElement> </additionalClasspathElements> </configuration> </plugin> 都包含类testjar.jar,那么项目中的类将被执行。由org.example.Main定义的类路径元素将附加到项目类路径。