Maven:通过java api启用资源过滤

时间:2013-07-05 01:36:57

标签: maven filtering pom.xml java-api aether

我使用标准的java类MavenProject和com.jcabi.aether.Aether java API来确定给定POM的jar依赖关系集。默认情况下,没有通过API发生资源过滤,我还没有发现如何调用Aether.resolve()以获取依赖关系,例如

<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启用资源过滤,以便默认情况下发生用户/内置属性替换?或者这是一个手动过程?请尽可能提供代码示例,欢呼!

1 个答案:

答案 0 :(得分:0)

我们遇到了类似的问题,必须手动进行属性替换。您可以在getProperties()参考号上调用MavenProject方法。

以下几行应该有效:

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

你显然需要编写stripOutDollarAndCurlyBrackets()方法,但希望这能为你提供这个想法。