Bonjour,

(Et oui c'est encore moi, mais j'ai beau chercher des heures sur le net et essayer des plans foireux ça ne donne rien...)

Par défaut, je dois utiliser une dépendance en version 1.0.0. Si un profile est actif, je ne dois plus utiliser cette dépendance. A la place, j'utilise une dépendance équivalente (Un classifier en plus, et une version différente).

Pour essayer d'être plus clair :
Code français : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
si ProfileActif(MonProfile) alors
  InclutDépendance("MaDépendance", "[1.0.0,)", "MonClassifier");
sinon
  InclutDépendance("MaDépendance", "1.0.0", "");
fsi;

Inclure une dépendance par défaut, ça va. Inclure une dépendance dans un profile, ça va aussi. Mais ne pas prendre en compte la dépendance incluse par défaut lorsque le profile est activé, c'est une autre histoire.

En effet, si je fais :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<dependencies>
  <dependency>
    <groupId>org.argh.urgh</groupId>
    <artifactId>MaDépendance</artifactId>
    <version>1.0.0</version>
  </dependency>
<dependencies>
<profiles>
  <profile>
    <id>MonProfile</id>
    <dependencies>
      <dependency>
        <groupId>org.argh.urgh</groupId>
        <artifactId>MaDépendance</artifactId>
        <version>[1.0.0,)</version>
        <classifier>MonClassifier</classifier>
      </dependency>
    <dependencies>
  </profile>
</profiles>

Si le profile est actif, je me retrouve avec les deux dépendances. J'obtiens le même résultat en encadrant les <dependencies> du profile avec des <dependenciesManagement>.

J'ai donc regardé du côté de :
  • optional : N'a d'influence que sur les projets utilisant le projet en question.
  • scope : Même avec "provided", la dépendance est utilisée à la compilation et ajoutée dans le classpath.
  • exclusions : Permet d'exclure uniquement les dépendances de la dépendance, pas la dépendance elle même.


A noter que si je redéfinis la dépendance dans le profile sans classifier, avec une version 1.0.1 par exemple, là 1.0.0 n'est bien plus prise en compte. Donc je peux quand même plus ou moins toucher à la dépendance dans mon profile.
Avec le code ci-dessus, MaDépendance n'est donc plus utilisée en 1.0.0 :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<dependencies>
  <dependency>
    <groupId>org.argh.urgh</groupId>
    <artifactId>MaDépendance</artifactId>
    <version>1.0.0</version>
  </dependency>
<dependencies>
<profiles>
  <profile>
    <id>MonProfile</id>
    <dependencies>
      <dependency>
        <groupId>org.argh.urgh</groupId>
        <artifactId>MaDépendance</artifactId>
        <version>1.0.1</version>
      </dependency>
    <dependencies>
  </profile>
</profiles>

Merci d'avance.

[edit]
Utiliser un profile activé par défaut pour les dépendances par défaut semble être une solution.
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<profiles>
  <profile>
    <id>MonProfile</id>
    <dependencies>
      <dependency>
        <groupId>org.argh.urgh</groupId>
        <artifactId>MaDépendance</artifactId>
        <version>[1.0.0,)</version>
        <classifier>MonClassifier</classifier>
      </dependency>
    <dependencies>
  </profile>
  <profile>
    <id>ProfileParDéfaut</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <dependencies>
      <dependency>
        <groupId>org.argh.urgh</groupId>
        <artifactId>MaDépendance</artifactId>
        <version>1.0.0</version>
      </dependency>
    <dependencies>
  </profile>
</profiles>