Gradle - 包含另一个项目中的类文件

时间:2017-02-14 11:47:32

标签: java gradle

所以我有一个看起来像这样的多项目设置

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中。

非常感谢任何帮助。

2 个答案:

答案 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 ...但从未尝试过这个。