I added a custom property in gradle.properties :
libraryVersion=0.1.0-beta
How do I read this in the code I'm publishing? I would like to use this value in my Kotlin library without hardcoding it.
CodePudding user response:
You may access system properties defined in gradle.properties. They should have systemProp. prefix. Then in gradle build file you should pass it inside the program.
Here is the example of console application that prints property defined in gradle.properties.
File gradle.properties:
systemProp.libraryVersion=0.1.0-beta
File Main.kt:
fun main(args: Array<String>) {
val libraryVersion = System.getProperty("libraryVersion") ?: ""
println(libraryVersion)
}
File 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"))
}
There are 2 variants passing system property to program:
- using "application" plugin-specific property
applicationDefaultJvmArgs - using
systemPropertymethod for specific task
The output of the program:
0.1.0-beta
Additional links:
- https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_system_properties
- https://docs.oracle.com/javase/tutorial/essential/environment/properties.html
- https://stackoverflow.com/a/61801906/16341604
CodePudding user response:
if you want to use a property from gradle you can do it like this
inside app/build.gradle
plugins {
id 'com.android.application'
id 'kotlin-android'
}
/******************/
def properties = new Properties()
try {
properties.load(new FileInputStream(rootProject.file("gradle.properties")))
} catch (Exception e) {
logger.warn("Properties not Found!")
}
/******************/
android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.test.myapplication"
minSdkVersion 21
targetSdkVersion 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
/********/
buildConfigField("String", "LIBRARY_VERSION", "\"" properties['libraryVersion'] "\"")
/*********/
}
}
And you can take this value from BuildConfig
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("TAG", BuildConfig.LIBRARY_VERSION)
}
}
