Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read a properties files and use the values in project Gradle script?

I am working on a Gradle script where I need to read the local.properties file and use the values in the properties file in build.gradle. I am doing it in the below manner. I ran the below script and it is now throwing an error, but it is also not doing anything like creating, deleting, and copying the file. I tried to print the value of the variable and it is showing the correct value.

Can someone let me know if this is correct way to do this? I think the other way is to define everything in the gradle.properties and use it in the build.gradle. Can someone let me know how could I access the properties in build.gradle from build.properties?

build.gradle file:

apply plugin: 'java'  //-- set the group for publishing group = 'com.true.test'  /**  * Initializing GAVC settings  */ def buildProperties = new Properties() file("version.properties").withInputStream {         stream -> buildProperties.load(stream) } //if jenkins build, add the jenkins build version to the version. Else add snapshot version to the version. def env = System.getenv() if (env["BUILD_NUMBER"]) buildProperties.test+= ".${env["BUILD_NUMBER"]}" version = buildProperties.test println "${version}"  //name is set in the settings.gradle file group = "com.true.test" version = buildProperties.test println "Building ${project.group}:${project.name}:${project.version}"  Properties properties = new Properties() properties.load(project.file('build.properties').newDataInputStream()) def folderDir = properties.getProperty('build.dir') def configDir = properties.getProperty('config.dir') def baseDir  = properties.getProperty('base.dir') def logDir  = properties.getProperty('log.dir') def deployDir  = properties.getProperty('deploy.dir') def testsDir  = properties.getProperty('tests.dir') def packageDir  = properties.getProperty('package.dir') def wrapperDir  = properties.getProperty('wrapper.dir')   sourceCompatibility = 1.7 compileJava.options.encoding = 'UTF-8'  repositories {      maven { url "http://arti.oven.c:9000/release" }   }  task swipe(type: Delete) {          println "Delete $projectDir/${folderDir}"          delete "$projectDir/$folderDir"          delete "$projectDir/$logDir"          delete "$projectDir/$deployDir"          delete "$projectDir/$packageDir"          delete "$projectDir/$testsDir"          mkdir("$projectDir/${folderDir}")          mkdir("projectDir/${logDir}")          mkdir("projectDir/${deployDir}")          mkdir("projectDir/${packageDir}")          mkdir("projectDir/${testsDir}") } task prepConfigs(type: Copy, overwrite:true, dependsOn: swipe) {     println "The name of ${projectDir}/${folderDir} and ${projectDir}/${configDir}"     from('${projectDir}/${folderDir}')     into('${projectDir}/$configDir}')     include('*.xml') } 

build.properties file:

# ----------------------------------------------------------------- # General Settings # ----------------------------------------------------------------- application.name  = Admin project.name = Hello Cool  # ----------------------------------------------------------------- # ant build directories # ----------------------------------------------------------------- sandbox.dir = ${projectDir}/../.. reno.root.dir=${sandbox.dir}/Reno ant.dir = ${projectDir}/ant build.dir = ${ant.dir}/build log.dir  = ${ant.dir}/logs config.dir = ${ant.dir}/configs deploy.dir  = ${ant.dir}/deploy static.dir =  ${ant.dir}/static package.dir = ${ant.dir}/package tests.dir = ${ant.dir}/tests tests.logs.dir = ${tests.dir}/logs external.dir = ${sandbox.dir}/FlexCommon/External external.lib.dir = ${external.dir}/libs 
like image 830
unknown Avatar asked May 08 '16 15:05

unknown


People also ask

How do I pass project property in Gradle?

Using the -D command-line option, you can pass a system property to the JVM which runs Gradle. The -D option of the gradle command has the same effect as the -D option of the java command. You can also set system properties in gradle. properties files with the prefix systemProp.

What is the use of Gradle properties file?

The gradle. properties helps with keeping properties separate from the build script and should be explored as viable option. It's a good location for placing properties that control the build environment.


1 Answers

If using the default gradle.properties file, you can access the properties directly from within your build.gradle file:

gradle.properties:

applicationName=Admin projectName=Hello Cool 

build.gradle:

task printProps {     doFirst {         println applicationName         println projectName     } } 

If you need to access a custom file, or access properties which include . in them (as it appears you need to do), you can do the following in your build.gradle file:

def props = new Properties() file("build.properties").withInputStream { props.load(it) }  task printProps {     doFirst {         println props.getProperty("application.name")         println props.getProperty("project.name")     } } 

Take a look at this section of the Gradle documentation for more information.

Edit

If you'd like to dynamically set up some of these properties (as mentioned in a comment below), you can create a properties.gradle file (the name isn't important) and require it in your build.gradle script.

properties.gradle:

ext {     subPath = "some/sub/directory"     fullPath = "$projectDir/$subPath" } 

build.gradle

apply from: 'properties.gradle'  // prints the full expanded path println fullPath 
like image 61
blacktide Avatar answered Sep 24 '22 09:09

blacktide