web-dev-qa-db-ja.com

IDEAプロジェクトでDagger 2が生成したクラスを認識するIntelliJ Javaを作成する方法はありますか?

コンテキスト

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 +左クリックでその実装に移動できるようにします)?

26
Pelocho

やっとできました!

aptideaプラグインを追加する必要があったので、今は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'
}
16
Pelocho

私が見つけた最も簡単な方法:

  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'
    }
    
  2. IntelliJのAnnotation Processingをオンにします:Settingsに移動してAnnotation Processorsを検索し、下の画像のような注釈処理を有効にするをオンにします。

enter image description here

12
Hani

intelliJで注釈処理を手動で有効にする必要があります。

From:設定->ビルド、実行、配置->コンパイラ->アノテーションプロセッサ-> アノテーション処理を有効にする =およびプロジェクトのクラスパスからプロセッサを取得

次にプロジェクトを再ビルドすると、プロジェクト内に生成されたクラスが見つかります。

(Java)Androidプロジェクトでこのソリューションを使用したことに注意してください。

5
db80

IntelliJ IDEAのバージョン2017.3.30.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")
    }
}
4
Adil Hussain

これが私のために働いた解決策です:

ファイル->プロジェクト構造->(モジュールのリストからプロジェクトを選択)-> [依存関係]タブを開く

次に、緑色の「+」記号をクリックし、「JARまたはディレクトリ」を選択して、「build/classes/main」フォルダを選択します。

別の解決策は、build.gradle内の 'dependencies'ブロックを使用して、フォルダーをビルドクラスファイルにリンクすることです。

https://stackoverflow.com/a/22769015/5761849

2
Luka

これは、アイデアをDagger2とGradleで動作させるために私がしなければならなかったことです。

  1. 上記の回答に示されているように、注釈処理をオンにします。
  2. 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'
}
1
nazmul idris

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'
}

ただし、このソリューションが機能する最小バージョンはわかりません。

似たような問題があり、長い間原因を突き止めることができませんでした。

ローンチしたばかりで、その結果は私を驚かせました。 IDE displays an error 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'
}
0
Aska