所以我有一个看起来像这样的多项目设置
Root Project
--> common
--> project1
--> project2
--> 3rd_party_api
如此常见显然包含一堆在其他项目中共享的代码。项目1和2很好,因为它们是战争并且包含公共jar文件作为依赖项而没有任何问题。
我遇到的问题是我的3rd_party_api项目。这是一个非常小的jar文件,我们将提供给其他团队,以便他们可以与我们的代码集成。大多数所需的java代码都包含在这个项目文件夹中,但是共同项目中有3或4个类需要包含在这个库中。因为它必须是独立的,所以我需要将这些类包装在jar文件中。
我已经尝试过srcDirs和源代码的各种迭代,但我不能为我的生活找到一个简单的方法来做到这一点。
正如我所说,我已经看过不同的方法,但我最近的尝试看起来有点像这样:
project(':api') {
defaultTasks 'jar'
apply plugin: 'java'
sourceSets {
main {
java {
srcDir 'src/main/java'
srcDir fileTree(dir: '../common/src/main/java').matching { include 'com/my/classes/**' }
}
}
dependencies {
compile project(':common')
}
}
这个编译成功但是常见的额外类不包含在jar中。
非常感谢任何帮助。
答案 0 :(得分:4)
谢谢Dirk,
我没有为我工作,但让我考虑其他方法。我最终使用自定义jar任务完成了我需要的工作。如下所示:
defaultTasks 'lib'
dependencies {
compile project(':common')
}
task lib( type: Jar, dependsOn: classes) {
from sourceSets.main.output
from (project(':common').sourceSets.main.output) {
include 'com/myclasses/stuff/**'
include 'com/specificclass/MyClass.class'
}
}
答案 1 :(得分:1)
可能是这样的:
jar {
baseName = 'yourJarFileName'
from('path/to/your/dir/') {
include 'local/path/from/there/**/*.jar'
}
}
没有检查过这个......所以如果不能开箱即用,请不要怪我;)
其他可能性是定义您的自定义sourceSets
...但从未尝试过这个。