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.MILLISECONDUnits.SECONDUnits.MINUTEUnits.HOURUnits.DAYUnits.WEEKUnits.MONTHUnits.YEAR
The rules used when setting a property value are:
- If only
valueis specified, the property is set to it regardless of its previous value. - If only
defaultis specified and the property previously existed, it is unchanged. - If only
defaultis specified and the property did not exist, the property is set todefault. - If
valueanddefaultare both specified and the property previously existed, the property is set tovalue. - If
valueanddefaultare 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 updatePatchBy 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
jdkpropertiesparameter is not implemented. - The default
Types.DATEpattern isyyyy-MM-dd HH:mmand notyyyy/MM/dd HH:mm.