【问题标题】:Gradle multi project - sharing source code between projectsGradle 多项目 - 项目之间共享源代码
【发布时间】:2015-08-13 13:40:15
【问题描述】:

在一个 gradle 多项目 (java) 中,是否可以共享源代码,以便每个项目都可以访问它并针对它进行编译?

例如,子项目 'mouse'、'cat'、'dog' 分别包含一个 java 类 - Mouse.java Cat.javaDog.java。这些类中的每一个都扩展了Animal.java

需要注意的是,当任何给定的子项目(例如,'mouse')正在构建时,它会定义一些编译时依赖项(来自 maven Central),并且它需要使用那些编译 Animal.java一些依赖项。其他项目也是如此。所以,我不能编译和 jar Animal.java 然后使用那个 jar 作为 3 个项目的依赖项。 Animal 必须与依赖项目的源一起重新编译。结果应该是 mouse.jar、cat.jar 和 dog.jar,每个都在各自的项目构建目录中(像往常一样),并且每个都包含它们的 Animal.class 版本。

我知道这个例子不是很直观(因为 Animal 应该足够通用,可以独立编译)。这是我能找到的最好的方法来模拟我试图解决的难以解释的场景。

这可以在 Gradle 中实现吗?

谢谢。

【问题讨论】:

  • 也许这个链接有帮助(显然,作为一个 Gradle 新手,它对我没有帮助,但听起来不错)docs.gradle.org/current/userguide/multi_project_builds.html
  • 谢谢@Danielson。我确实在这 3 个的父项目中使用了通用配置(实际上大约有 12 个子项目),并且效果很好。但是我没有看到关于如何共享公共代码并每次使用不同的依赖项重新编译它的建议。
  • 我希望我能帮忙,我试过了(但显示错误)。 share 是什么意思?和其他人?然后你需要deploy它到一个通用服务器
  • 那么您将有效地拥有 3 个不同版本的 animal.class?这在运行时如何工作?您的类加载器将加载哪个版本?除了如何在 gradle 中执行此操作的问题之外,您正在做的是一个非常糟糕的主意,首先打败了抽象 animal.java 的全部意义。
  • @RaGe 我同意它看起来很糟糕 - 但这只是因为我给出的示例过于简化。实际上,这些连接器是由不同的类加载器通过反射加载的,它运行良好并且可以达到目的。不要太从字面上看动物的例子。将“动物”视为所有 3 个类都使用的通用逻辑。目前,这个通用逻辑在所有 3 个中都重复,我想将其提取出来。如果除了继承之外还有更好的方法来做到这一点,那也很好。谢谢。

标签: java gradle build.gradle


【解决方案1】:

使用 sourceSets 解决了这个问题。将父项目主源码集添加到子项目中:

例如,添加到项目“鼠标”的build.gradle

sourceSets {
    main.java.srcDir project(':animal').sourceSets.main.java
}

【讨论】:

  • 如何从:animal 项目中排除文件?
  • 哇,我真的只需要用 Gradle 替换 MPP 吗?你能解释一下吗,有没有我没有找到的文档参考?我通常只使用 sourceSets 作为依赖项。这是 groovy 而不是 Kotlin 对吗?您将主要 java 源目录分配给另一个项目?你可以有多个 srcDir 吗?
  • 能否请您演示如何在 kotlin dsl 中执行此操作?
猜你喜欢
  • 2016-10-19
  • 2011-02-09
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 2014-12-08
相关资源
最近更新 更多