9

Con el complemento maven jar construyo dos jar: bar-1.0.0.jar y bar-1.0.0-client.jar.Cambiar la dependencia de maven para el artefacto usando el clasificador

En realidad, en mi POM tengo la siguiente dependencia:

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

Este artefacto existe también en versión de dos barras 1.0.0.jar y el bar-1.0.0-client.jar

Quiero hacer bar-1.0.0-client.jar dependiente de foo-1.0.0-client.jar y bar-1.0.0.jar dependiente de foo-1.0.0.jar.

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

-> Primera (mal) solución: definir el alcance de lo dispuesto y utilizar el paquete foo derecha al utilizar bar.jar

-> Segunda solución (larga): agregue el clasificador 'servidor' a la otra jarra. Use un perfil diferente para construir el artefacto foo y ponga el clasificador en una propiedad.

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

================
En cuanto a la solución de perfil.

interfaces de módulos 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> 

pom módulo Implementación

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

El problema de esta solución se debe al hecho de que mi interfaz de cliente tiene algunas interfaces que faltan y experta en lanzar un error de compilación durante la fase de compilación.

Y si utilizo myapp-model y otro proyecto, no tuve dependencia de la interfaz myapp correcta.

Me pregunto si es posible construir un frasco y poner un pomo específico adentro?

+1

La solución a largo es correcta. Entonces, ¿cuál es la pregunta? –

+0

De hecho, no funcionó. Porque en mi foo-server y foo-client no tenía las interfaces que se eliminan. Cuando construyo el proyecto me encuentro con un error de compilación. Editaré mi pregunta para explicar este problema. – Vlagorce

+0

Una vieja pregunta sobre el mismo problema [1]: http: //www.mail-archive.com/[email protected]/msg102761.html – Vlagorce

Respuesta

6

Para las interfaces.

No cambio nada y construyo las dos interfaces.jar (cliente + servidor).

Para el Modelo que importe el frasco tanto como opcionales

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

Con que puedo construir la versión del modelo tanto sin ningún error.

En mi aplicación cliente y servidor de aplicaciones

Para cada aplicación que crea la dependencia a la derecha y interfaces.jar models.jar

+1

Creo que has mezclado los clasificadores: uno debe ser 'cliente', el otro' 'servidor'. – carlspring

Cuestiones relacionadas