【问题标题】:Gradle alternate to mvn installGradle 替代 mvn install
【发布时间】:2011-09-01 14:38:13
【问题描述】:

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

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

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

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

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

我有什么办法吗?

【问题讨论】:

标签: maven-2 gradle


【解决方案1】:

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

【讨论】:

  • apply plugin: "maven" and $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
【解决方案2】:

您可能正在寻找:

gradle publishToMavenLocal

适用于:

apply plugin: 'maven-publish'

见:Maven Publish Plugin

【讨论】:

  • 即使使用 maven 选项也能正常工作:gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal
  • 这与使用maven 插件的gradle install 有何不同?
  • @Matthew maven 插件已在 Gradle 7 中删除
【解决方案3】:

查看Gradle's documentation on multi-project builds

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

文件夹结构:

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

root/build.gradle:

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

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

root/settings.gradle:

include 'sdk'
include 'example'

root/sdk/build.gradle:

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

root/example/build.gradle:

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

【讨论】:

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

您需要将自己的库发布到本地存储库。您可以通过以下方式做到这一点:

  1. 添加maven-publish插件:

    plugins {
        // your other plugins come here...
        id 'maven-publish'
    }
    
  2. 将发布部分添加到您的构建文件中:

    publishing {
        publications {
            myCoolLibrary(MavenPublication) {
                from components.java
            }
        }
    }
    
  3. 运行gradle build publishToMavenLocal

    the documentation 中查找更多详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多