2017-02-14 49 views
1

类文件,所以我有一个多项目设置,看起来像这样摇篮 - 包括从一个项目在其他

Root Project 
--> common 
--> project1 
--> project2 
--> 3rd_party_api 

所以共同的东西显然包含了一堆整个其他项目共享代码。项目1和2都很好,因为它们是战争并且包含通用jar文件作为依赖关系而没有任何问题。

我遇到的问题是我的3rd_party_api项目。这是一个非常小的jar文件,我们将提供给其他团队,以便他们可以与我们的代码集成。大多数所需的java代码都包含在这个项目文件夹中,但是共有项目中有3或4个类,并且需要包含在这个库中。因为它必须是独立的,我需要将这些类包装在jar文件中。

我已经尝试过srcDirs和source的各种迭代,但我不能为我的生活找出一个简单的方法来做到这一点。

正如我已经说过我已经看了不同的方法,但我的最新尝试,看起来有点像这样:

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') 
    } 
} 

这编译成功,但是从共同的额外课程不包括在瓶子里。

任何帮助将不胜感激。

回答

1

也许是这样的:

jar { 
    baseName = 'yourJarFileName' 
    from('path/to/your/dir/') { 
     include 'local/path/from/there/**/*.jar' 
    } 
} 

没有检查这个......所以不要怪我,如果它不开箱的工作;)

另一种可能性是定义您的自定义sourceSets ...但从来没有尝试过这一点。

3

谢谢德克,

没有为我工作,但让我思考其他方法。我最终通过使用定制的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' 
    } 
}