在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插件完成,还是有其他方法可以做到这一点。
答案 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.jar
中org.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
定义的类路径元素将附加到项目类路径。