令我感到惊讶的是,本来应该是一项非常轻松的工作对我来说是一项非常烦人的任务。我需要的是将几个命令行参数传递给我的maven exec:exec插件。不幸的是,几小时的谷歌搜索根本没有帮助。
这是我的插件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<configuration>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<classpath />
<argument>-javaagent:${settings.localRepository}/org/springframework/spring-instrument/${spring.version}/spring-instrument-${spring.version}.jar</argument>
<argument>-Xmx256m</argument>
<argument>com.myPackage.Myclass</argument>
</arguments>
</configuration>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
现在从命令提示符输入:
mvn exec:exec -Dexec.args=-Dmy.property=myProperty
我也尝试过:
mvn exec:exec -Dexec.arguments=-Dmy.property=myProperty
还有很多其他的事情。但似乎没有任何工作。我知道exec:exec运行在一个单独的VM中,但根据文档-Dexec.args应该适合我。有人可以建议我哪里出错吗?
答案 0 :(得分:23)
将命令行参数传递给mvn:exec:
的两种方法方法1,在命令行上:
mvn exec:java -Dexec.mainClass="com.myPackage.myClass" -Dexec.args="command line arguments"
方法2,在maven POM文件中:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<configuration>
<mainClass>com.myPackage.myClass</mainClass>
<commandlineArgs>command line arguments</commandlineArgs>
</configuration>
</plugin>
</plugins>
</build>
然后在命令行上你要做的就是运行:
mvn exec:java
祝你好运。
答案 1 :(得分:19)
在阅读this article之后,我能够使用以下内容为exec:exec运行JVM args:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<arguments>
<argument>-Dhttp.proxyHost=myproxy.example.com</argument>
<argument>-Dhttp.proxyPort=8080</argument>
<argument>-classpath</argument>
<classpath />
<argument>com.example.Main</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
答案 2 :(得分:4)
为什么不使用系统属性?
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>bobo.Abc</mainClass>
<arguments>
<argument>argument1</argument>
</arguments>
<systemProperties>
<systemProperty>
<key>jvmProperty1</key>
<value>dev</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
答案 3 :(得分:1)
如果要将命令行参数传递给Java VM,请使用<commandlineArgs>
标记而不是<arguments>
。 Maven Exec Plugin
干杯
答案 4 :(得分:0)
我使用以下命令行设置通过执行插件将参数传递给我的Main-Class。
mvn clean install -Dexec.arguments="arg0"
答案 5 :(得分:0)
问题是您在命令行上使用-Dexec.args
,并且它覆盖了<arguments>
中给出的pom.xml
。您可以使用它们中的任何一个,不能同时使用。
答案 6 :(得分:0)
我认为所选答案不能解决问题。这是我可行的解决方案:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<configuration>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<classpath />
<argument>-Xmx256m</argument>
<argument>com.myPackage.Myclass</argument>
<argument>${myProperty1}</argument> <!-- variable args here!!! -->
<argument>${myProperty2}</argument>
</arguments>
</configuration>
<executions>
<execution>
<id>myExecution</id> <!-- defined an id here! -->
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
现在,您可以简单地执行传递参数的操作。
mvn exec:exec@myExecution -DmyProperty1=XXX -DmyProperty2=YYY