Maven 2 Maven-在execmaven插件中使用的pass参数
在我的pom中,我添加了execmaven插件来调用一个java类,该类将生成一个文件。此类需要将一些参数传递给main方法,其中之一是输入文件的位置(在项目外部)。到目前为止,我一直在使用一个相对路径来实现这一点,效果很好:Maven 2 Maven-在execmaven插件中使用的pass参数,maven-2,exec-maven-plugin,Maven 2,Exec Maven Plugin,在我的pom中,我添加了execmaven插件来调用一个java类,该类将生成一个文件。此类需要将一些参数传递给main方法,其中之一是输入文件的位置(在项目外部)。到目前为止,我一直在使用一个相对路径来实现这一点,效果很好: <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.laco.projectmaster.util.LanguageGenerator</mainClass>
<arguments>
<argument>../PM-Config/dev/PMLanguage.xls</argument>
<argument>PM4.0</argument>
<argument>${project.build.outputDirectory}/com/laco/projectmaster/props/resources</argument>
<argument>ProjectMaster</argument>
<argument>Created during maven build (POM Version: ${pom.version})</argument>
</arguments>
</configuration>
</plugin>
org.codehaus.mojo
execmaven插件
测试
JAVA
com.laco.projectmaster.util.LanguageGenerator
../PM Config/dev/PMLanguage.xls
PM4.0
${project.build.outputDirectory}/com/laco/projectmaster/props/resources
项目主管
在maven构建期间创建(POM版本:${POM.Version})
现在我开始使用hudson来安装/打包和部署wars,我不能再使用这个相对路径了。我认为很简单,调用maven时只需传递输入文件的位置,如:
mvn清洁包-Dlangdir=C:/somedir
然后改变pom,如:
<argument>${langdir}/PMLanguage.xls</argument>
${langdir}/PMLanguage.xls
然而,这个参数在这里被忽略了。主类作为参数接收的路径变为null/PMLanguage.xls。参数本身在maven中可用,我使用antrun插件中的echo成功地进行了测试。正确的路径得到了回应
无论您在pom中的何处引用参数,您传递给maven的参数是否默认不可用
谢谢你的帮助,我无法重现这个问题。我使用了以下测试类:
package com.stackoverflow.q3421918;
public class Hello
{
public static void main( String[] args )
{
System.out.println( args[0] + " " + args[1] );
}
}
以及以下pom.xml文件:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow.q3421918</groupId>
<artifactId>Q3421918</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- this was a test for a workaround -->
<properties>
<myprop>${langdir}</myprop>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.stackoverflow.q3421918.Hello</mainClass>
<arguments>
<argument>${myprop}</argument>
<argument>${langdir}</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</project>
4.0.0
com.stackoverflow.q3421918
Q3421918
1.0-快照
${langdir}
朱尼特
朱尼特
3.8.1
测试
org.codehaus.mojo
execmaven插件
1.2
测试
JAVA
com.stackoverflow.q3421918.Hello
${myprop}
${langdir}
这是我得到的结果:
$ mvn clean package -Dlangdir=C:/somedir
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Q3421918
[INFO] task-segment: [clean, package]
[INFO] ------------------------------------------------------------------------
...
[INFO] Preparing exec:java
[WARNING] Removing: java from forked lifecycle, to prevent recursive invocation.
[INFO] No goals needed for project - skipping
[INFO] [exec:java {execution: default}]
Hello c:/somedir c:/somedir
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
...
$mvn清洁包-Dlangdir=C:/somedir
[信息]正在扫描项目。。。
[信息]------------------------------------------------------------------------
[信息]Q3421918号楼
[信息]任务段:[清理,打包]
[信息]------------------------------------------------------------------------
...
[信息]准备执行:java
[警告]从分叉生命周期中删除java,以防止递归调用。
[信息]项目不需要目标-跳过
[INFO][exec:java{execution:default}]
你好c:/somedir c:/somedir
[信息]------------------------------------------------------------------------
[信息]构建成功
[信息]------------------------------------------------------------------------
...
使用Maven 2.2.1进行测试。Pascal,非常抱歉,我似乎浪费了您宝贵的时间。我无法解释,但当我现在重新运行包装时,它工作正常。我没有在两者之间做任何改变,所以我不明白为什么它昨天不起作用。所以,对不起,谢谢。