2013-07-05 60 views
0

我使用標準java類MavenProject和com.jcabi.aether.Aether java API一起來確定給定POM的jar依賴關係集。沒有資源篩選通過默認的API存在的,我還沒有發現如何調用Aether.resolve()的相關性,如Maven:通過java api啓用資源過濾

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

沒有得到DependencyResolutionException錯誤與「原因:加載失敗」的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()方法,但希望這給你的想法。