Gradle:像Maven Parent POM这样的东西

时间:2018-04-05 03:09:12

标签: gradle parent-pom

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

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

如果有人能解释如何做到这一点会很棒。

2 个答案:

答案 0 :(得分: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的外部依赖是好的,那么你可以这样做

答案 1 :(得分:0)

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

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

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

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