2013-03-21 2 views
3

system 범위 종속성을 POM에 추가하려고합니다. 트릭은 내가 systemPath이 없다는 것입니다. 대신, 경로로 사용할 수있는 속성이 들어있는 속성 파일에 대한 경로가 있습니다.속성에서 Maven 종속성을 동적으로 추가합니다.

이 문제를 해결하기 위해 properties-maven-plugin을 사용해 보았습니다. 그러나 플러그인을 실행하기 전에 시스템 종속성이 해결되어서 곧 정의하려고하는 속성을 곧 사용할 수없는 것으로 보입니다.

여기 내 POM의 절입니다 :

<profiles> 
    <profile> 
     <id>dylink</id> 
     <dependencies> 
      <dependency> 
       <artifactId>outside-lib</artifactId> 
       <groupId>com.foo</groupId> 
       <version>1.0</version> 
       <scope>system</scope> 
       <systemPath>${outsidelib.location}/outside-lib.jar</systemPath> 
      </dependency> 
     </dependencies> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>properties-maven-plugin</artifactId> 
        <version>1.0-alpha-2</version> 
        <executions> 
         <execution> 
          <phase>initialize</phase> 
          <goals> 
           <goal>read-project-properties</goal> 
          </goals> 
          <configuration> 
           <files> 
            <file>C:\path\to\file.properties</file> 
           </files> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

그리고 mvn -P dylink compile 같은 것을 실행하고 절대 경로 아니기 때문에 내 systemPath이 무효라고 말했다 얻는다. 이 속성에는 절대 경로가 포함되어 있습니다.

또는 다른 방법이 있습니까? 시스템 범위 종속성의 위치를 ​​호스트 시스템에 쿼리 할 수 ​​있어야합니다. POM으로 경로를 하드 코딩하는 것은 효과가 없습니다.

답변

5

불가능합니다. 플러그인을 실행하기 위해서, Maven은 필요한 모든 것을 로컬 저장소에 '다운로드'해야합니다. 그것은 종종 속성들에 정의 된 의존성 버전을 확신해야한다. 따라서 플러그인을 실행하기 전에 누락 된 것을 모두 다운로드하기 전에 속성 값을 찾아야합니다. 당신은

+0

결국 '깔끔한'솔루션은 생산자에게 자신의 의존성을 공개적으로 접근 할 수있는 maven 저장소에 넣고 pom.xml에 저장소를 추가하도록 요청하는 것입니다. Maven은 당신의 의존성을 검색 할 것입니다. Sonatype.org는 이러한 서비스를 제공합니다 ... – JVerstry

1

여기서 추측하고 있지만 동적으로 지정해야하는 경우 다른 환경에서 실행해야하기 때문입니다. 당신이 할 수있는 일이 여전히 받는다는 속성을 사용되어 있지만 인수로 명령 행에 전달할 수 있습니다

mvn -Doutsidelib.location=myAbsolutePathReadFromPropertyFileJustBefore 

물론, 당신은 속성 파일을 읽거나 실행하기 전에 ENV 변수를 설정해야 할 것입니다 귀하의 maven 명령.

+0

좋은 아이디어 단순화하기 위해 ... 플러그인은 속성 값을 정의하기 전에

내가 실행될 때 추가 속성 값을 추가하는 플러그인의 속성을 생각 ... 실행,하지만이 받는다는 종속성 검사 후 발생 싶은 문제. 나는 그것을 시도했고 Maven은 여전히 ​​systemPath의 변수를 좋아하지 않는다. 포기하고 Maven을 실행하기 전에 시스템 저장소를 로컬 저장소에 설치하는 래퍼 스크립트를 만들었습니다. 그래도 나는이 일을 할 수없는 이유에 대해 여전히 의아해하고 있습니다. –

관련 문제