Java Maven轮廓与Gradle等值

Java Maven轮廓与Gradle等值,java,gradle,spring-boot,build.gradle,spring-boot-gradle-plugin,Java,Gradle,Spring Boot,Build.gradle,Spring Boot Gradle Plugin,我试图在我的spring boot项目构建中实现一个简单的场景:根据环境包括/排除依赖项和打包war或jar 例如,对于环境dev包括devtools和packagejar,对于prodpackagewar等等 我知道它不再是基于XML的配置,我基本上可以在build.gradle中编写if语句,但有没有推荐的方法来实现这一点 我可以声明一些常见的依赖项并在单个文件中引用它们,而不是创建多个构建文件吗 是否有基于生成目标环境更改生成配置的最佳实践?我的版本(灵感来自: ext { dev

我试图在我的spring boot项目构建中实现一个简单的场景:根据环境包括/排除依赖项和打包war或jar

例如,对于环境
dev
包括devtools和packagejar,对于
prod
packagewar等等

我知道它不再是基于XML的配置,我基本上可以在build.gradle中编写if语句,但有没有推荐的方法来实现这一点

我可以声明一些常见的依赖项并在单个文件中引用它们,而不是创建多个构建文件吗

是否有基于生成目标环境更改生成配置的最佳实践?

我的版本(灵感来自:

ext {
    devDependencies = ['org.foo:dep1:1.0', 'org.foo:dep2:1.0']
    prodDependencies = ['org.foo:dep3:1.0', 'org.foo:dep4:1.0']
    isProd = System.properties['env'] == 'prod'
    isDev = System.properties['env'] == 'dev'
}

apply plugin: 'java'

dependencies {
    compile 'org.foo:common:1.0'
    if (isProd) {
       compile prodDependencies
    }
    if (isDev) {
       compile devDependencies
    }
}

if (isDev) tasks.withType(War).all { it.enabled = false }

有时,通过在文件
settings.gradle
中添加一些代码行,在不同的构建文件之间完全切换也很有用。此解决方案读取环境变量
BUILD\u PROFILE
,并将其插入
buildFileName

# File: settings.gradle
println "> Processing settings.gradle"
def buildProfile = System.getenv("BUILD_PROFILE")
if(buildProfile != null) {
    println "> Build profile: $buildProfile"
    rootProject.buildFileName = "build-${buildProfile}.gradle"
}
println "> Build file: $rootProject.buildFileName"
然后像这样运行gradle,例如使用
build local.gradle

$ BUILD_PROFILE="local" gradle compileJava
> Processing settings.gradle
> Build profile: local
> Build file: build-local.gradle

BUILD SUCCESSFUL in 3s
这种方法也适用于CI/CD管道,在这些管道中,您可能希望添加额外的任务,如检查质量门或其他不希望在本地执行的耗时的任务

$ BUILD_PROFILE="local" gradle compileJava
> Processing settings.gradle
> Build profile: local
> Build file: build-local.gradle

BUILD SUCCESSFUL in 3s