PropertyFile plug-in for Kobalt
The PropertyFile plug-in provides an optional task for editing property files. It is inspired by the ant PropertyFile task.
import net.thauvin.erik.kobalt.plugin.propertyfile.*
val bs = buildScript {
plugins("net.thauvin.erik:kobalt-property-file:0.9.1")
}
val p = project {
name = "example"
propertyFile {
file = "version.properties"
comment = "##Generated file - do not modify!"
entry(key = "product.build.major", value = "3")
entry(key = "product.build.minor", type = Types.INT, operation = Operations.ADD)
entry(key = "product.build.patch", value = "0")
entry(key = "product.build.date" , type = Types.DATE, value = "now")
}
}
To invoke the propertyFile
task:
./kobaltw propertyFile
Attribute | Description | Required |
---|---|---|
file |
The location of the property files to edit. | Yes |
comment |
Comment to be inserted at the top of the property file. | No |
failOnWarning |
If set to true , the task will fail on any warnings. |
No |
The entry
function is used to specify edits to be made to the property file.
Attribute | Description |
---|---|
key |
The name of the property name/value pair. |
value |
The value of the property. |
default |
The initial value to set for the property if not already defined. For Type.DATE , the now keyword can be used. |
type |
Tread the value as Types.INT , Types.DATE , or Types.STRING . If none specified, Types.STRING is assumed. |
operation |
See operations. |
pattern |
For Types.INT and Types.DATE only. If present, will parse the value as DecimalFormat or SimpleDateFormat patterns, respectively. |
unit |
The unit value to be applied to Operations.ADD and Operations.SUBTRACT for Types.DATE . See Units. |
key
is required. value
or default
are required unless the operation
is Operations.DELETE
.
The following operations are available:
Operation | Description |
---|---|
Operations.ADD |
Adds a value to an entry. |
Operations.DELETE |
Deletes an entry. |
Operations.SET |
Sets the entry value. This is the default operation. |
Operations.SUBTRACT |
Subtracts a value from the entry. For Types.INT and Types.DATE only. |
The following units are available for Types.DATE
with Operations.ADD
and Operations.SUBTRACT
:
Units.MILLISECOND
Units.SECOND
Units.MINUTE
Units.HOUR
Units.DAY
Units.WEEK
Units.MONTH
Units.YEAR
The rules used when setting a property value are:
- If only
value
is specified, the property is set to it regardless of its previous value. - If only
default
is specified and the property previously existed, it is unchanged. - If only
default
is specified and the property did not exist, the property is set todefault
. - If
value
anddefault
are both specified and the property previously existed, the property is set tovalue
. - If
value
anddefault
are both specified and the property did not exist, the property is set todefault
.
Operations occur after the rules are evaluated.
Additionally, you can specify a task name to easily identify multiple propertyFile
tasks.
propertyFile {
taskName = "updateMinor"
file = "version.properties"
entry(key = "product.build.minor", type = Types.INT, operation = Operations.ADD)
}
propertyFile {
taskName = "updatePatch"
file = "version.properties"
entry(key = "product.build.patch", type = Types.INT, operation = Operations.ADD)
}
./kobaltw updateMinor
./kobaltw updatePatch
By default the propertyFile
task has no dependencies, use the dependsOn
parameter to change the dependencies:
propertyFile {
dependsOn = listOf("assemble", "run")
file = "version.properties"
entry(key = "product.build.date" , type = Types.DATE, value = "now")
}
Differences with the ant PropertyFile task
- The comments and layout of the original property file will not be preserved.
- The
jdkproperties
parameter is not implemented. - The default
Types.DATE
pattern isyyyy-MM-dd HH:mm
and notyyyy/MM/dd HH:mm
.