## Project properties

Project properties are available on the Project object. They can be set from the command line using the `-P` / `--project-prop` environment option.

The following examples demonstrate how to set project properties in different ways.

Example 1: Setting a project property via the command line:

    $ gradle -PgradlePropertiesProp=commandLineValue

Gradle can also set project properties when it sees specially-named system properties or environment variables. If the environment variable name looks like `ORG_GRADLE_PROJECT_prop=somevalue`, then Gradle will set a `prop` property on your project object, with the value of `somevalue`. Gradle also supports this for system properties, but with a different naming pattern, which looks like `org.gradle.project.prop`. Both of the following will set the `foo` property on your Project object to `"bar"`.

Example 2: Setting a project property via a system property:

    org.gradle.project.foo=bar

Example 3: Setting a project property via an environment variable:

    ORG_GRADLE_PROJECT_foo=bar

This feature is useful when you don’t have admin rights to a continuous integration server and you need to set property values that should not be easily visible. Since you cannot use the `-P` option in that scenario nor change the system-level configuration files, the correct strategy is to change the configuration of your continuous integration build job, adding an environment variable setting that matches an expected pattern. This won’t be visible to normal users on the system.

The following examples demonstrate how to use project properties.

Example 1: Reading project properties at configuration time:

build.gradle.kts

    // Querying the presence of a project property
    if (hasProperty("myProjectProp")) {
        // Accessing the value, throws if not present
        println(property("myProjectProp"))
    }

    // Accessing the value of a project property, null if absent
    println(findProperty("myProjectProp"))

    // Accessing the Map<String, Any?> of project properties
    println(properties["myProjectProp"])

    // Using Kotlin delegated properties on `project`
    val myProjectProp: String by project
    println(myProjectProp)

build.gradle

    // Querying the presence of a project property
    if (hasProperty('myProjectProp')) {
        // Accessing the value, throws if not present
        println property('myProjectProp')
    }

    // Accessing the value of a project property, null if absent
    println findProperty('myProjectProp')

    // Accessing the Map<String, ?> of project properties
    println properties['myProjectProp']

    // Using Groovy dynamic names, throws if not present
    println myProjectProp

The Kotlin delegated properties are part of the Gradle Kotlin DSL. You need to explicitly specify the type as `String`. If you need to branch depending on the presence of the property, you can also use `String?` and check for `null`.

Note that if a Project property has a dot in its name, using the dynamic Groovy names is not possible. You have to use the API or the dynamic array notation instead.

Example 2: Reading project properties for consumption at execution time:

build.gradle.kts

    tasks.register<PrintValue>("printValue") {
        // Eagerly accessing the value of a project property, set as a task input
        inputValue = project.property("myProjectProp").toString()
    }

build.gradle

    tasks.register('printValue', PrintValue) {
        // Eagerly accessing the value of a project property, set as a task input
        inputValue = project.property('myProjectProp')
    }

| If a project property is referenced but does not exist, an exception will be thrown, and the build will fail. You should check for the existence of optional project properties before you access them using the Project.hasProperty(java.lang.String) method.