Gradle: Comment faire une compilation portée de dépendance de fichiers exclus dans l'emballage?
J'ai un multi-module gradle projet avec les actions suivantes structure de base:
root
core
c-interface
m-interface
Le c-interface et m-interface de deux dépendent de la base de projet:
compile project(':root:core')
c-interface et m-interface de la GUERRE plugin, mais que le coeur n'est qu'un bocal.
Dans le noyau du projet, je suis en tirant dans certains système de fichiers de dépendances avec le suivant. L'une de ces dépendances je ne peux pas emballés, dans les Guerres généré par c-interface et m-interface. Auparavant j'ai eu cette dépendance dans un nexus repository maven afin que je puisse l'exclure par le groupe,le nom,la version, dans un providedRuntime configuration en c-interface et m-interface.
Je ne peux pas comprendre comment faire la même chose pour le fichier de dépendance. Le gradle dépendances de la tâche n'a pas la liste des dépendances de fichiers, donc je ne sais pas ce que je mettrais dans un providedRuntime.
J'ai lu http://issues.gradle.org/browse/GRADLE-471 mais en essayant d'utiliser l'idée, il ne semble pas supprimer l'archive de mes paquets. Voici ce que je suis actuellement en train de définir (dans le noyau de la construction.gradle):
compile fileTree(dir: 'dependencies/compile/archive', include: '*.jar', exclude: 'management.jar')
compile(files('dependencies/compile/archive/management.jar')){ notPackaged = true } //Excludes it from all publications
Mise à jour
providedCompile sans guerre plugin regardé comme une possibilité. J'ai mis cela dans le système de base.gradle et il a compilé bien, mais c de l'interface et m-interface a aussi besoin de dépendance au moment de la compilation. Y compris le fichier en tant que providedCompile (ou même un test de cohérence avec la compilation en c-interface et m-interface ne résout pas le temps de compilation des erreurs liés au manque de la management.jar la dépendance. À mon avis, parce qu'il était déjà étendue que providedCompile dans de base que la nouvelle déclarations sont ignorés dans c de l'interface et m-interface.
de base/construire.gradle:
configurations { providedCompile }
dependencies {
providedCompile files('dependencies/compile/archive/management.jar')
}
sourceSets.main.compileClasspath += configurations.providedCompile
sourceSets.test.compileClasspath += configurations.providedCompile
sourceSets.test.runtimeClasspath += configurations.providedCompile
c-/l'interface de construire.gradle:
providedCompile files('dependencies/compile/archive/management.jar')
OriginalL'auteur Rich | 2013-04-19
Vous devez vous connecter pour publier un commentaire.
Il n'y a probablement un nettoyant et une solution plus simple, mais vous pouvez spécifier une configuration personnalisée:
et puis spécifier toutes les dépendances:
Enfin, ajouter les
compileOnly
de configuration pour les chemins de classe de la source et de tous les ensembles deDe cette façon
management.jar
doit être dans le classpath pour la compilation mais qui ne sont pas emballés.MODIFIER
Seulement, maintenant, je comprends tout à fait votre problème. Le suivant a fonctionné pour moi sur un projet de test.
Au cœur du projet gradle fichier:
Dans un projet qui dépend de base:
Ouais, on dirait que je suis complètement ignoré que la section de votre question... pourriez-vous l'impression de tous les fichiers à compiler chemin de la source principale situé dans un afterEvaluate bloc?
quelque chose comme: afterEvaluate { sourceSets.principal.compileClasspath.les fichiers.chaque { println } }
Assurez-vous. L'exécution de la afterEvaluate à la fois le noyau et c-interface, je peux vous dire que management.jar est répertorié pour core afterEvaluate bloc, mais pas pour le c-interface afterEvaluate bloc.
Si j'ajoute la même compileOnly/providedCompile de la configuration du c-interface de construire.gradle, management.jar n'apparaît pas dans la liste, mais la compileJava tâche échoue encore de ne pas être en mesure de résoudre les paquets.
OriginalL'auteur erdi