web-dev-qa-db-fra.com

Comment puis-je utiliser une valeur par défaut si une variable d'environnement n'est pas définie pour le filtrage des ressources dans maven?

J'utilise le filtrage des ressources pour remplacer certaines $ {values} dans un fichier de propriétés.

par exemple. le fichier contient PROPERTY = $ {VALUE}

Je veux que $ {VALUE} soit remplacé par la variable d'environnement $ VALUE qui fonctionne bien si $ VALUE est défini lors de l'exécution de la construction. Impressionnant.

Cependant, ces vars env ne sont définis que dans notre environnement de build officiel (par Jenkins) et non dans les builds de développeur, de sorte que les $ {values} sont laissés dans le fichier de propriétés après le filtrage, ce qui peut casser les choses. Je préfère ne pas exiger de vars env dans les environnements de développement car cela conduit toujours à des builds de développement fragiles et à des développeurs whiny.

Comment puis-je utiliser la valeur de la variable d'environnement si elle est définie et utiliser une autre valeur de propriété par défaut si la var env n'est pas définie?

D'après mes tests, cela fonctionne dans l'autre sens par défaut, en ce sens que les propriétés définies dans le pom remplaceront les variables d'environnement à des fins de filtrage des ressources.

Merci

40
John Russell

J'utilise le profil pour déterminer

<profiles>
  <profile>
    <activation>
      <activeByDefault>true</activeByDefault>
      <property>
        <name>!myproperty</name>
      </property>
    </activation>
    ...
    <properties>
       <myproperty>some value</myproperty>
    </properties>
  </profile>
  ...
</profiles>

Notez s'il vous plaît

  1. activeByDefault est défini sur true dans le but de l'activer par défaut.
  2. Le !myproperty signifie que cette propriété est manquante ou inexistante.
  3. Si le myproperty n'existe pas, utilisez simplement le myproperty défini au properties à la place.

Vous pouvez voir plus d'informations sur http://maven.Apache.org/guides/introduction/introduction-to-profiles.html

J'espère que cela peut aider à répondre à vos besoins.

Cordialement,

Charlee Ch.

44
Charlee Chitsuk

Avoir le même problème dans notre groupe de développement lors de l'utilisation d'une valeur d'environnement pour désigner un chemin d'accès au système de fichiers - en particulier la différence entre Linux et Windows.

Sur la base de l'autre solution sur la même question:

<profile>
    <id>MY_VAR default value</id>
    <activation>
        <property>
            <name>!env.MY_VAR</name>
        </property>
    </activation>
    <properties>
        <env.MY_VAR>default value</env.MY_VAR>
    </properties>
</profile>
5
AlikElzin-kilaka