dli*_*120 6 properties gradle kotlin gradle-kotlin-dsl
我在以下位置添加了一个自定义属性gradle.properties:
libraryVersion=0.1.0-beta
Run Code Online (Sandbox Code Playgroud)
如何在我发布的代码中阅读此内容?我想在我的 Kotlin 库中使用这个值,而不需要对其进行硬编码。
您可以访问 中定义的系统属性gradle.properties。他们应该有systemProp.前缀。然后在 gradle 构建文件中,您应该将其传递到程序内部。
这是打印 中定义的属性的控制台应用程序的示例gradle.properties。
文件gradle.properties:
systemProp.libraryVersion=0.1.0-beta
Run Code Online (Sandbox Code Playgroud)
文件Main.kt:
systemProp.libraryVersion=0.1.0-beta
Run Code Online (Sandbox Code Playgroud)
文件build.gradle.kts:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.5.10"
application
}
group = "me.yunir"
version = "0.1"
repositories {
mavenCentral()
}
dependencies {
testImplementation(kotlin("test"))
}
tasks.test {
useJUnitPlatform()
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "11"
}
application {
mainClass.set("MainKt")
// applicationDefaultJvmArgs = listOf( // 1
// "-DlibraryVersion=${System.getProperty("libraryVersion")}"
// )
}
tasks.named<JavaExec>("run") { // 2
systemProperty("libraryVersion", System.getProperty("libraryVersion"))
}
Run Code Online (Sandbox Code Playgroud)
将系统属性传递给程序有两种变体:
applicationDefaultJvmArgssystemProperty针对特定任务使用方法程序的输出:
0.1.0-beta
Run Code Online (Sandbox Code Playgroud)
附加链接:
UPD。1
或者,如果您不想使用前缀systemProp.并使用 gradle 项目属性,那么第二个变体将如下所示:
文件gradle.properties:
libraryVersion=0.1.0-beta
Run Code Online (Sandbox Code Playgroud)
文件build.gradle.kts:
...
tasks.named<JavaExec>("run") { // 2
systemProperty("libraryVersion", findProperty("libraryVersion") ?: "")
}
...
Run Code Online (Sandbox Code Playgroud)
经过一段时间的挖掘,我找到了我正在寻找的答案
这是解决方案:
构建.gradle.kts:
import java.io.FileOutputStream
import java.util.Properties
version = "1.0.0"
val generatedVersionDir = "$buildDir/generated-version"
sourceSets {
main {
kotlin {
output.dir(generatedVersionDir)
}
}
}
tasks.register("generateVersionProperties") {
doLast {
val propertiesFile = file("$generatedVersionDir/version.properties")
propertiesFile.parentFile.mkdirs()
val properties = Properties()
properties.setProperty("version", "$version")
val out = FileOutputStream(propertiesFile)
properties.store(out, null)
}
}
tasks.named("processResources") {
dependsOn("generateVersionProperties")
}
Run Code Online (Sandbox Code Playgroud)
库.kts:
private val versionProperties = Properties()
val version: String
get() {
return versionProperties.getProperty("version") ?: "unknown"
}
init {
val versionPropertiesFile = this.javaClass.getResourceAsStream("/version.properties")
versionProperties.load(versionPropertiesFile)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9442 次 |
| 最近记录: |