Pergunta

Quero carregar um arquivo de propriedades diferente com base em uma variável.

Basicamente, se estiver fazendo uma construção de desenvolvimento, use este arquivo de propriedades, se estiver fazendo uma construção de teste, use este outro arquivo de propriedades e, se estiver fazendo uma construção de produção, use ainda um terceiro arquivo de propriedades.

Foi útil?

Solução

Passo 1:Defina uma propriedade em seu script NAnt para rastrear o ambiente para o qual você está construindo (local, teste, produção, etc.).

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

Passo 2:Se você ainda não tiver um destino de configuração ou inicialização do qual todos os destinos dependam, crie um destino de configuração e certifique-se de que seus outros destinos dependam dele.

<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>

etapa 3:Atualize seu destino de configuração para obter um arquivo de propriedades apropriado com base na propriedade do ambiente.

<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>

Observe que gosto de permitir que os membros da equipe definam seus próprios arquivos local.config.xml que não são comprometidos com o controle de origem.Isso fornece um ótimo local para armazenar cadeias de conexão locais ou outras configurações de ambiente local.

Passo 4:Defina a propriedade do ambiente ao invocar o NAnt, por exemplo:

  • nant -D:ambiente=dev
  • nant -D:ambiente=teste
  • nant -D:ambiente=produção

Outras dicas

Você pode usar o include tarefa para incluir outro arquivo de construção (contendo suas propriedades) no arquivo de construção principal.O if atributo do include A tarefa pode testar uma variável para determinar se o arquivo de construção deve ser incluído:

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

Eu tive um problema semelhante que a resposta de scott.caligan resolveu parcialmente, mas queria que as pessoas pudessem definir o ambiente e carregar o arquivo de propriedades apropriado apenas especificando um destino como este:

  • nant dev
  • teste nant
  • estágio inicial

Você pode fazer isso adicionando um destino que defina a variável de ambiente.Por exemplo:

<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>

A maneira como fiz esse tipo de coisa foi incluir arquivos de compilação separados dependendo do tipo de compilação usando o tarefa importante.Uma alternativa possível seria usar o tarefa iniread em nantcontrib.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top