【问题标题】:Gradle : Something like Maven Parent POMGradle:类似于 Maven Parent POM
【发布时间】:2018-09-14 18:06:56
【问题描述】:

在我们公司,许多不同的项目使用相似的技术栈,并且会有很多共同的特点。 因此,我们希望在一个通用文件中维护通用功能、依赖项等,并在其他项目中引用它。 在 maven 中,这类似于使用公共依赖信息创建一个单独的 maven 项目,并在其他项目中将其引用为 .

我想做一些类似于 gradle 中的 maven 父项目,它可以被所有不同的项目使用。 我用谷歌搜索,但找不到关于如何做到这一点的简明信息。 我们不允许使用外部第三方插件。

如果有人能解释一下如何做到这一点,那就太好了。

【问题讨论】:

标签: gradle parent-pom


【解决方案1】:

在 gradle 中你可以做到这一点,但是你需要有外部插件,否则至少现在是不可能的。我是这样实现的:

buildscript {
repositories { jcenter() }

    dependencies {
        classpath 'com.netflix.nebula:nebula-dependency-recommender:4.3.0'
    }
}

allprojects {
    apply plugin: 'nebula.dependency-recommender'
    apply plugin: 'groovy'
    apply plugin: 'java'

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    repositories {
        mavenCentral()
        jcenter()

        maven { url "http://repo1.maven.org/maven2/" }
        maven { url "REPOSITORY_OF_YOUR_PARENT_POM.XML" }
    }

    dependencyRecommendations {
        mavenBom module: 'YOUR_PARENT_POM_GROUP:YOUR_PARENT_POM_ID:YOUR_PARENT_POM_VERSION'
    }
}

在哪里:
REPOSITORY_OF_YOUR_PARENT_POM.XML - 任何系统,如 nexus 或其他可用于 maven 的系统
YOUR_PARENT_POM_GROUP - 你的父 pom 项目组(例如 com.foo.bar.parent)
YOUR_PARENT_POM_ID - 你的父 pom id(例如 projects-parent)
YOUR_PARENT_POM_VERSION - 你的父 pom 项目版本(例如 1.0.1)

所以,如果对 netflix.nebula 的外部依赖没问题,那么你可以这样做

【讨论】:

    【解决方案2】:

    Gradle 有许多扩展机制来利用位于主脚本之外的构建逻辑。

    可以做的一个简单的事情是使用外部构建脚本,该脚本可以来自本地文件系统或通过 URL,请参阅documentation on this topic

    如果该解决方案问题太大,那么您可以打包一个其他人可以应用并可能配置的真实插件。

    这将允许您配置比依赖项更多的配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 2018-05-26
      • 2015-06-13
      相关资源
      最近更新 更多