web-dev-qa-db-ja.com

Build.gradleファイルにlocal .jarファイル依存関係を追加するには?

だから私は私のbuild.gradleファイルに私のローカルの.jarファイルの依存関係を追加しようとしました:

apply plugin: 'Java'

sourceSets {
    main {
        Java {
            srcDir 'src/model'
        }
    }
}

dependencies {
    runtime files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
} 

そして、あなたは私がここにreferencedLibrariesフォルダに.jarファイルを追加したことを見ることができます: https://github.com/WalnutiQ/wAlnut/tree/version - 2.3.1/referenceLibraries

しかし問題は、コマンドラインでgradle buildコマンドを実行すると、次のようなエラーが表示されることです。

error: package com.google.gson does not exist
import com.google.gson.Gson;

ここに私の全体のレポがあります: https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1

504
Q Liu

あなたが本当にローカルディレクトリからその.jarを取る必要があるなら、

あなたのモジュールgradleの隣に追加します(app gradleファイルではありません):

repositories {
   flatDir {
       dirs 'libs'
   }
}


dependencies {
   compile name: 'gson-2.2.4'
}

しかし、実際のMavenリポジトリの標準の.jarなので、これを試してみませんか?

repositories {
   mavenCentral()
}
dependencies {
   compile 'com.google.code.gson:gson:2.2.4'
}
397
Jorge_B

ドキュメント に従って、次のようにローカルjar依存関係に相対パスを使用します。

dependencies {
    compile files('libs/something_local.jar')
}
568
leeor

ローカルリポジトリにあるすべてのJARを含むようにすることもできます。これにより、毎回指定する必要がなくなります。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
283
Nightwolf

以下は私のために働きます:

compile fileTree(dir: 'libs', include: '*.jar')

Gradleのドキュメント を参照してください。

42
Misha

受け入れられた答えは良いです、しかし、私は私のマルチプロジェクトGradleビルドの中で同じサードパーティJavaライブラリを使うために様々なライブラリ設定を必要としたでしょう。

' allprojects 'クロージャ内の ' dir ' path要素に ' $ rootProject.projectDir 'を追加すると、各サブプロジェクトが同じ ' libs 'ディレクトリを参照することになります。および not そのサブプロジェクトのローカルバージョン。

//gradle.build snippet
allprojects {
    ...

    repositories {
        //All sub-projects will now refer to the same 'libs' directory
        flatDir {
            dirs "$rootProject.projectDir/libs"
        }
        mavenCentral()
    }

    ...
}

QuizzieによるEDIT: "$ {rootProject.projectDir}"を "$ rootProject.projectDir"に変更しました(最新のGradleバージョンで動作します)。

27
Big Rich

ローカルのMavenリポジトリをGradle用に再利用してみることができます。

  • ローカルのMavenリポジトリにjarをインストールします。

    mvn install:install-file -Dfile=utility.jar -DgroupId=com.company -DartifactId=utility -Dversion=0.0.1 -Dpackaging=jar

  • Jarファイルが~/.m2/ローカルのMavenリポジトリにインストールされていることを確認してください。

  • build.gradleファイルでローカルのMavenリポジトリを有効にします。

    repositories {
      mavenCentral()  
      mavenLocal()  
    }
    
    dependencies {  
      compile ("com.company:utility:0.0.1")  
    }
    
    • プロジェクトのコンパイル用にjarを有効にします。
25
Daniel Mora

これを行う簡単な方法は、

compile fileTree(include: ['*.jar'], dir: 'libs')

appのlibsディレクトリにあるすべての.jarファイルをコンパイルします。

12
ZygoteInit

私は https://stackoverflow.com/a/20956456/1019307 で上記の提案を得ることができませんでした。これは私にとってはうまくいきました。プロジェクトのルートにあるsecondstring-20030401.jarディレクトリに格納したファイルlibs/の場合:

repositories {
    mavenCentral()
    // Not everything is available in a Maven/Gradle repository.  Use a local 'libs/' directory for these.
    flatDir {
       dirs 'libs'
   }
}

...

compile name: 'secondstring-20030401'
8
HankCa

質問はすでに詳細に回答されています。私はまだ私にとって非常に驚くように思える何かを追加したいです。

"gradle dependencies"タスクはファイルの依存関係をリストしません。あなたはそう思うかもしれませんが、結局、それらは "dependencies"ブロックで指定されているので。

そのため、参照しているローカルのlibファイルが正しく動作しているかどうかを確認するのに、この出力に頼らないでください。

6
icyerasor

私のために働いた解決策はbuild.gradleファイルのfileTreeの使用法です。依存関係として追加する必要がある.jarをlibsフォルダーに保存します。以下のコードをbuild.gradleのdependenicesブロックに入れます。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
6
Jince Martin

それをする最良の方法はあなたのbuild.gradleファイルにこれを追加して同期オプションを押すことです

dependency{
    compile files('path.jar')
}
5
saunlogan

Kotlin DSLを使っている人のための解決策

これまでに追加された解決策はOPには最適ですが、最初にそれらを変換しない限りKotlin DSLで使用することはできません。 Kotlin DSLを使って自分のビルドにローカルの.JARを追加する方法の例を示します。

dependencies {
    compile(files("/path/to/file.jar"))
    testCompile(files("/path/to/file.jar"))
    testCompile("junit", "junit", "4.12")
}

Windowsを使用している場合は、バックスラッシュをエスケープする必要があります。

...
compile(files("C:\\path\\to\\file.jar"))
...

また、引用符は一重引用符ではなく二重引用符でなければならないことを忘れないでください。

2

Jarを追加できます:

Gradleの場合、次のコードをbuild.gradleに入れるだけです。

dependencies {
...
compile fileTree(dir: 'lib', includes: ['suitetalk-*0.jar'])
...
}

mavenの場合は、次の手順に従ってください。

Intellijの場合:[ファイル]-> [プロジェクト構造]-> [モジュール]-> [依存関係]タブ-> [+記号]-> [jarと依存関係]をクリックします。

実行時にJava.lang.NoClassDefFoundError: Could not initialize class例外が発生した場合、jarの依存関係がインストールされていないため、親プロジェクトにすべての依存関係を追加する必要があることを忘れないでください。

1
ankit

ジャンプ - >プロジェクト構造 - >モジュール - > app - > Dependenciesタブ - > +(ボタン)をクリック - > Select File Dependency - > libフォルダーのjarファイルを選択

このステップは自動的にあなたの依存関係をgraldeに追加します

とてもシンプル

1
Jaya