コンテキスト
JavaでビルドプロジェクトとしてGradle
を使用して個人プロジェクトを開始しました。DIとしてDagger 2を使用したいのです。これを行う主な理由は、そのライブラリは、大きなプロジェクトで簡単に使用できます。
何を試しましたか
Googleサンプル をIntelliJ IDEAで実行できました
問題
IntelliJ IDEAは、生成されたクラス(この場合はDaggerCoffeeApp_Coffee
)を解決できないことを通知し続けます。)書かれたコードが正しいかどうかを知らないのは(特に、ダガーの使い方を学ぶ2)。
すべてのJavaクラスは Googleサンプル と同じです。ここにbuild.gradle
ファイルがあります:
apply plugin: 'Java'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.google.dagger:dagger:2.0.1'
compile 'com.google.dagger:dagger-compiler:2.0.1'
}
質問
IntelliJ IDEAをDaggerCoffeeApp_Coffee
を生成されたクラスとして認識させる方法はありますか(そのため、 `Ctrl +左クリックでその実装に移動できるようにします)?
やっとできました!
apt
とidea
プラグインを追加する必要があったので、今はbuild.gradle
ファイルは次のようになります。
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "net.ltgt.gradle:gradle-apt-plugin:0.4"
}
}
apply plugin: "net.ltgt.apt"
apply plugin: 'Java'
apply plugin: 'idea'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.google.dagger:dagger:2.0.1'
apt 'com.google.dagger:dagger-compiler:2.0.1'
}
私が見つけた最も簡単な方法:
idea
プラグインを追加し、以下のようなDagger2依存関係を追加します。
plugins {
id "net.ltgt.apt" version "0.10"
}
apply plugin: 'Java'
apply plugin: 'idea'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.google.dagger:dagger:2.11'
apt 'com.google.dagger:dagger-compiler:2.11'
}
IntelliJのAnnotation Processing
をオンにします:Settings
に移動してAnnotation Processors
を検索し、下の画像のような注釈処理を有効にするをオンにします。
intelliJで注釈処理を手動で有効にする必要があります。
From:設定->ビルド、実行、配置->コンパイラ->アノテーションプロセッサ-> アノテーション処理を有効にする =およびプロジェクトのクラスパスからプロセッサを取得
次にプロジェクトを再ビルドすると、プロジェクト内に生成されたクラスが見つかります。
(Java)Androidプロジェクトでこのソリューションを使用したことに注意してください。
IntelliJ IDEAのバージョン2017.3.3
、0.14
プラグインのバージョンnet.ltgt.apt
およびDaggerのバージョン2.14.1
を使用し、idea
プラグインを適用していますbuild.gradle
ファイルで(Pelochoの answer のように)次のように、Daggerによって生成されたソースを検索できる場所をIntelliJに通知する必要があることもわかりました。
apply plugin: 'idea'
idea {
module {
sourceDirs += file("$buildDir/generated/source/apt/main")
testSourceDirs += file("$buildDir/generated/source/apt/test")
}
}
これが私のために働いた解決策です:
ファイル->プロジェクト構造->(モジュールのリストからプロジェクトを選択)-> [依存関係]タブを開く
次に、緑色の「+」記号をクリックし、「JARまたはディレクトリ」を選択して、「build/classes/main」フォルダを選択します。
別の解決策は、build.gradle内の 'dependencies'ブロックを使用して、フォルダーをビルドクラスファイルにリンクすることです。
これは、アイデアをDagger2とGradleで動作させるために私がしなければならなかったことです。
Ideaが生成されたクラスをソースとして表示できるように、以下をbuild.gradle
ファイルに追加します。
sourceDirs += file("$projectDir/out/production/classes/generated/")
これが私のbuild.gradle
の完全なリストです
plugins {
id 'Java'
id 'idea'
id "net.ltgt.apt" version "0.10"
}
idea {
module {
sourceDirs += file("$projectDir/out/production/classes/generated/")
}
}
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.dagger:dagger:2.16'
apt 'com.google.dagger:dagger-compiler:2.16'
}
sourceCompatibility = 1.8
また、out
ディレクトリを空にするために、次のGradleタスクを(私のbuild.gradleファイルに)追加する必要がありました。いくつかのファイルを移動してDagger2がソースファイルを再生成したとき、out
ディレクトリがクリアされていませんでした:(この実行タスクにもこのタスクを含めたため、プロジェクトを再ビルドする前にトリガーされます。
task clearOutFolder(type: Delete) {
delete 'out'
}
IntelliJ IDEA 2019.1およびGradle 5.4.1を使用すると、これで十分のようです。
plugins {
id 'Java'
}
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
implementation 'com.google.dagger:dagger:2.23.1'
annotationProcessor 'com.google.dagger:dagger-compiler:2.23.1'
}
ただし、このソリューションが機能する最小バージョンはわかりません。
似たような問題があり、長い間原因を突き止めることができませんでした。
ローンチしたばかりで、その結果は私を驚かせました。 Intellij Idea 2018.3.6-build.gradle
:
plugins {
id "Java"
}
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.google.dagger:dagger:2.11'
apt 'com.google.dagger:dagger-compiler:2.11'
}