在 gradle 中动态设置存储库和 version/revison
Set repositories and version/revison dynamically in gradle
我有一个 gradle 构建脚本。在这个脚本中我设置了一些发布。
稍后在脚本中我有一个任务,它从文件中读取内部版本号并增加它。比项目的版本将被更改。
现在我的问题是:是否可以在初始化 "Publishing"-PlugIn 后更改 revision/version?如果我不设置新版本,"Publishing"-PlugIn 将抛出 n 个错误。如果我通过编辑描述符来更改版本,插件说,不允许直接编辑描述符。
我还想根据内部版本号更改存储库-url。
有没有人知道解决办法或有同样的问题?
publishing {
publications {
ivy(IvyPublication) {
organisation project.group
module project.name
revision project.version
descriptor.status = 'milestone'
from components.java
artifact(sourceJar) {
type "source"
conf "runtime"
}
}
maven(MavenPublication) {
groupId project.group
artifactId project.name
version project.version
from components.java
}
}
repositories {
ivy {
// change to point to your repo, e.g. http://my.org/repo
url "P:/Java/Repo/ivy"
}
maven {
// change to point to your repo, e.g. http://my.org/repo
url "P:/Java/Repo/maven"
}
}
}
这是我用于增加内部版本号的脚本
def incVersion(project) {
project.versionInced = true
def versionPropsFile = file("${project.rootDir}/version.properties")
if (!versionPropsFile.canRead()) {
versionPropsFile.createNewFile();
}
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
if(versionProps['build_version'] == null)
{
versionProps['build_version'] = 0;
}
def code = versionProps['build_version'].toInteger()+1;
versionProps['build_version']=code.toString()
versionProps.store(versionPropsFile.newWriter(), null)
project.projectInfos.version = project.version + "." + code.toString()
project.version = project.projectInfos.version
println "Version: "+project.version
return project.version
}
如果我理解得很好,是的,可以动态完成。您可以在 运行 gradle 时通过项目 属性 (-P
) 或通过系统 属性 (-D
).
它将是:
gradle <some_task> -PsomeVersion=<version>
您需要更改 gradle 脚本以读取 属性,因此:
publishing {
publications {
ivy(IvyPublication) {
revision project.hasProperty('someVersion') ? project.someVersion : '<HERE YOU NEED TO PUT DEFAULT VERSION OR MAYBE THROW EXCEPTION IF EMPTY>'
//...
}
}
}
如果您不检查项目是否有 属性(在项目实例上使用 hasProperty
方法),将抛出 MissingPropertyException
。
我有一个 gradle 构建脚本。在这个脚本中我设置了一些发布。
稍后在脚本中我有一个任务,它从文件中读取内部版本号并增加它。比项目的版本将被更改。
现在我的问题是:是否可以在初始化 "Publishing"-PlugIn 后更改 revision/version?如果我不设置新版本,"Publishing"-PlugIn 将抛出 n 个错误。如果我通过编辑描述符来更改版本,插件说,不允许直接编辑描述符。
我还想根据内部版本号更改存储库-url。
有没有人知道解决办法或有同样的问题?
publishing {
publications {
ivy(IvyPublication) {
organisation project.group
module project.name
revision project.version
descriptor.status = 'milestone'
from components.java
artifact(sourceJar) {
type "source"
conf "runtime"
}
}
maven(MavenPublication) {
groupId project.group
artifactId project.name
version project.version
from components.java
}
}
repositories {
ivy {
// change to point to your repo, e.g. http://my.org/repo
url "P:/Java/Repo/ivy"
}
maven {
// change to point to your repo, e.g. http://my.org/repo
url "P:/Java/Repo/maven"
}
}
}
这是我用于增加内部版本号的脚本
def incVersion(project) {
project.versionInced = true
def versionPropsFile = file("${project.rootDir}/version.properties")
if (!versionPropsFile.canRead()) {
versionPropsFile.createNewFile();
}
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
if(versionProps['build_version'] == null)
{
versionProps['build_version'] = 0;
}
def code = versionProps['build_version'].toInteger()+1;
versionProps['build_version']=code.toString()
versionProps.store(versionPropsFile.newWriter(), null)
project.projectInfos.version = project.version + "." + code.toString()
project.version = project.projectInfos.version
println "Version: "+project.version
return project.version
}
如果我理解得很好,是的,可以动态完成。您可以在 运行 gradle 时通过项目 属性 (-P
) 或通过系统 属性 (-D
).
它将是:
gradle <some_task> -PsomeVersion=<version>
您需要更改 gradle 脚本以读取 属性,因此:
publishing {
publications {
ivy(IvyPublication) {
revision project.hasProperty('someVersion') ? project.someVersion : '<HERE YOU NEED TO PUT DEFAULT VERSION OR MAYBE THROW EXCEPTION IF EMPTY>'
//...
}
}
}
如果您不检查项目是否有 属性(在项目实例上使用 hasProperty
方法),将抛出 MissingPropertyException
。