【问题标题】:Maven like local repository with GradleMaven 喜欢使用 Gradle 的本地存储库
【发布时间】:2016-11-15 09:03:00
【问题描述】:

拥有多个相互关联的独立项目是常见的用例。例如一些常用的实用程序库。使用 Maven,您可以在本地安装修改后的依赖项,以便在构建依赖项目时使用它。我总是认为这种功能是理所当然的(IDE 也支持这一点)。

但是对于 Gradle,我没有发现任何类似的功能。我不想为了能够在本地安装工件而进行本地 Maven 安装(那么 Gradle 的意义何在)。我也不想依赖 CI,因为在开发过程中程序员喜欢迭代直到他们对 API 满意为止。仅仅为了在我们的 Nexus 中编译和安装它,就会有许多无用的提交。

是否有任何最佳实践来管理不共享公共根的本地开发或相关项目?

【问题讨论】:

  • 我相信你认为理所当然的事情实际上违反了 Maven 旨在提供的东西:可重复构建。无论如何,Gradle 相当于 Maven 本地 repo,在某些方面,是您本地家庭中 .gradle 下的缓存。
  • 我理解你的意思,但就本地开发而言,必须使用 CI 进行迭代工作将是性能和存储库的噩梦。据我了解,Gradle 缓存不是解决方案。它仅用作缓存,不应将工件安装到其中。
  • 我不明白你的意思。无论如何,为什么不在你的 gradle 配置中添加一个本地目录的存储库呢?或者简单地将mavenLocal() 添加为您的存储库之一
  • 我基本上只是在寻找相关项目本地开发的最佳实践。如果您坚持本地存储库方法原则上存在缺陷,那么您的工作方式是什么?我已经使用 Gradle 搜索了一些指南,我能找到的最好的方法是使用 CI 和您的公司存储库。但由于上述原因,这似乎有点矫枉过正。
  • Maven 本地是使用 Ant 任务解决的,您必须使用正确的存储库路径设置 .m2/settings.xml。因此,您在同一台机器上拥有一种依赖于另一个构建系统的构建系统。 Gradle 也通过 Composite 构建部分解决了这个问题。但它们没有传递性。

标签: gradle


【解决方案1】:

首先,您可以在 mavenLocal() 中发布/引用 jar,而无需安装 Maven(它只是一个 gradle 知道如何读取/写入的目录)

其次,Gradle 将为您构建中的每个 MavenPublication 创建一个 PublishToMavenLocal 任务,以便您可以调用这些任务来在 %USER_HOME%/.m2 中安装 jars

第三点……忘记我的第一点和第二点。如果您不想使用 mavenLocal(),您可以使用 Gradle 3.1 中添加的新 composite build 功能。在我看来,这个功能比 mavenLocal 好得多,因为快照 jar 在到期后永远不会被远程获取,而是始终使用本地源。这让我在本地安装的快照 jar 已过期的 maven 上绊倒了很多次

【讨论】:

  • 我在 Gradle 论坛上读到 mavenLocal() 解析是由 Ant 任务实现的,其中存储库查找的逻辑是硬编码的,更改其位置的唯一方法是使用 .m2/settings.xml。无论如何,我同意复合构建看起来是迄今为止最好的选择。
猜你喜欢
  • 2018-05-23
  • 1970-01-01
  • 2021-10-14
  • 2019-12-27
  • 2013-10-11
  • 1970-01-01
  • 2014-06-24
  • 2014-12-22
  • 1970-01-01
相关资源
最近更新 更多