前提
ソフトウェアのバージョン
- Gradle 4.0.2
- JasperReports Library v6.4.1
JasperReports Libraryの依存関係を解決できない問題
JasperReports LibraryはMavenのセントラルリポジトリに登録されています。
build.gradleで次のように記述することで依存関係を宣言することができます。
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'net.sf.jasperreports:jasperreports:6.4.1'
}
しかし、これではビルドするときにJasperReports Libraryの依存関係の一部を解決できません。1
$ gradle build
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all files for configuration ':compileClasspath'.
> Could not find com.lowagie:itext:2.1.7.js6.
Searched in the following locations:
https://repo1.maven.org/maven2/com/lowagie/itext/2.1.7.js6/itext-2.1.7.js6.pom
https://repo1.maven.org/maven2/com/lowagie/itext/2.1.7.js6/itext-2.1.7.js6.jar
Required by:
project : > net.sf.jasperreports:jasperreports:6.4.1
> Could not find org.olap4j:olap4j:0.9.7.309-JS-3.
Searched in the following locations:
https://repo1.maven.org/maven2/org/olap4j/olap4j/0.9.7.309-JS-3/olap4j-0.9.7.309-JS-3.pom
https://repo1.maven.org/maven2/org/olap4j/olap4j/0.9.7.309-JS-3/olap4j-0.9.7.309-JS-3.jar
Required by:
project : > net.sf.jasperreports:jasperreports:6.4.1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED in 4s
1 actionable task: 1 executed
依存関係が解決できない原因
JasperReports Libraryが依存している一部のライブラリはMavenのセントラルリポジトリではなく、別のリポジトリに登録されています。
Gradleが、そのリポジトリに登録されているライブラリを見つけられないことが依存関係を解決できない原因です。
依存関係を解決する方法
build.gradleを次のように変更することで依存関係を解決することができます。
apply plugin: 'java'
repositories {
mavenCentral artifactUrls: [
'http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/'
]
}
dependencies {
compile 'net.sf.jasperreports:jasperreports:6.4.1'
}
この方法で依存関係を解決できる理由
JasperReports Libraryのpom.xmlには次のような記述があります。
<repositories>
<repository>
<id>jaspersoft-third-party</id>
<url>http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/</url>
</repository>
</repositories>
これはMavenのセントラルリポジトリに加えてhttp://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/
へライブラリを探しに行くことを宣言しています。2
先ほど見つけられなかったライブラリはこのリポジトリに登録されています。
しかしGradleはpom.xml内のrepositoriesを解析してライブラリを探すことはしません。
したがってGradleが、このリポジトリへライブラリを探しに行くように設定する必要があります。
Gradleではbuild.gradleにartifactUrlsを指定することで、探索先のリポジトリを追加できます。3
今回の場合、上記のリポジトリをmavenCentralのartifactUrlsに指定することで依存関係を解決することができます。4
この方法でも解決できない場合の対処
原因は不明ですがGradle 2.12を使用する場合、環境によってはartifactUrlsを指定しても正しく動作しないことがあるようです。
そのような場合は次のことを試してみてください。
- 使用するGradleのバージョンを変更する
- ホームディレクトリの.gradleを削除する
-
この現象を再現するには少なくとも1つのソースコードが必要です。 ↩
-
repositoriesについての解説 Maven – Introduction to Repositories ↩
-
artifactUrlsについての解説 Chapter 23. Dependency Management ↩
-
mavenCentralのリファレンスによる解説 ↩