2012-08-31 2 views
2

mvn을 설치하고 동일한 명령 행 호출에서 POM에 정의 된 등록 정보를 대체 할 때 POM의 정의 된 등록 정보 값을 업데이트하지 않는다는 것을 발견했습니다. 패키지 아티팩트가 POM 파일과 동기화되지 않게하는 로컬 저장소에 설치됩니다. 예를 들어,명령 줄 (Maven 2.2.1)에서 Maven 등록 정보 덮어 쓰기

모듈 온 POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0.0</modelVersion> 
<groupId>org.myorg.test</groupId> 
<artifactId>module-one</artifactId> 
<version>1.0</version> 

그리고 모듈 두 POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0.0</modelVersion> 
<groupId>org.myorg.test</groupId> 
<artifactId>module-two</artifactId> 
<version>1.0</version> 
<properties> 
    <module.one.version>1.0</module.one.version> 
</properties> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
       <manifest> 
        <addClasspath>true</addClasspath> 
       </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <dependency> 
     <groupId>org.myorg.test</groupId> 
     <artifactId>module-one</artifactId> 
     <version>${module.one.version}</version> 
    </dependency> 
</dependencies> 

다음 리딩 두 개의 모듈, 모듈 온 및 모듈 두 고려

module-one에 mvn install을 실행합니다. POM이 module-one을 설치합니다 : 1.0을 로컬에 설치합니다. 리포지토리. 이제 모듈 1 POM을 편집하고 버전을 2.0으로 설정하고 mvn install을 실행하면 module-one : 2.0을 로컬 저장소에 설치합니다.

module-two pom에서 mvn install -Dmodule.one.version = 2.0을 실행하면 module-two : 1.0이 로컬 저장소에 설치됩니다. 그러나, 매니페스트 파일을 내장 JAR을 검사하고 개방 여전히 모듈 하나에 대한 종속성을 참조합니다 다음

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Created-By: Apache Maven 
Build-Jdk: 1.6.0_26 
Class-Path: module-one-2.0.jar 

그러나 로컬 저장소에서이 내장 항아리가는 POM을 보여줍니다 : 재산 1.0 것 원래 정의대로 그대로 유지

<properties> 
<module.one.version>1.0</module.one.version> 
</properties> 
... 
<dependencies> 
<dependency> 
     <groupId>org.myorg.test</groupId> 
    <artifactId>module-one</artifactId> 
    <version>${module.one.version}</version> 
</dependency> 
</dependencies> 

이 올바른 동작입니까? 아니면 다른 방식으로 module.one.version 속성을 파싱해야합니까?

감사합니다.

답변

1

예, 이것이 어떻게 작동하는지입니다. 그렇기 때문에 항상 pom에 속성의 기본값을 정의하고 settings.xml 또는 명령 줄에서 재정의합니다. 덕분에 저장소의 pom이 팀의 다른 개발자에게 원활하게 작업 할 수있는 더 큰 기회를 얻게되었습니다.

관련 문제