0

我使用标准 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 启用资源过滤,以便默认发生用户/内置属性替换?或者这是一个手动过程?如果可能,请提供代码示例,干杯!

4

1 回答 1

0

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

遵循以下原则的东西应该可以工作:

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

您显然需要编写该stripOutDollarAndCurlyBrackets()方法,但希望这能给您带来想法。

于 2013-07-05T04:39:51.683 回答