2011-07-13 22 views
21

Necesito ayuda con el uso de los archivos de propiedad de Ant. Tengo el siguiente:Lectura del archivo .properties en Ant build.xml

  1. A build.properties de archivo. Este archivo contiene una información de : on=1

  2. Un archivo ant.xml. Este archivo contiene mis instrucciones de compilación.

quiero leer el atributo on de mi archivo de propiedades y si el valor es 1 quiero para ejecutar una tarea en mi fichero de construcción. De lo contrario, quiero que no haga nada. ¿Alguien puede guiarme sobre cómo lograr esto?

+0

¿Qué quiere decir, que quiere hacer algo? estoy asumiendo algo con ant.xml? – RMT

Respuesta

0

Un enfoque, que parece difícil, pero es, de hecho, bastante fácil: escribir una tarea personalizada hormiga (una clase simple de Java, < 20 líneas de código). La tarea será

  1. leer el archivo de propiedades (lugar/nombre se puede pasar como un atributo de la tarea)
  2. asignar el valor de on a una propiedad de la hormiga

A continuación, puede utilizar ese propiedad de hormiga para su control de flujo.

public class MyOwnTask extends Task { 

    private String filename = "build.properties"; // some default value 

    public void setFilename(String filename) { 
    this.filename = filename; 
    } 

    public void execute() { // the "main" method 
    Properties p = new Properties(); 
    p.load(filename); 
    String onValue = p.get("on"); 
    getProject().setProperty("ON_PROPERTY", onValue); 
    } 
} 

Entonces necesitas un poco de <taskdef> y listo.

+0

¿Por qué necesitarías hacer esto cuando puedes importar un archivo de propiedades en un script Ant? – Perception

+1

@Perception: ¿por qué no respondes de esta valiosa información? Las tareas de hormiga personalizadas son definitivamente más divertidas :) –

+0

Aún más divertido es escribir tu propio arnés de construcción para Ant, utilizando su API de Java. He enviado una respuesta, como humildemente solicité :-) – Perception

20

Esto debería ser todo lo que tiene que hacer:

1.Grab la versión más reciente de ant-contrib JAR y el lugar en lib carpeta de su instalación Ant.

2.Incluir sus propiedades en su escritura de la estructura

<property file="build.properties"/> 

3.Add la siguiente entrada taskdef a su escritura de la estructura

<taskdef resource="net/sf/antcontrib/antcontrib.properties"/> 

4.And, finalmente, definir una tarea, si como tal :

<if> 
<equals arg1="${on}" arg2="1" /> 
<then> 
    <echo message="I am going to do something here" /> 
</then> 
<else> 
    <echo message="I am going to do nothing" /> 
</else> 
</if> 

Tenga en cuenta que puede anteponer un identificador a las propiedades que importa desde la propiedad f iles. Así, por ejemplo, usted podría hacer su importación, así:

<property file="build.properties" prefix="uniqueprefix"/> 

Y entonces se haría referencia en su archivo, 'uniqueprefix.on', en lugar de 'encendido'.

<equals arg1="${uniqueprefix.on}" arg2="1" /> 

Usted puede utilizar el incorporado en la tarea de Ant condicional, pero tengo la sensación de que si la necesita usted está mejor con las funciones adicionales que ant-contrib trae a la mesa. Además, tenga en cuenta que su estándar para nombrar su archivo de compilación como 'build.xml', y no 'ant.xml'. Tal como está, Ant no podrá ubicarlo automáticamente, dado el nombre que ha utilizado. Buena suerte.

+0

+1 y la aceptaría, aunque - con esta solución debemos tener cuidado y elegir un espacio de nombres especial para esas propiedades externas - de lo contrario, podríamos sobrescribir las propiedades existentes accidentalmente. Solo imagínense que la propiedad 'on' se definió en' build.xml' también ... –

+1

@Andreas_D, de hecho es posible agregar un identificador único a todas las propiedades incluidas a través del archivo de propiedades. Actualizaré mi respuesta para incluir esta información. – Perception

3

Me parece que quiere implementar algo así como la tarea dada a continuación.

<property file="build.properties" /> 



<target name="default" description="Homeworks"> 
    <condition property="on"> 
     <equals arg1="{on}" arg2="1" /> 
    </condition> 
    <antcall target="taska" /> 
    <antcall target="taskb" /> 
</target> 

<target name="taska" if="on"> 
    <echo message="Testing task one" /> 
</target> 
<target name="taskb" unless="on"> 
    <echo message="Testing task two" /> 
</target> 

Avísame si quieres una explicación, en los detalles.

+0

thx mucho. Pero todavía tengo un problema. el valor "on" de las propiedades en general no se toma en consideración. si cambio "on" a "off" y llamo taskbb, pero si asigno a "on" cualquier número-taska siempre se ejecuta. – user842650

3

Si no desea escribir su propia hormiga de tareas o utilizar otras librerías, simplemente hormiga "limpia", echar un vistazo a éste:

mybuild.properties:

on=on 

Uso en o verdadero o algo así, 1 no funcionará.

build.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project name="project" default="default"> 
    <property file="mybuild.properties"/>  

    <target name="default" depends="on, off" description="description"> 
     <echo>default</echo> 
    </target> 

    <target name="on" if="${on}"> 
     <echo>on</echo> 
    </target> 

    <target name="off" unless="${on}"> 
     <echo>off</echo> 
    </target> 
</project> 
+0

gracias a todos :)) está funcionando. ¡Voy a seguir adelante con mi proyecto! : * – user842650

Cuestiones relacionadas