9

Avec le plugin maven jar, je crée deux fichiers jar: bar-1.0.0.jar et bar-1.0.0-client.jar.Modification de la dépendance maven pour un artefact à l'aide du classificateur

En fait, dans mon POM je la dépendance suivante:

<dependency> 
    <groupId>de.app.test</groupId> 
    <artifactId>foo</artifactId> 
    <version>1.0.0</version> 
</dependency> 

Cet artefact existe aussi en deux versions bar-1.0.0.jar et bar-client.jar-1.0.0

Je veux faire bar-1.0.0-client.jar dépend de foo-1.0.0-client.jar et bar-1.0.0.jar dépend de foo-1.0.0.jar.

================

-> Première solution (wrong): définir la portée et comme il est prévu d'utiliser le bon paquet foo lors de l'utilisation bar.jar

-> Deuxième solution (longue): Ajouter le classificateur 'server' à l'autre pot. Utilisez un profil différent pour créer l'artefact foo et placez le classificateur dans une propriété.

<dependency> 
    <groupId>de.app.test</groupId> 
    <artifactId>foo</artifactId> 
    <version>1.0.0</version> 
    <classifier>${profile.classifier}<classifier> 
</dependency> 

================
En ce qui concerne la solution de profil.

Module Interfaces pom

<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/maven-v4_0_0.xsd"> 
    <parent> 
     <groupId>com.app</groupId> 
     <artifactId>myapp-parent</artifactId> 
     <version>1.1.0</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.app</groupId> 
    <artifactId>myapp-interfaces</artifactId> 
    <version>1.1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <name>myapp Interfaces</name> 
    <profiles> 
     <profile> 
      <id>server</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      <build> 
       <plugins> 
        <plugin> 
         <artifactId>maven-jar-plugin</artifactId> 
         <executions> 
          <execution> 
           <id>jar-server</id> 
           <phase>package</phase> 
           <goals> 
            <goal>jar</goal> 
           </goals> 
           <configuration> 
            <classifier>server</classifier> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
     <profile> 
      <id>client</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      <build> 
       <plugins> 
        <plugin> 
         <artifactId>maven-jar-plugin</artifactId> 
         <executions> 
          <execution> 
           <id>jar-client</id> 
           <phase>package</phase> 
           <goals> 
            <goal>jar</goal> 
           </goals> 
           <configuration> 
            <classifier>client</classifier> 
            <excludes> 
             <exclude>**/server/**</exclude> 
            </excludes> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
</project> 

module de mise en œuvre pom

<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/maven-v4_0_0.xsd"> 
    <parent> 
     <groupId>com.app</groupId> 
     <artifactId>myapp-parent</artifactId> 
     <version>1.1.0-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.app</groupId> 
    <artifactId>myapp-model</artifactId> 
    <version>1.1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <name>myapp Model</name> 
    <properties> 
     <myapp-interfaces.classifier></myapp-interfaces.classifier> 
     <myapp-interfaces.version>1.1.0-SNAPSHOT</myapp-interfaces.version> 

    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>com.app</groupId> 
      <artifactId>myapp-interfaces</artifactId> 
      <version>${myapp-interfaces.version}</version> 
      <classifier>${myapp-interfaces.classifier}</classifier> 
     </dependency> 
     [...] 
    </dependencies> 
    <profiles> 
     <profile> 
      <id>server</id> 
      <build> 
       <plugins> 
        <plugin> 
         <artifactId>maven-jar-plugin</artifactId> 
         <executions> 
          <execution> 
           <id>jar-server</id> 
           <phase>package</phase> 
           <goals> 
            <goal>jar</goal> 
           </goals> 
           <configuration> 
            <classifier>server</classifier> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
      <dependencies> 
       <dependency> 
        <groupId>com.app</groupId> 
        <artifactId>myapp-interfaces</artifactId> 
        <version>${myapp-interfaces.version}</version> 
        <classifier>${myapp-interfaces.classifier}</classifier> 
       </dependency> 
      </dependencies> 
      <properties> 
       <myapp-interfaces.classifier>server</myapp-interfaces.classifier> 
      </properties> 
     </profile> 
     <profile> 
      <id>client</id> 
      <build> 
       <plugins> 
        <plugin> 
         <artifactId>maven-jar-plugin</artifactId> 
         <executions> 
          <execution> 
           <id>jar-client</id> 
           <phase>package</phase> 
           <goals> 
            <goal>jar</goal> 
           </goals> 
           <configuration> 
            <classifier>client</classifier> 
            <excludes> 
             <exclude>**/server/**</exclude> 
             <exclude>**/META-INF/services/**</exclude> 
            </excludes> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
      <properties> 
       <myapp-interfaces.classifier>client</myapp-interfaces.classifier> 
      </properties> 
      <dependencies> 
       <dependency> 
        <groupId>com.app</groupId> 
        <artifactId>myapp-interfaces</artifactId> 
        <version>${myapp-interfaces.version}</version> 
        <classifier>${myapp-interfaces.classifier}</classifier> 
       </dependency> 
      </dependencies> 
     </profile> 
    </profiles> 
</project> 

Le problème avec cette solution est due au fait que mon interface client ont des interfaces manquantes et Maven jeter une erreur de compilation lors de la phase de compilation.

Et si j'utilise myapp-model et un autre projet, je n'ai pas de dépendance à la bonne myapp-interface.

Je me demande s'il est possible de construire un pot et de mettre un pom spécifique à l'intérieur?

+1

La solution à long est correcte. Alors, quelle est la question? –

+0

En fait, cela n'a pas fonctionné. Parce que dans mon foo-server et foo-client je n'avais pas les interfaces sont supprimés. Quand je construis le projet, je suis confronté à une erreur de compilation. Je vais modifier ma question pour expliquer ce problème. – Vlagorce

+0

Une vieille question sur le même problème [1]: http: //www.mail-archive.com/[email protected]/msg102761.html – Vlagorce

Répondre

6

Pour les interfaces.

Je ne change rien et crée les deux interfaces.jar (client + serveur).

Pour le modèle j'importer tous les deux jarre en option

<dependency> 
     <groupId>com.app</groupId> 
     <artifactId>myapp-interfaces</artifactId> 
     <version>${myapp-interfaces.version}</version> 
     <classifier>client</classifier> 
     <optional>true</optional> 
    </dependency> 
    <dependency> 
     <groupId>com.app</groupId> 
     <artifactId>myapp-interfaces</artifactId> 
     <version>${myapp-interfaces.version}</version> 
     <classifier>server</classifier> 
     <optional>true</optional> 
    </dependency> 

Avec que je peux construire la version du modèle à la fois sans aucune erreur.

Dans mon application client et application serveur

Pour chaque application, je crée la dépendance à droite interfaces.jar et models.jar

+1

Je pense que vous avez mélangé les classificateurs - l'un devrait être 'client', l'autre' serveur'. – carlspring

Questions connexes