2017-10-02 2 views
1

J'ai reçu un projet A qui a besoin d'accéder aux fichiers de classe d'un autre projet B. Plus précisément, A a besoin que les classes compilées à partir de la partie B/ejb/C/src de l'arbre B/:Comment utiliser Gradle pour créer un JAR spécial avec seulement un sous-ensemble de classes?

B/ejb/C/src/com/company/admin/Foo.java 
B/ejb/C/src/com/company/admin/FooHome.java 
B/ejb/C/src/com/company/admin/FooBean.java 
B/ejb/NOTNEEDED/src/com/company/data/... 

La personne qui a ce projet A avant utilisé JBuilder et inclus dans les pointeurs de définition de source B/ejb/C/src de projet parallèle. Le projet A génère un fichier jar qui inclut des classes compilées à partir de cet autre arbre. J'essaie de comprendre comment faire cela en utilisant Gradle. Je veux faire un B/build.gradle dans le projet B qui va créer un B-C-version.jar de .class fichiers compilés à partir de ces sources:

B/ejb/C/src/com/company/admin/Foo.java 
B/ejb/C/src/com/company/admin/FooHome.java 
B/ejb/C/src/com/company/admin/FooBean.java 

que je puis publier Maven et l'accès du projet A.

à savoir le B-C-version.jar aurait idéalement avoir que ces classes:

com/company/admin/Foo.class 
com/company/admin/FooHome.class 

mais si B-C-version.jar avait ces classes:

com/company/admin/*.class 

ce serait aussi OK. Comment puis-je faire une telle chose en utilisant un build.gradle dans le projet B?

Répondre

1

Vous pouvez simplement déclarer une coutume Jar tâche comme

task cJar(type: Jar) { 
    baseName = project.name + '-C' 
    from sourceSets.main.output 
    include 'com/company/admin/Foo.class', 'com/company/admin/FooHome.class' 
} 

ou vous pouvez faire un sourceset dédié pour votre api que vous utilisez ensuite de votre autre code B et de votre Un code, vous n'avez pas besoin de travailler avec comprend et mettre à jour le comprennent si vous avez besoin d'ajouter des fichiers, mais vous les placez simplement dans le dossier source de l'ensemble source et vous avez terminé, quelque chose comme

sourceSets { c } 

task cJar(type: Jar) { 
    baseName = project.name + '-C' 
    from sourceSets.c.output 
} 

Ensuite, vous pouvez également déclarer des dépendances séparément et obtenir les bons dessinés en transitoire et ainsi de suite. Mais cela pourrait être exagéré dans votre situation.