19
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GradleでJasperReports Libraryの依存関係を解決する方法

Last updated at Posted at 2016-01-02

前提

ソフトウェアのバージョン

  • Gradle 4.0.2
  • JasperReports Library v6.4.1

JasperReports Libraryの依存関係を解決できない問題

JasperReports LibraryはMavenのセントラルリポジトリに登録されています。
build.gradleで次のように記述することで依存関係を宣言することができます。

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を次のように変更することで依存関係を解決することができます。

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には次のような記述があります。

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を指定しても正しく動作しないことがあるようです。
そのような場合は次のことを試してみてください。

  1. 使用するGradleのバージョンを変更する
  2. ホームディレクトリの.gradleを削除する
  1. この現象を再現するには少なくとも1つのソースコードが必要です。

  2. repositoriesについての解説 Maven – Introduction to Repositories

  3. artifactUrlsについての解説 Chapter 23. Dependency Management

  4. mavenCentralのリファレンスによる解説

19
16
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?