ChatGPT解决这个技术问题 Extra ChatGPT

Gradle 替代 mvn install

我在 mvn 上构建了 2 个不同的项目。我正在尝试替换为 Gradle。

项目 1 是一个 SDK,项目 2 正在使用该 SDK(示例)。

在 Maven 时代,它使用 mvn install 创建工件,将整个项目添加到本地存储库中。

我喜欢这样在gradle中工作。我喜欢项目 1 build.gradle 需要将其发布为 gradle 本地存储库,然后示例项目需要使用它。

在 Maven 中,我们执行 mvn install ,它将项目工件添加到 .m2 文件夹中,但是如何在 gradle 中执行,以便我可以将项目工件添加到本地存储库中。

我有什么办法可以做到吗?


t
the_storyteller

sdk/build.gradle

apply plugin: "maven"

group = "foo"
version = "1.0"

example/build.gradle

repositories {
    mavenLocal()
}

dependencies {
    compile "foo:sdk:1.0"
}

$sdk> gradle install

$example> gradle build

应用插件:“maven”和 $sdk> gradle install 这会将 sdk 安装到 .m2 中,对吗?并且 mavenLocal() 也从 .m2 和 .gradle 获取信息?
gradle install 发布到本地 Maven 存储库,mavenLocal() 确保在那里查找依赖项。
Gradle 不像 Maven 那样“面向阶段”吗? IOW,如果我执行 gradle publish,它不会也经历 install 阶段吗?
@PeterNiederwieser 我是否应该考虑 apply plugin: "maven" 为 Gradle 提供“安装”任务,对吗? - 在某种程度上 - 这是从 Maven 到 Gradle 的“传递”(如果该术语适合这里)任务,对吧?考虑更新您的答案。谢谢你
这在 Gradle 7+ 中不再相关,因为 maven 插件已被删除。相反,您需要使用 maven-publish 插件,然后使用 gradle publishToMavenLocal
M
Manuel Jordan

您可能正在寻找:

gradle publishToMavenLocal

提供:

apply plugin: 'maven-publish'

请参阅:Maven Publish Plugin


即使使用 Maven 选项,它也能正常工作:gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal
这与使用 maven 插件的 gradle install 有何不同?
@Matthew maven 插件已在 Gradle 7 中删除
c
csaba.sulyok

查看Gradle's documentation on multi-project builds

这是一个示例,带有一些额外的依赖项。只需在根文件夹中调用 gradle install,所有内容都将被构建并放入您的本地存储库。

文件夹结构:

root
+--> build.gradle
+--> settings.gradle
+--> sdk
|    +--> build.gradle
+--> example
     +--> build.gradle

根/build.gradle:

allprojects {
  apply plugin: 'java'
  apply plugin: 'maven'

  group = 'myGroup'
  version = '0.1-SNAPSHOT'
}

根/settings.gradle:

include 'sdk'
include 'example'

根/sdk/build.gradle:

dependencies {
  // just an example external dep.
  compile group:'commons-lang', name:'commons-lang', version:'2.3'
}

根/示例/build.gradle:

dependencies {
  compile project(':sdk')
  compile group:'log4j', name:'log4j', version:'1.2.16'
}

这是理想的做法吗?如果他想创建一个新项目example2,它也依赖于sdk怎么办?现在他必须将两个不相关的项目放在一个根项目下,只是因为它们共享一个依赖项?您会认为整个“多项目”设置也将是 1 个 Git 项目。同样,这对公司/多开发人员的工作流程有害吗?
S
Stef

您需要将自己的库发布到本地存储库。您可以通过以下方式执行此操作:

添加 maven-publish 插件: plugins { // 您的其他插件在这里... id 'maven-publish' } 将发布部分添加到您的构建文件中: publishing { Publications { myCoolLibrary(MavenPublication) { from components.java } } }运行 gradle build publishToMavenLocal 在文档中查找更多详细信息。