2009-12-03 16 views
5

Tengo varias ubicaciones de archivos/ejecutables que probablemente sean diferentes dependiendo de la computadora en la que las estoy ejecutando, y me gustaría abstraerlas de alguna manera a través de las propiedades de las hormigas. ¿Cuál es la mejor manera de hacer esto? ¿Hay un script de instalación de ant en todo el sistema que se llame? ¿O puedo hacer un script así?hormiga: ¿la mejor manera de configurar las propiedades dependientes del sistema?

Respuesta

1

Configura un archivo de construcción ant llamado properties.xml, en el que debe definir las propiedades que desea personalizar.

aquí es repetitivo properties.xml estoy usando para mis proyectos (He adaptado desde uno de los libros sobre Ant):

<?xml version="1.0" encoding="UTF-8"?> 
<project 
    name="workspace-properties" 
> 
    <dirname 
    property="workspace-properties.basedir" 
    file="${ant.file.workspace-properties}" 
    /> 

    <!-- 
    ========================================================== 
    Load Environment Variables 
    ========================================================== 
    --> 
    <!-- #Load environment variables --> 
    <property environment="env" /> 

    <!-- this is here to deal with the fact that an IntelliJ IDEA build 
    has no ant home 
    --> 
    <property 
    name="ant.home" 
    value="${env.ANT_HOME}" 
    /> 

    <!-- get Unix hostname, and set to Windows comparable name --> 
    <!-- #Trick to get host name x-platform --> 
    <property 
    name="env.COMPUTERNAME" 
    value="${env.HOSTNAME}" 
    /> 

    <!-- 
    ========================================================== 
    Load property files 
    Note: the ordering is VERY important. 
    ========================================================== 
    --> 
    <!-- #Allow even users property file to relocate --> 
    <property 
    name="user.properties.file" 
    location="${user.home}/.build.properties" 
    /> 

    <!-- Load the application specific settings --> 
    <!-- #Project specific props --> 
    <property file="build.properties" /> 

    <!-- 
    ========================================================== 
    Define your custom properties here. 
    You can overwrite them through build.properties and 
    ${user.home}/.build.properties 
    ========================================================== 
    --> 

    <property name="myexec1" location="/usr/bin/myexec1"/> 
    <property name="myexec2" location="/usr/bin/myexec2"/> 

</project> 

Lo importante aquí es para llegar a la mayor cantidad predeterminada útil los valores de las propiedades como sea posible, entonces ni siquiera se pueden encontrar archivos personalizados build.properties.

Entonces solo <import> este archivo en el build.xml de su proyecto.

<project 
    name="my-project" 
> 
    <!-- this is done, so you may import my-project somewhere else --> 
    <dirname 
    property="my-project.basedir" 
    file="${ant.file.my-project}" 
    /> 

    <import file="${my-project.basedir}/relative/path/to/properties.xml"/> 

    <target name="using.myexec1"> 
    <echo message="myexec1=${myexec1}"/> 
    </target> 
</project> 

Si desea un valor personalizado para myexec1 en my-project, simplemente soltar un archivo build.properties encargo plana en el mismo directorio donde se encuentra build.xml.

El archivo build.properties puede tener este aspecto:

myexec1=c:/custom/path/to/myexec1.exe 
+0

Aquí es una solución de trabajo para su 'nombre de host problema plataforma de x, basta con utilizar: funcionará en Linux y Windows – Rebse

8

yo uso el más o menos estándar build.properties y build-local.properties archivos.

El primero contiene valores predeterminados, comunes a todos los entornos, el segundo solo las excepciones. El primero se marca en subversión mientras que el otro no.

EDITAR: excelente idea de copiar/pegar de Akr

Además es posible que tenga un archivo de propiedades predeterminadas para cada uno del sistema operativo o de otro tipo que puedan desplegar su sistema de construcción en. Estos archivos también se pueden registrar en su sistema de control de versiones.

El script Ant incluiría entonces todos los archivos de la siguiente manera (recuerde: en Ant la primera definición gana):

<property file="build-local.properties"/> 
<property file="build.properties"/> 
<property file="build-${os.name}.properties"> 
+0

¿por qué construir-locales ¿primero? –

+0

@KalpeshSoni Porque con esto puede anular todas las propiedades en el archivo local (ya que es el primero que se carga). Lo que creo que está mal es el archivo dependiente del sistema operativo, ya que debe anular el archivo predeterminado, por lo que debe aparecer en segundo lugar. – PhoneixS

10

Además de la solución de Vladimir es posible que tenga un archivo de propiedades predeterminadas para cada uno del sistema operativo u otro puede implementar su sistema de compilación. Use $ {os.name} (y otras propiedades del sistema Java) para configurar una ruta. Por ejemplo

<property file="build-${os.name}.properties"> 

Estos archivos también se pueden mantener y registrar en su sistema de control de versiones.

+0

+1 buena idea. He tenido algunos problemas con 'file: ///' y 'file: //' en diferentes sistemas y su propuesta manejaría muy bien este caso. – Vladimir

Cuestiones relacionadas