2011-09-29 4 views
1

내 POM에 set a custom system property에 gmaven-plugin을 사용하고 있습니다. 이것은 maven-antrun-plugin을 사용하여 속성을 성공적으로 에코 할 수 있기 때문에 효과가있는 것 같습니다. 그러나 maven-deploy-plugin은 속성을 완전히 인식하지 못하기 때문에이를 해결할 수 없습니다.왜 maven-deploy-plugin이 내 사용자 정의 시스템 속성을 해결할 수 없습니까?

POM의

관련 부분 :

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.gmaven</groupId> 
      <artifactId>gmaven-plugin</artifactId> 
      <version>1.3</version> 
      <executions> 
       <execution> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>execute</goal> 
        </goals> 
        <configuration> 
         <source> 
          System.setProperty("nodotsversion", "${env.PATCH_VERSION}".replace('.', '')) 
         </source> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.6</version><!-- 1.2 in central --> 
      <executions> 
       <execution> 
        <id>compile</id> 
        <phase>compile</phase> 
        <configuration> 
         <target> 
          <echo message="${nodotsversion}" />  
         </target> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-deploy-plugin</artifactId> 
      <version>2.6</version> 
      <goals> 
       <goal>deploy-file</goal> 
      </goals> 
      <configuration> 
       <repositoryId>artifactory</repositoryId> 
       <packaging>sql</packaging> 
       <generatePom>true</generatePom> 
       <url>${project.distributionManagement.snapshotRepository.url}</url> 
       <groupId>com.company.product</groupId> 
       <artifactId>patch${nodotsversion}</artifactId> 
       <version>1.0.0-SNAPSHOT</version> 
       <file>${WORKSPACE}/myfile.sql</file> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

내가 mvn clean install deploy:deploy-file 이것을 실행하면, 나는 다음과 같은 오류 얻을 :

Caused by: org.apache.maven.plugin.MojoExecutionException: The artifact information is incomplete or not valid: 
    [0] 'artifactId' with value 'patch${nodotsversion}' does not match a valid id pattern. 

왜 수 받는다는-antrun - 플러그인이 해결됩니다 내 사용자 정의 시스템 속성, maven-deploy-plugin은 그렇지 않습니까?

+0

'mvn clean deploy'는 작동합니까? – Raghuram

+0

@Raghuram - 아니요.이 POM으로 만든 유일한 아티팩트는 .sql 파일이며 Maven에는 sql 패키지 유형이 없습니다. 즉, deploy : deploy-file을 대신 실행해야합니다. –

답변

2

잘 모르겠지만 ${...} 자리 표시 자 구문은 프로젝트 속성 만 해결할 수 있다고 생각합니다. 시스템 속성이 빌드의 한 지점에서 프로젝트 속성에 추가되는 이유는 시스템 속성을 이러한 방식으로 사용할 수 있지만 나중에 빌드에서 추가 한 시스템 속성을 사용할 수 없기 때문입니다. 대신 add the property to the project properties해야합니다.

+0

감사합니다. 좋은 정보입니다. 무엇 나를 위해 일한 것은 ('nodotsversion' "$ {env.PATCH_VERSION}". (대체 '.', '')) \t \t \t \t \t \t \t \t'project.properties.setProperty와 프로젝트 속성을 설정하는 것이 었습니다' . 내 POM에서'$ {nodotsversion} '으로 속성을 참조 할 수 있습니다. "project"라는 접두어를 붙이십시오. '$ {project.nodotsversion}'는 작동하지 않습니다. –

+0

저를 위해 일하지 않았습니다. 이유를 아직 알지 못했습니다. –

+0

두 번째 모조가 설정 될 때,'gmaven' 모조 설정'myprop'가 이미 실행 되었더라도'project.getProperties(). get ("myprop")'는'null'입니다. 이상한. –

0

나는 이것이 어떻게 관련되어 있는지 모르겠지만 최근에는 구문과 gmaven-plugin을 사용하는 데 문제가 있음을 알았습니다. 내 플러그인에서 나는 finalName을 생성하고 있었다.

def myvar = "prefix${someothervar}suffix" 
project.properties['my.final.name'] = myvar 

POM을이 전쟁이었다

<build> 
    <finalName>${my.final.name}</finalName> 

는 그런 다음 받는다는 <source> 섹션에서 내가 좋아하는 뭔가를 가지고 다음 치어의이 부분은 같다. 내가 받는다는를 실행하는 경우, 출력은 항상이었다

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project myservice: The parameters 'warName' for goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war are missing or invalid -> [Help 1] 

훨씬 머리가 마침내 문제를 해결하는 방법을 알아 냈 긁어 후. myvar문자열으로 선언해야합니다!

String myvar = "prefix${someothervar}suffix" 
project.properties['my.final.name'] = myvar