Pregunta

Quiero cargar un archivo de propiedades diferente basado en una variable.

Básicamente, si realiza una compilación de desarrollo, use este archivo de propiedades, si realiza una compilación de prueba, use este otro archivo de propiedades y, si realiza una compilación de producción, use un tercer archivo de propiedades.

¿Fue útil?

Solución

Paso 1:Defina una propiedad en su script NAnt para rastrear el entorno para el que está construyendo (local, prueba, producción, etc.).

<property name="environment" value="local" />

Paso 2:Si aún no tiene un objetivo de configuración o inicialización del que dependan todos los objetivos, cree un objetivo de configuración y asegúrese de que sus otros objetivos dependan de él.

<target name="config">
    <!-- configuration logic goes here -->
</target>

<target name="buildmyproject" depends="config">
    <!-- this target builds your project, but runs the config target first -->
</target>

Paso 3:Actualice su destino de configuración para obtener un archivo de propiedades apropiado según la propiedad del entorno.

<target name="config">
    <property name="configFile" value="${environment}.config.xml" />
    <if test="${file::exists(configFile)}">
        <echo message="Loading ${configFile}..." />
        <include buildfile="${configFile}" />
    </if>
    <if test="${not file::exists(configFile) and environment != 'local'}">
        <fail message="Configuration file '${configFile}' could not be found." />
    </if>
</target>

Tenga en cuenta que me gusta permitir que los miembros del equipo definan sus propios archivos local.config.xml que no se comprometan con el control de código fuente.Esto proporciona un buen lugar para almacenar cadenas de conexión locales u otras configuraciones del entorno local.

Etapa 4:Establezca la propiedad del entorno cuando invoque NAnt, por ejemplo:

  • nant -D:entorno=dev
  • nant -D:entorno=prueba
  • nant -D:entorno=producción

Otros consejos

Puedes usar el include tarea para incluir otro archivo de compilación (que contenga sus propiedades) dentro del archivo de compilación principal.El if atributo de la include La tarea puede probar con una variable para determinar si el archivo de compilación debe incluirse:

<include buildfile="devPropertyFile.build" if="${buildEnvironment == 'DEV'}"/>
<include buildfile="testPropertyFile.build" if="${buildEnvironment == 'TEST'}"/>
<include buildfile="prodPropertyFile.build" if="${buildEnvironment == 'PROD'}"/>

Tuve un problema similar que la respuesta de scott.caligan resolvió parcialmente; sin embargo, quería que las personas pudieran configurar el entorno y cargar el archivo de propiedades apropiado simplemente especificando un objetivo de esta manera:

  • desarrollador nant
  • prueba nantante
  • etapa nant

Puede hacer esto agregando un objetivo que establezca la variable de entorno.Por ejemplo:

<target name="dev">
  <property name="environment" value="dev"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="test">
  <property name="environment" value="test"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="stage">
  <property name="environment" value="stage"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="importProperties">
  <property name="propertiesFile" value="properties.${environment}.build"/>
  <if test="${file::exists(propertiesFile)}">
    <include buildfile="${propertiesFile}"/>
  </if>
  <if test="${not file::exists(propertiesFile)}">
    <fail message="Properties file ${propertiesFile} could not be found."/>
  </if>
</target>

La forma en que he hecho este tipo de cosas es incluir archivos de compilación separados según el tipo de compilación usando el tarea importante.Una posible alternativa podría ser utilizar el tarea iniread en nantcontrib.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top