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

mar*_*amb 5 java gradle

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

Root Project
--> common
--> project1
--> project2
--> 3rd_party_api
Run Code Online (Sandbox Code Playgroud)

如此常见显然包含一堆在其他项目之间共享的代码。项目 1 和 2 很好,因为它们是 wars 并且包含公共 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')
    }
}
Run Code Online (Sandbox Code Playgroud)

编译成功,但来自 common 的额外类不包含在 jar 中。

任何帮助将不胜感激。

Dir*_*ann 1

也许是这样的:

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

没有检查这个...所以如果它不能开箱即用,请不要责怪我;)

另一种可能性是定义您的自定义sourceSets...但也从未尝试过。