Gradle和外部jar的问题-找不到jar

时间:2019-05-13 11:04:21

标签: java gradle build jar build.gradle

我对Gradle有问题。我想使用外部提供的Jar:itext-2.1.7.js6.jar,它是JasperReports使用的修补版本。

在项目结构中,我有一个/libs目录,其中包含2个文件:fonts.jaritext-2.1.7.js6.jar

我的gradle.build文件的一部分看起来像这样:

compile fileTree(dir: 'libs', include: ['*.jar'])
implementation group: 'net.sf.jasperreports', name: 'jasperreports', version: '6.7.1'
implementation group: 'net.sf.jasperreports', name: 'jasperreports-functions', version: '6.8.0'
implementation group: 'joda-time', name: 'joda-time', version: '2.9.9'
//implementation group: 'hu.blackbelt.bundles.itext', name: 'com.lowagie.itext', version: '2.1.7-1'

最后一个依赖项已被注释掉,因为我想使用外部JAR而不是原始的iText。

当我尝试运行我的应用程序时,我得到:

BUILD FAILED in 0s
1 actionable task: 1 executed
Could not find com.lowagie:itext:2.1.7.js6.
Required by:
    project : > net.sf.jasperreports:jasperreports:6.7.1

我在做什么错?我的fonts.jar一切都很好,所以我认为iText应该是一样的,但事实并非如此。

1 个答案:

答案 0 :(得分:0)

pom file of jasperreports中可以看到,对com.lowagie:itext:2.1.7.js6有明确的依赖性,也可以在specific Jasper Reports repository中找到

在Maven中透明地工作的原因是Maven将使用pom文件中定义的存储库,而Gradle将不使用它们,因为它们可能是不安全的来源。

您有两个选择:

  1. 添加该存储库,可能使用repository filtering仅从那里提供这些工件,然后从libs删除文件
  2. jasperreports添加一个排除项,以便它不再尝试获取该依赖项。相反,运行时代码将使用libs中的版本。您只是忘了这种情况下的传递依赖管理,例如,升级jasperreports并从(或不)从其依赖声明中获取更新版本时。