Maven java.version

21 views
Skip to first unread message

Henri Tremblay

unread,
May 3, 2021, 10:29:56 PM5/3/21
to lescastcodeurs
Bonjour à tous,

Comme il y a quelques amis de Maven dans cette liste je vais poser une question existentielle.

D'habitude, dans mes poms j'ai <java.version>11</java.version>.

Et j'ai mis un adorable profil qui s'active quand java.version est à 11.

<profile>
<id>java11</id>
<activation>
<property>
<name>java.version</name>
<value>11</value>
</property>
</activation>
...
</profile>
Sauf que le profil ne s'active pas.

Et quand je fais mvn help:evaluate -Dexpression=${java.version} ça me donne 11.0.9.1. Donc la version de Java que j'utilise. 

Kossé qui se passe? C'est devenu un variable built-in Maven?
Pourtant, quand on utilise cette variable comme target version du compiler plugin, ça marche très bien.

Merci pour vos lumières!
Henri

Olivier Lamy

unread,
May 4, 2021, 12:16:07 AM5/4/21
to lescast...@googlegroups.com
Bonjour,
L'activation via un profile par rapport à la version de Java, ce serait plutôt:

<profiles>
  <profile>
    <activation>
      <jdk>11</jdk>
    </activation>
    ...
  </profile>
</profiles>

Cela active un mode de comparaison différent qui tient justement en compte (ou plutôt élimine pour faire simple) les sous digits du numéro de version.
La comparaison par rapport à une sys props est stricte. 
Avec ta version et ton jdk ce serait 
<profile>
    <id>java11</id>
    <activation>
        <property>
            <name>java.version</name>
            <value>11.0.9.1</value>
        </property>
    </activation>
...
</profile>

HTH
Olivier


--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "lescastcodeurs".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse lescastcodeur...@googlegroups.com.
Cette discussion peut être lue sur le Web à l'adresse https://groups.google.com/d/msgid/lescastcodeurs/CADZL2%3DvsmZQoxFoLa3dVC75-P2ENWqN68faSxpyfs1wcN12MEg%40mail.gmail.com.


--

Henri Tremblay

unread,
May 4, 2021, 1:42:34 AM5/4/21
to lescastcodeurs
Non. Ça c'est différent. Par exemple, je compile plein de trucs en Java 11 mais avec une target = 1.8. Donc l'activation par JDK ne marche pas. Je veux vraiment l'activation à partir de ma variable.

Par contre, je pensais que c'était java.version mon problème. C'est quand même étrange que la valeur change.
Mais là je viens de tenter avec jdk.version. Même chose. Ça marche pas.
Donc là j'ai l'impression que l'activation par propriété ne marche juste pas. Même avec -Djdk.version=11 ça ne marche pas

Olivier Lamy

unread,
May 4, 2021, 1:51:01 AM5/4/21
to lescast...@googlegroups.com
tu peux utiliser un jdk11 et faire javac avec un target 1.8 cela n'est pas un souci.
Mais je croyais que tu avais un souci sur l'activation du profile?

partage le pom car franchement j'utilise souvent 
<profiles>
  <profile>
    <activation>
      <jdk>11</jdk>
    </activation>
    ...
  </profile>
</profiles>

et j'ai comme l'impression que pour activer le profile pour java 11 que cela fonctionne plutôt bien :) 
ou alors pas compris ton problème?

Henri Tremblay

unread,
May 4, 2021, 1:24:35 PM5/4/21
to lescastcodeurs
Tu n'as pas compris mon problème :-)

Mais en bref, je vais simplifier mon problème, car j'ai fait quelques petites expériences en plus. 
Je veux activer un profil avec une propriété et ça ne marche pas.

Exemple:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>pro.tremblay</groupId>
  <artifactId>myversion</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <jdk.version>11</jdk.version>
    <docker.from>app8</docker.from>
  </properties>

  <profiles>

    <profile>
      <id>java11</id>
      <activation>
        <property>
            <name>jdk.version</name>

            <value>11</value>
        </property>
      </activation>
      <properties>
        <docker.from>app11</docker.from>
      </properties>
    </profile>
  </profiles>
</project>

Si tu fais mvn help:evaluate -Dexpression=\${docker.from} il va sortir app8 et non app11.



Gabriel Landais

unread,
May 4, 2021, 2:04:01 PM5/4/21
to lescast...@googlegroups.com
Les profils ne s’activent que sur les propriétés système et non sur celles du pom 😞

Bertrand Delacretaz

unread,
May 4, 2021, 2:10:58 PM5/4/21
to lescast...@googlegroups.com
On Tue, May 4, 2021 at 8:04 PM Gabriel Landais
<gabriel...@gmail.com> wrote:
>
> Les profils ne s’activent que sur les propriétés système et non sur celles du pom

Ou aussi à partir d'un fichier présent ou absent, selon
http://maven.apache.org/guides/introduction/introduction-to-profiles.html
("<missing>"). Ça peut peut-être servir de workaround.

-Bertrand

Henri Tremblay

unread,
May 4, 2021, 5:47:51 PM5/4/21
to lescastcodeurs
Ah voilà le mystère. Merci!

Étonnant que je n'ai jamais su ça.
Et j'avais le souvenir d'une note qui expliquait que ça ne marche pas à cause de la résolution des placeholders qui devient impossible.
Mais je ne l'ai pas retrouvé.
Bilan, c'est impossible d'avoir un pom parent qui selon les besoins active un profil et donc une série de variables.
C'est triste j'avoue.

Reply all
Reply to author
Forward
0 new messages