如何使用Gradle构建一个只有一部分类的特殊JAR?

时间:2017-10-02 16:10:33

标签: gradle build.gradle

我收到了一个项目A,需要访问另一个项目B中的类文件。更准确地说,A只需要从B/ejb/C/src树的B/部分编译的类:

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/...

在使用JBuilder之前拥有此A项目并且包含在并行项目B/ejb/C/src的源定义指针中的人。 A项目构建一个jar,其中包含从另一个树编译的类。我正试图弄清楚如何使用Gradle来做到这一点。我想在B/build.gradle项目中创建B,该项目将创建从这些来源汇编的B-C-version.jar.class个文件:

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

然后我将发布到Maven并从A项目进行访问。

即,B-C-version.jar理想情况下只有这些类:

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

但如果B-C-version.jar有这些类:

com/company/admin/*.class

那也没关系。如何使用build.gradle项目中的B进行此类操作?

1 个答案:

答案 0 :(得分:2)

您可以简单地声明自定义Jar任务,例如

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

或者您可以为您的api创建一个专用的源集,然后您可以从其他B代码和A代码中使用它,那么如果需要添加文件,则不需要使用包含并更新包含,但是你只需将它们放在源集的源文件夹中就可以了,就像

一样
sourceSets { c }

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

然后你也可以分别声明依赖关系并获得传递中的正确依赖等等。但在你的情况下可能会有点过分。