web-dev-qa-db-fra.com

Changer le répertoire de sortie du code généré dans gradle

Le projet contient un processeur d'annotation qui génère du code Java lors de la compilation. Par défaut, gradle génère les fichiers source générés dans le répertoire build/classes. Cela pose quelques problèmes avec la découverte des fichiers sources nouvellement générés par IntelliJ.

Existe-t-il un moyen simple de configurer gradle pour exporter les fichiers source dans un autre répertoire? Par exemple, $buildDir/gen/main/Java ou $buildDir/build/generated/main/Java?

10
Araz Abishov

Il existe une option pour le compilateur Java qui permet de personnaliser le répertoire de sortie pour les sources Java générées ( documentation ).

-s dir

Spécifiez le répertoire où placer les fichiers source générés. Le le répertoire doit déjà exister; javac ne le créera pas. Si une classe est En tant que partie d’un package, le compilateur place le fichier source dans un sous-répertoire reflétant le nom du paquet, créant des répertoires selon les besoins. Pour Par exemple, si vous spécifiez -s C:\mysrc et que la classe est appelée com.mypackage.MyClass, le fichier source sera placé dans C:\mysrc\com\mypackage\MyClass.Java.

Exemple de build.gradle

compileJava {
    options.compilerArgs << "-s"
    options.compilerArgs << "$projectDir/generated/Java"

    doFirst {
        // make sure that directory exists
        file(new File(projectDir, "/generated/Java")).mkdirs()
    }
}

clean.doLast {
    // clean-up directory when necessary
    file(new File(projectDir, "/generated")).deleteDir()
}

sourceSets {
    generated {
        Java {
            srcDir "$projectDir/generated/Java"
        }
    }
}

Cet extrait de code fait ensuite:

  • crée et spécifie le répertoire comme sortie du code généré
  • supprime les sources générées si la tâche de nettoyage est appelée
  • ajoute un nouveau jeu de sources

Mettre à jour

Utilisez gradle apt plugin à la place.

11
Araz Abishov

Spécifiez simplement la valeur de project.buildDir property dans votre fichier build.gradle:

project.buildDir = '/gen/main/Java'

Cela mettra tous les fichiers de construction générés dans le dossier <project_root>/gen/main/Java.

4
Ivan Pronin

Par défaut, les fichiers Java générés sont sous $ generateFilesBaseDir/$ sourceSet/$ builtinPluginName, où $ generateFilesBaseDir est $ buildDir/générée/source/proto par défaut et est configurable. Par exemple.,

protobuf {
 ...
  generatedFilesBaseDir = "$projectDir/src/generated"
}

Le nom du sous-répertoire, qui est par défaut $ builtinPluginName, peut également être modifié en définissant la propriété outputSubDir dans le bloc builtins ou plugins d’une configuration de tâche dans le bloc generateProtoTasks (voir la section précédente). Par exemple.,

{ task ->
  task.plugins {
    grpc {
    // Write the generated files under
    // "$generatedFilesBaseDir/$sourceSet/grpcjava"
    outputSubDir = 'grpcjava'
    }
  }
}

à voir github protobuf-gradle-plugin

0
superbeyone