Gradle替代mvn安装

Raj*_*dra 149 maven-2 gradle

我在mvn上有两个不同的项目构建.我正在尝试替换为Gradle.

项目1是SDK,项目2是使用sdk(示例)

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

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

在maven中我们做了mvn install,它将一个项目工件添加到.m2文件夹中,但是如何在gradle中做什么,所以我可以将项目artefact添加到本地存储库中.

我能做到的任何方式吗?

Pet*_*ser 162

sdk/build.gradle:

apply plugin: "maven"

group = "foo"
version = "1.0"
Run Code Online (Sandbox Code Playgroud)

example/build.gradle:

repositories {
    mavenLocal()
}

dependencies {
    compile "foo:sdk:1.0"
}
Run Code Online (Sandbox Code Playgroud)

$sdk> gradle install

$example> gradle build
Run Code Online (Sandbox Code Playgroud)

  • `gradle install`发布到本地Maven repo中,`mavenLocal()`确保查找依赖项. (13认同)
  • 这在 Gradle 7+ 中不再相关,因为“maven”插件已被删除。相反,您需要使用“maven-publish”插件,然后使用“gradlepublishToMavenLocal”。 (12认同)
  • apply plugin: "maven" and $sdk> gradle install 这会将sdk安装到.m2中吗?mavenLocal() 也从 .m2 和 .gradle 获取信息? (2认同)

Mig*_*yes 59

您可能正在寻找:

gradle publishToMavenLocal
Run Code Online (Sandbox Code Playgroud)

适用于:

apply plugin: 'maven-publish'
Run Code Online (Sandbox Code Playgroud)

请参阅:https://docs.gradle.org/current/userguide/publishing_maven.html

  • 即使使用 maven 选项,它也能正常工作:`gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal` (6认同)
  • 这与使用 `maven` 插件的 `gradle install` 有何不同? (6认同)
  • @Matthew ‘maven’ 插件已在 Gradle 7 中删除 (4认同)

Sas*_*ota 10

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

  1. 添加maven-publish插件:

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

    publishing {
        publications {
            myCoolLibrary(MavenPublication) {
                from components.java
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 跑步gradle build publishToMavenLocal

    在文档中查找更多详细信息。


小智 8

查看Gradle关于多项目构建的文档.

这是一个例子,带有一些额外的依赖关系.只需调用gradle install根文件夹,所有内容都将构建并存入您的本地存储库.

文件夹结构:

root
+--> build.gradle
+--> settings.gradle
+--> sdk
|    +--> build.gradle
+--> example
     +--> build.gradle
Run Code Online (Sandbox Code Playgroud)

根/的build.gradle:

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

  group = 'myGroup'
  version = '0.1-SNAPSHOT'
}
Run Code Online (Sandbox Code Playgroud)

根/ settings.gradle:

include 'sdk'
include 'example'
Run Code Online (Sandbox Code Playgroud)

根/ SDK /的build.gradle:

dependencies {
  // just an example external dep.
  compile group:'commons-lang', name:'commons-lang', version:'2.3'
}
Run Code Online (Sandbox Code Playgroud)

根/示例/的build.gradle:

dependencies {
  compile project(':sdk')
  compile group:'log4j', name:'log4j', version:'1.2.16'
}
Run Code Online (Sandbox Code Playgroud)

  • 这是理想的做法吗?如果他想创建一个新项目,例如2,它还依赖于sdk,该怎么办?现在他必须将2个不相关的项目放在根项目下,因为它们共享一个依赖项?您会认为整个"多项目"设置也是1 Git项目.同样,这对公司/多开发人员工作流程有害吗? (4认同)