【发布时间】:2015-07-29 03:30:13
【问题描述】:
我正在开发一个 Java 项目,使用 maven 作为我们的依赖管理器/构建工具。我目前在解决依赖项对正确版本的依赖时遇到问题。
有问题的依赖项称为 jasperreports-functions-6.1.0.jar,它不是托管在 maven 存储库中,而是以 jar 形式提供。
我遇到的问题是 jasperreports-functions 需要 commons-lang 2.6。不方便的是,在“编译”期间,Maven 本身会构建 commons-lang 2.1 来创建缩减的 pom。这似乎导致 jasperreports-functions 尝试使用 commons-lang 2.1,因为它可用,但这无效(运行时方法未定义的错误。)
我尝试将 commons-lang 2.6 添加为依赖项,但 jasperreports-functions 似乎仍在使用 2.1 版本。
pom.xml snip:
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.1.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-functions</artifactId>
<version>6.1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/jasperreports-functions-6.1.0.jar</systemPath>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
使用 "mvn dependency:tree" 我可以看到没有依赖项需要 commons-lang。
如果我从“.m2\repository\commons-lang\commons-lang”中删除 2.1,它将由 maven 重新创建。如果我清空文件夹并锁定它的权限,然后再次运行 maven,我会收到错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.4:jar (default-jar) on project JavaLibrary: Execution default-jar of goal org.apache.maven.plugins:maven-jar-plugin:2.4:jar failed: Plugin org.apache.maven.plugins:maven-jar-plugin:2.4 or one of its dependencies could not be resolved: Failed to collect dependencies at org.apache.maven.plugins:maven-jar-plugin:jar:2.4 -> commons-lang:commons-lang:jar:2.1: Failed to read artifact descriptor for commons-lang:commons-lang:jar:2.1: Could not transfer artifact commons-lang:commons-lang:pom:2.1 from/to central (https://repo.maven.apache.org/maven2): C:\Users\Lowell\.m2\repository\commons-lang\commons-lang\2.1\commons-lang-2.1.pom.part.lock (Access is denied) -> [Help 1]
如何强制 jar 依赖使用某个版本的子依赖?
【问题讨论】: