Maven为包含的JAR依赖项

时间:2015-07-28 19:02:55

标签: java maven jar

我正在开发一个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依赖项使用某个版本的子依赖项?

3 个答案:

答案 0 :(得分:0)

您是否尝试重新排序依赖项条目, 首先加载commons-lang然后加载jasperreports? 修改 也许这可以帮到你:dependency:analyze-dep-mgt

答案 1 :(得分:0)

你在做什么就足够了。较新的版本应覆盖旧版本,并且您明确指定的版本应覆盖任何瞬态依赖项。我相信Maven 2.x在这方面存在问题,这就是为什么我更新到Maven 3.x

我怀疑问题出在其他地方。我建议尝试删除common-lang 2.1,我怀疑这应该会告诉你真正的问题是什么。

答案 2 :(得分:0)

试试这个:
    1&gt; Maven clean。
    2&gt; 右键点击项目&gt; maven - &gt;更新项目配置 - &gt;强制更新