2012-01-27 8 views
21

Como parte de una tarea de implementación en Gradle, deseo cambiar el valor de una propiedad en foo.properties para que apunte a una base de datos de producción en lugar de a una base de datos de desarrollo.¿Cómo puedo transformar un archivo .properties durante una compilación de Gradle?

Prefiero no reemplazar todo el archivo por completo, ya que es bastante grande y significa que tendríamos que mantener dos versiones separadas que solo difieren en una sola línea.

¿Cuál es la mejor manera de lograr esto?

Respuesta

28

Usted puede utilizar la tarea ant.propertyfile:

ant.propertyfile(
     file: "myfile.properties") { 
     entry(key: "propertyName", value: "propertyValue") 
     entry(key: "anotherProperty", operation: "del") 
    } 
3

Una solución simple es codificar una tarea que usa java.util.Properties para escribir el archivo. Si realmente desea actualizar incrementalmente el archivo, tendrá que implementarlo por su cuenta. O tal vez encuentre una tarea Ant que haga lo que quiera (todas las tareas Ant se pueden usar tal como están de Gradle). Para obtener mejores resultados, también debe declarar las entradas y salidas de la tarea, de modo que Gradle solo ejecute las tareas cuando se necesite cambiar el archivo de propiedades.

+0

También puede utilizar Apache Commons biblioteca de configuraciones que proporciona una API más conveniente (http://commons.apache.org/configuration/userguide/howto_filebased.html). Por supuesto, igual tendrá que implementar la mayor parte de la lógica usted mismo. – rodion

+0

Ant [tarea de PropertyFile] (http://ant.apache.org/manual/Tasks/propertyfile.html) hizo exactamente lo que necesitaba. –

1

Crear el inmueble objeto, luego cree el objeto de archivo con la ruta del archivo de propiedades específicas, cargue el archivo en el objeto de propiedades con carga, establezca la propiedad deseada con setProperty y guarde los cambios con store.

def var = new Properties() 
File myfile = file("foo.properties"); 

var.load(myfile.newDataInputStream()) 
var.setProperty("db", "prod") 
var.store(myfile.newWriter(), null) 
+4

Agregue un poco de documentación/explicación. –

Cuestiones relacionadas