gpt4 book ai didi

gradle - 我如何在项目中重用gradle定义

转载 作者:行者123 更新时间:2023-12-03 05:54:39 24 4
gpt4 key购买 nike

我正在研究一组项目,每个项目都使用Gradle作为构建工具。这不是多项目设置,尽管我希望能够在每个项目之间重用一些通用的Gradle脚本以确保项目相关时的一致性。

例如,对于Java组件,我希望生成的JAR文件中的 list 文件具有相同的信息。特别是,所有项目将具有相同的主要和次要版本号,而修补程序版本将特定于项目。

到目前为止,这是我尝试过的方法:
master.gradle-在项目之间共享

group 'com.example'

ext.majorVersion = 2
ext.minorVersion = 3
ext.patchVersion = 0; // Projects to override

def patchVersion() {
return patchVersion;
}

apply plugin: 'java'

jar {
manifest {
attributes 'Bundle-Vendor': 'Example Company',
'Bundle-Description': 'Project ABC',
'Implementation-Title': project.name,
'Implementation-Version': majorVersion + '.' + minorVersion + '.' + patchVersion()
}
}
build.gradle-用于项目之一
apply from: 'master.gradle'

patchVersion = 3

task hello {
println 'Version: ' + majorVersion + '.' + minorVersion + '.' + patchVersion
}

如果我从命令行运行 gradle hello jar,则可以从 Version: 2.3.3任务获取 hello。但是,JAR文件 list 包含的 2.3.0不是我想要的。如何将正确的补丁程序版本添加到 list 中?更一般地说,我如何让项目向主脚本提供信息?

最佳答案

基于@Oliver Charlesworth的建议,我提出了以下建议。我必须编写一个简单的插件来保存版本信息,并将其用作扩展对象。请注意(如gradle文件中的注释所建议),应用和设置项目的顺序非常重要。不同的顺序会导致在设置它们之前使用编译器错误或使用值。

如果有人想提出改进建议,请这样做。
master.gradle

group 'com.example'

// N.B. The individual project must have applied the semantic version
// plugin and set the patch version before applying this file.
// Otherwise the following will fail.
// Specify the major and minor version numbers.
project.semver.major = 2
project.semver.minor = 3
project.version = project.semver

apply plugin: 'java'

jar {
manifest {
attributes 'Bundle-Vendor': 'Example Company',
'Bundle-Description': project.description,
'Implementation-Title': project.name,
'Implementation-Version': project.semver
}
}
build.gradle
// Describe the project before importing the master gradle file
project.description = 'Content Upload Assistant'

// Specify the patch version
apply plugin: SemanticVersionPlugin
project.semver.patch = 3

// Load the master gradle file in the context of the project and the semantic version
apply from: 'master.gradle'

简单的插件可以在下面找到。目前,它与应用程序源代码一起使用,但应将它与主gradle文件一起移到库中。
buildSrc/src/main/groovy/SemanticVersionPlugin.groovy
import org.gradle.api.Plugin
import org.gradle.api.Project

class SemanticVersionPlugin implements Plugin<Project> {
void apply(Project project) {
project.extensions.create('semver', SemanticVersion)
}
}

class SemanticVersion {
int major
int minor
int patch

String toString() {
return major + '.' + minor + '.' + patch
}
}

关于gradle - 我如何在项目中重用gradle定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45669561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com