如何使用Gradle构建一个只包含一个子集类的特殊JAR?

如何使用Gradle构建一个只包含一个子集类的特殊JAR?,gradle,build.gradle,Gradle,Build.gradle,我得到了一个项目a,需要从另一个项目B访问类文件。更准确地说,A只需要从B/树的B/ejb/C/src部分编译类: 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项目并包含在源

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

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
项目中创建一个
B/build.gradle
,该项目将创建一个
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
项目访问

i、 例如,
B-C-version.jar
理想情况下只有以下类:

com/company/admin/Foo.class
com/company/admin/FooHome.class
com/company/admin/*.class
但是如果
B-C-version.jar
有以下类:

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

那也可以。如何在
B
项目中使用
build.gradle
创建这样的东西?

您可以简单地声明一个自定义
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代码中使用该源集,如果需要添加文件,则无需使用include并更新include,但您只需将它们放在源集中的源文件夹中,即可完成,如

sourceSets { c }

task cJar(type: Jar) {
   baseName = project.name + '-C'
   from sourceSets.c.output
}
然后,您还可以单独声明依赖项,并以传递方式绘制正确的依赖项,以此类推。但在你的情况下,这可能是矫枉过正