Maven 2 Maven-在execmaven插件中使用的pass参数

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</

在我的pom中,我添加了execmaven插件来调用一个java类,该类将生成一个文件。此类需要将一些参数传递给main方法,其中之一是输入文件的位置(在项目外部)。到目前为止,我一直在使用一个相对路径来实现这一点,效果很好:

        <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,非常抱歉,我似乎浪费了您宝贵的时间。我无法解释,但当我现在重新运行包装时,它工作正常。我没有在两者之间做任何改变,所以我不明白为什么它昨天不起作用。所以,对不起,谢谢。