Gradle 4.0 introduit plusieurs sourceSet
s par la JVM de la langue afin d'activer à distance de construire la mise en cache. Avec l' java
plugin votre build/classes/main
devrait devenir build/classes/java/main
et build/classes/test
devrait devenir build/classes/java/test
, etc.
L'avertissement que vous voyez n'est défini dans DefaultSourceSets.java
Par conséquent, si un plugin dans votre projet ou votre build.gradle
des appels DefaultSourceSetOutput.getClassesDir()
(ou accéder classesDir
) vous obtenez ce message d'avertissement.
Solution 1
Utilisation
sourceSets.main.output.classesDir = new File(buildDir, "classes/main")
ce qui correspond à:
@Override
public boolean isLegacyLayout() {
return classesDir!=null;
}
@Override
public void setClassesDir(File classesDir) {
setClassesDir((Object)classesDir);
}
@Override
public void setClassesDir(Object classesDir) {
this.classesDir = classesDir;
this.classesDirs.setFrom(classesDir);
}
Notez que SourceSetOutput.java marques getClassesDir()
comme obsolète.
Donc, jusqu'à ce que tous les plugins dans votre projet d'obtenir un soutien pour Gradle 4.0 vous devez vous en tenir à la solution de contournement et d'ignorer la dépréciation des avertissements.
Un autre problème est fichiers de test. Si vous ne voulez pas avoir la nouvelle mise en page (build/classes/main
et build/classes/java/test
) vous devez ajuster test de chemin de trop:
sourceSets.main.output.classesDir = new File(buildDir, "classes/main")
sourceSets.test.output.classesDir = new File(buildDir, "classes/test")
Mise à JOUR
Les utilisateurs de l'IDÉE peut remarquer que l'IDE démarre à l'aide de séparer out
annuaires pour construire si Gradle 4.x est détecté. Cela rend impossible à chaud application de rechargement si vous exécutez l'application en dehors de l'IDÉE. Pour corriger que d'ajouter et de les réimporter:
subprojects {
apply plugin: 'idea'
// Due to Gradle 4.x changes (separate output directories per JVM language)
// Idea developers refuse to reuse Gradle classpath and use own 'out/' directory.
// Revert to old behavior to allow Spring Devtool to work with using fast Idea compiler.
// https://youtrack.jetbrains.com/issue/IDEA-175172
// Alternatively use native Gradle builds or bootRun.addResources = true
// To use this feature push Ctrl+Shift+F9 to recompile!
// Be aware that Idea put resources into classes/ directory!!
idea.module.inheritOutputDirs = false
idea.module.outputDir = sourceSets.main.output.classesDir
idea.module.testOutputDir = sourceSets.test.output.classesDir
}
Veuillez noter que l'IDÉE met des ressources dans le répertoire .class
fichiers de sorte que votre Gradle classpath peut être corrompu. Il suffit de ne gradle clean
pour les modules sur lesquels vous utilisez IDÉE intégré dans l'accumulation de commandes (Ctrl+Maj+F10, etc).