13
11

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でローカルのMavenアーティファクトを参照する

Last updated at Posted at 2017-02-18

GradleでローカルのMavenアーティファクトを参照する

ソースは公開されているものの、アーティファクトが公開リポジトリに登録されていないMavenアーティファクトをGradleで依存関係に設定する方法を検討する。

  • 例)AzureのNotificationHub: Azure/azure-notificationhubs-java-backend

    • groupId - com.windowsazure
    • artifactId - NotificationHubs
    • version - 0.0.4
  • 利用すべき方法

    • 外部依存のないプレーンなjar -> 方法1
    • 外部依存なしのMaven jar -> 方法2/3
    • 外部依存ありのMaven jar -> 方法3

方法1 - files

  • プロジェクト構成
- gradle-project
  - build.gradle
  - lib
    - NotificationHubs-0.0.4.jar
build.gradle
dependencies {
    compile files ('lib/NotificationHubs-0.0.4.jar') // ファイルパスで指定する
}

問題点

  • 外部のモジュール参照を行っていないjarファイルに限定される。
    • jarファイルがMavenアーティファクトの場合、filesで指定したモジュールが利用している依存関係が解決されない。実行時にランタイムエラーとなる。
      • jarのソースファイルが参照できる場合は、対象のMavenアーティファクトをassembyshadeMavenプラグインでfat jarにすればいい。

方法2 - repositories flatDir

  • プロジェクト構成
    • 方法1と変わらず
build.gradle
repositories {
    flatDir {
        dirs "lib" // このファオルダに置いたjarを通常のdependencies表記で参照できる
    }
}

dependencies {
    compile('com.windowsazure:NotificationHubs:0.0.4') // groupId/artifactId/version
}
  • NotificationHubsが持つ外部依存が解決されていない。コンパイルはできても実行時にクラスが見つからなくてエラーになる。

NotificationHubsの依存先が出てこない

問題点

  • 方法1と同様に、参照したモジュールが更に外部依存を持っている場合、依存関係が解決されない。
  • マルチプロジェクトでの利用は注意
build.gradle
subprojects {
    repositories {
        flatDir {
            dirs "${rootProject.projectDir}/lib"
        }
    }
}

方法3 repositories maven (Maven ローカルフォルダ構成)

  • プロジェクト構成
    • Mavenのローカルリポジトリのフォルダ構成を利用する
- gradle-project
  - build.gradle
  - lib
    - com
      - windowsazure
        -  NotificationHubs
          -  0.0.4
            - NotificationHubs-0.0.4.jar
            - NotificationHubs-0.0.4.pom
build.gradle
repositories {
    maven {
        url "lib"
    }
}

dependencies {
    compile('com.windowsazure:NotificationHubs:0.0.4') // groupId/artifactId/version
}
  • NotificationHubsが持つ外部依存が解決されている。

NotificationHubsの依存先があり全然に利用できる

問題点

  • マルチプロジェクト構成においては、方法2と同様の問題があるので注意。
13
11
0

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
13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?