2010-08-06 8 views
5

in my pom exec-maven-plugin을 추가하여 파일을 생성하는 Java 클래스를 호출했습니다. 이 클래스는 main 메소드에 전달할 매개 변수가 필요하며, 그 중 하나는 입력 파일의 위치입니다 (프로젝트 외부). Maven - 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> 

가 지금은 설치/패키지와 전쟁을 배포하는 허드슨을 사용하기 시작 그리고 난 더 이상이 상대 경로를 사용할 수 없습니다 : 지금까지 내가 잘 작동하는이에 대한 상대 경로를 사용했습니다./somedir

을 다음과 같이 치어 변경 :

MVN 깨끗한 패키지 -Dlangdir = C : 간단한 내가 좋아하는 받는다는를 호출 할 때 난 그냥 입력 파일의 위치를 ​​통과, 생각

<argument>${langdir}/PMLanguage.xls</argument> 

그러나이 매개 변수는 여기에서 단순히 무시됩니다. 주 클래스가 인수로받는 경로는 null/PMLanguage.xls이됩니다. 매개 변수 자체는 maven에서 사용할 수 있습니다. antrun 플러그인에서 echo를 사용하여 succes로 테스트했습니다. 올바른 경로가 에코되었습니다.

paven에서 전달한 매개 변수는 pom에서 참조하는 위치에 관계없이 기본적으로 사용할 수 없습니까? 어떤 도움

덕분에,
스테인

답변

13

나는이 문제를 재현 할 수 있습니다.

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> 

을 그리고 여기에 출력 내가 얻을 수 있습니다 :

 
$ 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] ------------------------------------------------------------------------ 
... 

은 메이븐 2.2.1로 테스트.

+1

파스칼, 매우 유감 스럽지만 귀중한 시간을 낭비하는 것 같습니다. 설명 할 수는 없지만 포장을 다시 실행하면 제대로 작동합니다. 나는 어제 작동하지 않는 이유를 이해할 수 없도록 중간에 아무 것도 변경하지 않았습니다. 미안하지만 고마워. –