IntelliJ/gradle'ı hançer 2.0 kullanacak şekilde nasıl yapılandırabilirim?

Bir kepçe projem var ve içinde hançer 2.0 kullanmak istiyorum. Nasıl IntelliJ ve gradle dosyaları oluşturmak ve IntelliJ onları bulmak için izin vermek nasıl yapılandırılacağını bilmiyorum?

Build.gradle dosyam şuna benziyor:

apply plugin: 'java'
apply plugin: 'idea'

version = '1.0'

repositories {
    mavenCentral()
    maven {
        url "https://oss.sonatype.org/content/repositories/snapshots"
    }
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.12'
    compile 'org.slf4j:slf4j-simple:1.7.12'
    compile 'commons-configuration:commons-configuration:1.10'
    compile 'commons-collections:commons-collections:3.2.1'
    compile 'com.google.dagger:dagger:2.0'
    compile 'com.google.dagger:dagger-compiler:2.0:jar-with-dependencies'
    compile 'com.pi4j:pi4j-distribution:1.1-SNAPSHOT'
}

Uygulamamın derleme dizininde DaggerXmlConfigurationComponent dosyası var, bu da Dagger'in oluşturduğu bir bileşen. Fakat bunu IntelliJ'de kullanamıyorum çünkü sınıfı bulamıyor.

Bu bir Android uygulaması değil, Ahududu Pi için bir uygulamadır.

23
Buna bir çözüm buldunuz mu? Aynı sorunu yaşıyorum, dosyalar oluşturuluyor ve derlememi cmd satırından çalıştırırsam sorun değil, intellij hala oluşturulan dosyaların eksik olduğunu düşünüyor.
katma yazar accordionfolder, kaynak
Bunu gördünüz mü: stackoverflow'ta hançeri yapılandırma .com/sorular/20107182/& hellip; ? Belki yardımcı olabilir.
katma yazar LisaMM, kaynak

7 cevap

IntelliJ için ek açıklama işlemlerini manuel olarak etkinleştirmeniz gerekir: Ayarlar… → Oluştur, Yürütme, Dağıtım → Derleyici → Ek Açıklama İşlemcileri bölümünde, Ek açıklama işlemlerini etkinleştir ve işlemcileri proje sınıf yolundan al seçeneğini işaretleyin.

12
katma

Bir çözüm buldum.

https://github.com/tbroyer/gradle-apt-plugin

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "net.ltgt.gradle:gradle-apt-plugin:0.3"
  }
}

apply plugin: "net.ltgt.apt"

dependecies {
  apt 'com.google.dagger:dagger-compiler:2.0.1'
  compile 'com.google.dagger:dagger:2.0.1'
}

Ayrıca Intellij kullanıyorsanız, aşağıdaki bir yapılandırma önerilir:

Gradle entegrasyonunu IntelliJ IDEA'da kullanırken, fikir görevi yerine, açıklama işlemlerini manuel olarak etkinleştirmeniz gerekir: Ayarlar… → Oluştur, Yürütme, Dağıtım → Derleyici → Ek Açıklama İşlemcilerinde, Ek açıklama işlemlerini etkinleştir ve İşlemcileri projeden al seçeneğini işaretleyin. sınıf yolu. Gradle davranışını ve oluşturulan dosyalar davranışını taklit etmek için, üretim ve test kaynakları dizinlerini sırasıyla derleme/oluşturulmuş/kaynak/apt/main ve derleme/oluşturulmuş/kaynak/apt/test yapılarına ve oluşturulmuş kaynakları sakla: içerik kökü. Ayrıca tüm derleme dizininden Hariç Tut'u kaldırmak ve oluşturulan/source/apt/main dizinini kaynak olarak işaretlemek zorunda kaldım.

6
katma
"Ben de kaldırmak zorunda kaldım" ile başlayan son cümle için +1, ayrıca tüm derleme dizininden Hariç tutmayı kaldırdım ve oluşturulan/kaynak/apt/main dizinini kaynak olarak işaretle "
katma yazar Ognyan, kaynak
'Fikir' eklentisini ekleyene kadar benim için işe yaramadı. Ek Açıklama İşlemcilerini etkinleştirmeden bile çalışır. eklenti uygula: 'idea'
katma yazar Roman Golyshev, kaynak

Ben de eklentilerden herhangi birinin çalışmasını sağlayamadım, bu yüzden Stefan'ın cevabına dayanarak aşağıdakileri yaptım, ama can sıkıcı bir şekilde IntelliJ daha önce orada olmayan grup modülleri yaratıyor. Buna neyin sebep olduğu hakkında bir fikriniz varsa, bu düzeltmeyi gerçekten çok isterim.

apply plugin: 'java'
apply plugin: 'idea'

configurations {
    compileDagger
}

def genPath = new File(buildDir,"generated/source/apt/main" )

task createGenPath << {
    if(!genPath.exists()){
        genPath.mkdirs()
    }
}

compileJava.dependsOn(createGenPath)

compileJava {
    source += genPath
    classpath += configurations.compileDagger
    options.compilerArgs += ['-s', genPath]
}

idea.module {
    sourceDirs += genPath
}

dependencies {
    compileDagger "com.google.dagger:dagger-compiler:${dagger2Version}"
    compile "com.google.dagger:dagger:${dagger2Version}"
}
2
katma

Aşağıdaki çözümü bitirdim (ve gönderilen tüm cevaplardan en basiti gibi görünüyor):

apply plugin: 'java'
apply plugin: 'idea'

def generatedMain = new File(buildDir, "generated/main")

compileJava {
    doFirst {
        generatedMain.mkdirs()
    }
    options.compilerArgs += ['-s', generatedMain]
}
idea.module.sourceDirs += generatedMain

dependencies {
    compileOnly 'com.google.dagger:dagger-compiler:2.8'
    compile 'com.google.dagger:dagger:2.8'
}
1
katma

Var olan eklentilerle ilgili problemlerim vardı, bu yüzden build.gradle 'a aşağıdakileri ekledim:

def daggerVersion = "2.4"

// APT >>
def genPath = new File(buildDir,"generated/java/APT" )

task createGenPath << {
    if(!genPath.exists()){
        genPath.mkdirs()
    }
}
compileJava.dependsOn(createGenPath)

compileJava {
     options.compilerArgs << '-s' << genPath
}
// APT <<


dependencies {
    compile "com.google.dagger:dagger:$daggerVersion"
    compile "com.google.dagger:dagger-compiler:$daggerVersion"
}

// APT IDEA >>
idea.module {
    sourceDirs += genPath
   //maybe add to generatedSourceDirs
    iml {
        withXml {
            File ideaCompilerXml = project.file('.idea/compiler.xml')
            if (ideaCompilerXml.isFile()) {
                Node parsedProjectXml = (new XmlParser()).parse(ideaCompilerXml)
                updateIdeaCompilerConfiguration(parsedProjectXml)
                ideaCompilerXml.withWriter { writer ->
                    XmlNodePrinter nodePrinter = new XmlNodePrinter(new PrintWriter(writer))
                    nodePrinter.setPreserveWhitespace(true)
                    nodePrinter.print(parsedProjectXml)
                }
            }
        }
    }
}

static void updateIdeaCompilerConfiguration( Node projectConfiguration) { //actually resets APT
    Object compilerConfiguration = projectConfiguration.component.find { [email protected] == 'CompilerConfiguration' }
    compilerConfiguration.annotationProcessing.replaceNode{
        annotationProcessing() {
            profile(default: 'true', name: 'Default', enabled: 'true') {
                sourceOutputDir(name: '')
                sourceTestOutputDir(name: '')
                outputRelativeToContentRoot(value: 'true')
                processorPath(useClasspath: 'true')
            }
        }
    }
}
// APT IDEA <<
1
katma

In my case the problem was IDEA creating a separate module for the dagger generated files. I had to go to File -> Project Structure -> Modules and remove the projectname_dagger module (by clicking the red minus), then add the generated source folder to my projectname_main module by clicking Add Content Root and selecting it.

Bazı nedenlerden dolayı, Dagger'in dosyalarını silmek zorunda kaldım ve IDEA'nın onları yeniden üretmesine izin verdim çünkü projedeki çift dosyalar hakkında hatalar alıyordum.

Şimdi çalışıyor, Ek Not İşlemcilerinin kapatıldığı etkinlik (Android projeleri için çoğunlukla önemli olmaları gerektiğinden şüpheleniyorum).

1
katma

The easiest way, I know of is to use the apt-idea plugin

Eklentiyi build.gradle dosyasında etkinleştirin:

plugins {
    id 'java'
    id 'net.ltgt.apt-idea' version "0.15"
}

ve sonra açıklama işlemcilerini annotationProcessor yapılandırmasına ekleyin:

final DAGGER_VER = '2.16'
dependencies {
    implementation "com.google.dagger:dagger:${DAGGER_VER}"
    annotationProcessor"com.google.dagger:dagger-compiler:${DAGGER_VER}"
}

GitHub'da çok basit bir test projesi oluşturdum: ex.dagger
(IntelliJ 2018.1.4, Gradle 4.7 kullanılarak)

1
katma