tl; dr : Je ne peux pas configurer IntelliJ pour générer les fichiers Java dans le même répertoire que gradle
J'ai un petit projet qui utilise le processeur d'annotation immutables . Cela fonctionne comme prévu dans la construction de la ligne de commande gradle, mais je ne peux pas obtenir IntelliJ pour sortir les fichiers générés dans le même répertoire.
Le projet complet est disponible sur GitLab
Configuration Gradle :
J'utilise les plugins gradle suivants:
parties pertinentes du script de construction ( lien vers la liste complète ):
apply plugin: 'Java'
apply plugin: "net.ltgt.apt"
apply plugin: 'idea'
dependencies {
def immutablesVersion = '2.3.9'
compileOnly "org.immutables:value:$immutablesVersion:annotations"
compileOnly "org.immutables:encode:$immutablesVersion"
apt "org.immutables:value:$immutablesVersion"
}
quand je commence ./gradlew build
tout est comme prévu:
DataEncoding.Java
est traité dans le fichier Java généré DataEncodingEnabled.Java
finit dans/build/generated/source/apt/main
sous le package attendu com.tmtron.immutables.data
Dans IntelliJ, j'active le traitement des annotations comme suggéré par les gradle-apt-plugin docs :
Ensuite, j'exécute ./gradlew clean
pour m'assurer que les fichiers précédents ont disparu, puis je clique sur Build
- Build Project
dans IntelliJ.
Le processeur d'annotation est exécuté, mais le problème est que le fichier généré Java se retrouve au mauvais endroit:
Il se trouve dans: /build/generated/source/apt/main/build/generated/source/apt/main/com.tmtron.immutables.data
la partie en gras est redondante.
Qu'est-ce que je fais mal et comment puis-je le configurer correctement, afin qu'IntelliJ et gradle génèrent les fichiers dans le même répertoire?
Remarques:
MISE À JOUR 2.2019
depuis Gradle 5.2, il existe un moyen facile de le faire - voir gavenkoa s answer
MISE À JOUR 5.2018
Le moyen le plus simple que je connaisse est d'utiliser le plugin apt-idea
Activez simplement le plugin dans le build.gradle
fichier:
plugins {
id 'Java'
id 'net.ltgt.apt-idea' version "0.15"
}
puis ajoutez les processeurs d'annotation à la configuration annotationProcessor
:
final DAGGER_VER = '2.16'
dependencies {
implementation "com.google.dagger:dagger:${DAGGER_VER}"
annotationProcessor"com.google.dagger:dagger-compiler:${DAGGER_VER}"
}
Projet de test sur GitHub: ex.dagger
(en utilisant IntelliJ 2018.1.4, Gradle 4.7)
RÉPONSE ORIG
Il existe une solution de contournement simple en utilisant le répertoire parent qui fonctionne correctement dans IntelliJ 2016.3.4
../main
../test
Gradle et IntelliJ vont maintenant générer le code dans les mêmes répertoires.
Corrigé dans projet GitLab V0.0.2
voir aussi: problème # 35 d'apt-gradle-plugin
Maintenant https://github.com/tbroyer/gradle-apt-plugin déclare:
Le but de ce plugin était finalement de ne plus être nécessaire, étant remplacé par des fonctionnalités intégrées. Cela devient une réalité avec Gradle 5.2 et IntelliJ IDEA 2019.1 .
Donc:
dependencies {
compile("com.google.dagger:dagger:2.18")
annotationProcessor("com.google.dagger:dagger-compiler:2.18")
compileOnly("com.google.auto.factory:auto-factory:1.0-beta6")
annotationProcessor("com.google.auto.factory:auto-factory:1.0-beta6")
compileOnly("org.immutables:value-annotations:2.7.1")
annotationProcessor("org.immutables:value:2.7.1")
}
compileOnly
est nécessaire si vous utilisez des annotations, compile
si vous utilisez des classes, annotationProcessor
introduit dans Gradle 4.6 .
Pour activer le traitement d'une tâche de compilation spécifique:
compileJava {
options.annotationProcessorPath = configurations.annotationProcessor
}
Pour désactiver:
compileTestJava {
options.compilerArgs += '-proc:none'
}
Hé là, tout le monde, j'ai eu le même problème et j'ai trouvé un moyen propre de résoudre ce problème. J'utilise deux bibliothèques qui nécessitent un traitement d'annotation (Lombok et MapStruct).
Aussi mon IntelliJ est 2019.1 (mettez à jour le vôtre s'il est plus ancien) et Gradle 5.2.1.
Configurons d'abord IntelliJ:
La dernière étape consiste à configurer correctement vos dépendances dans Gradle.
Vous pouvez maintenant exécuter la construction et l'exécution à partir de la ligne de commande et de l'EDI.
À votre santé!
gradle compileJava
Et le projet devrait trouver toutes les annotations et le fichier source généré. J'espère que cela aide.