Gradle 替代 mvn install

Posted

技术标签:

【中文标题】Gradle 替代 mvn install【英文标题】:Gradle alternate to 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 中执行,以便我可以将项目工件添加到本地存储库中。

我有什么办法吗?

【问题讨论】:

***.com/questions/2572811/… 【参考方案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】:

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

    添加maven-publish插件:

    plugins 
        // your other plugins come here...
        id 'maven-publish'
    
    

    将发布部分添加到您的构建文件中:

    publishing 
        publications 
            myCoolLibrary(MavenPublication) 
                from components.java
            
        
    
    

    运行gradle build publishToMavenLocal

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

【讨论】:

以上是关于Gradle 替代 mvn install的主要内容,如果未能解决你的问题,请参考以下文章

mvn2gradle

Gradle 相当于 `mvn clean -Dmaven.test.skip=true install`

bat脚本中使用gradle或maven等外部命令后,脚本不继续执行,直接退出

bat脚本中使用gradle或maven等外部命令后,脚本不继续执行,直接退出

无法从 Gradle 中的替代测试源集访问 Kotlin 内部成员

Linux下安装maven(mvn命令)