2013-07-05 3 views
0

나는 com.jcabi.aether.Aether 자바 API와 함께 표준 자바 클래스 MavenProject를 사용하여 주어진 POM에 대한 jar 의존성 세트를 결정한다. 이 기본적으로 API를 통해 발생하는 어떠한 자원 필터링이없고 내가 함께 DependencyResolutionException 오류를받지 않고 같은Maven : 자바 API를 통한 리소스 필터링 활성화

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>${my-junit.version}</version> 
    <scope>test</scope> 
</dependency> 

등의 종속성을 Aether.resolve()를 호출하는 방법을 발견하기 위하여 아직있어 : JUnit을 '을 원인로드하지 못했습니다' : junit : jar : $ {my-junit.version} '은 리터럴'$ {..} '버전 문자열을 가지고 있기 때문에.

MavenProject proj = .. 
Dependency dep = proj.getDependencies()... 
Aether aether = new Aether(proj, ..) 
aether.resolve(new DefaultArtifact(... dep.getVersion() ..) 

어떻게이 가능 이러한 API를 통해 해당 사용자/내장 속성 대체 기본적으로 발생하므로 자원 필터링을 설정 : 여기에 코드입니다? 아니면 수동 프로세스입니까? 가능한 경우 코드 샘플을 제공하십시오.

+0

이것은 리소스 필터링이 아니라 속성 보간입니다. 'mvn help : effective-pom'을 사용하여 전체 pom을 생성 한 다음 코드를 읽게하십시오. – noahlz

답변

0

비슷한 문제가있어서 수동으로 속성 대체를 수행해야했습니다. MavenProject 참조에서 getProperties() 방법으로 전화 할 수 있습니다.

Properties props = proj.getProperties(); 
String depVersion = stripOutDollarAndCurlyBrackets(dep.getVersion()); 
String realDepVersion = props.getProperty(depVersion); 
dep.setVersion(realDepVersion); 

당신은 분명히 stripOutDollarAndCurlyBrackets() 방법을 쓸 필요가있다, 그러나 희망이 당신에게 아이디어를 제공합니다 : 다음과 같은 라인을 따라

뭔가 작동합니다.