web-dev-qa-db-ja.com

Gradle:ローカルのGradleリポジトリでサードパーティのjarを使用できるようにします

現在、Mavenの代替としてGradleをテストしています。私のプロジェクトでは、いくつかのサードパーティのjarがあり、どの(Maven)リポジトリでも使用できません。私の問題は、これらのjarをローカルの.gradleリポジトリーにインストールするためにどのようにそれを管理できるかです。 (可能であれば、Gradleは独立して実行する必要があるため、ローカルのMavenリポジトリーを使用したくありません。)現時点では、jarがないために多くの例外が発生します。 Mavenでは、installコマンドを実行することで非常に簡単です。しかし、Mavenのinstallコマンドに似たものをGoogleで検索しても成功しませんでした。誰かアイデアはありますか?

44
MH.

ファイルシステムのJAR依存関係を次のように含めることができます。

dependencies {
    runtime files('libs/a.jar', 'libs/b.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
}

compile/testCompile/etcのランタイムを変更できます。

39
tolitius

より包括的な回答がAdam Murdochのメーリングリストで http://gradle.1045684.n5.nabble.com/Gradle-Make-a-3rd-party-jar-available-to-local- gradle-repository-td1431953.html

2010年4月の時点では、新しいjarファイルを〜/ .gradleリポジトリに追加する簡単な方法はありませんでした。現在、これが変更されたかどうかを調査しています。

2014年10月現在、これはまだ当てはまります。gradleはjarファイルのmd5チェックサムを実行するため、単にダウンロードして.gradle/cachesの下のディレクトリに配置することはできません。gradleはそうではありません。私は言うことができます、ローカルファイルを取得し、そのファイルをキャッシュにプッシュするタスクがあります。

10
Ian Durkan

Adam Murdochの投稿のうち、オプション(1)を使用しました(すでに上記のリンク: http://gradle.1045684.n5.nabble.com/Gradle-Make-a-3rd-party-jar-available-to-local -gradle-repository-td1431953.html )とgradle-1.3を組み合わせると、問題なく動作します。

ここに彼のコメント:

  1. Jarをローカルディレクトリにコピーし、flatDir()リポジトリを使用してそこから使用します。たとえば、それらを$ projectDir/libにコピーし、ビルドファイルで次のようにします。

リポジトリ{flatDir(dirs: 'lib')}

Libディレクトリ内のファイルは、name-version-classifier.extensionという命名規則に従う必要があります。バージョンと分類子はオプションです。したがって、たとえば、groovy-1.7.0.jarまたはgroovy.jarと呼ぶこともできます。

次に、通常どおりに依存関係を宣言します。

依存関係{コンパイル 'groovy:groovy:1.7.0'}

もう少し詳細な1つのflatDir()リポジトリがあります: http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sec:flat_dir_resolver

  1. 上記と同様ですが、flatDir()の代わりにivyリゾルバーを使用します。これは上記とほとんど同じですが、名前と場所に関する限り、より多くのオプションを使用できます。

いくつかの詳細があります: http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sub:more_about_ivy_resolvers

  1. 依存関係の宣言を気にしないでください。 jarをローカルディレクトリのどこかにコピーして、ファイルの依存関係を追加するだけです。たとえば、jarが$ projectDir/libにある場合:

dependency {compile fileTree( 'lib')//これには、コンパイルクラスパスの「lib」の下にあるすべてのファイルが含まれます}

詳細: http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#N12EAD

  1. Maven installを使用して依存関係をローカルのmavenキャッシュにインストールし、mavenキャッシュをリポジトリーとして使用します。

リポジトリ{mavenRepo(urls:new File(System.properties ['user.home']、 '.m2/repository')。toURI()。toURL())}

8
oae

つまり、リポジトリマネージャーにデプロイします。会社のLANでローカルにできます。

このタイプの問題、特に頻繁に発生する問題について、まったく異なる考え方は、リポジトリマネージャーを使用することです。 Artifactory、Nexus、Archivaなどの優れたオープンソースオプションがいくつかあります。

それをリファクタリングする機会があるまでビルドに含める必要のある怪しいOriginからのjarファイルがあるとしましょう。リポジトリマネージャーを使用すると、この例ではdubious-Origin-UNKNOWN.jarとしてファイルを独自のリポジトリにアップロードできます。

次に、build.gradleは次のようになります。

repositories {
    mavenRepo urls: "http://your.own.repository/url";
}

dependencies {
    compile "dubious:Origin:UNKNOWN";
}

リモートアーティファクトのキャッシュ、scmからのアーティファクトの削除、ステージングリリース、より詳細なユーザー権限など、リポジトリマネージャーを使用することには他にも多くの利点があります。

マイナス面としては、ビルドの実行を維持するためのメンテナンスオーバーヘッドを伴うサーバーを追加することになります。

あなたのプロジェクトのサイズに依存すると思います。

3
MrJohnBBQ

多分私はあなたの質問を読んで何かが足りないかもしれません、あなたのgradleレポがflatDirタイプであると仮定すると、myjar-1.0.jarの形式でそこにファイルをコピーし、バージョン1.0のmyjarとしてそれらを解決できるはずです。

ローカルのMavenリポジトリーにアクセスするために、GradleがMavenを実行する必要がある理由は不明です。 Mavenリポジトリを定義するだけで、依存関係を解決できます。必要に応じて、gradle uploadを使用して、jarをローカルまたはリモートのmavenリポジトリにプッシュできます。その場合、mavenが実行されます。

3
sal

私はこのようなものがうまくいくと思います:

dependencies {
  files('yourfile.jar')
}

それはあなたのために働きますか?

1
amorfis