Tengo un proyecto de Maven y queremos construir dos frascos separados, uno que contenga bibliotecas de 32 bits y otro que contenga bibliotecas de 64 bits.

Nuestra compilación actual producirá artefactos de 32 o 64 bits según el sistema operativo en el que se ejecute la compilación.

Una descripción general de cómo estamos configurados actualmente:

    <properties>
            <env.arch>${sun.arch.data.model}</env.arch>
    </properties>

    <build>
    <pluginManagement>

    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                    <id>copy-native</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                    <artifactItems>
                    <artifactItem>
                        <groupId>artifact-for-${env.arch}</groupId>
                        <artifactId>artifact.name</artifactId>
                    </artifactItem>
                        ...

                   <plugin>
                       <artifactId>maven-jar-plugin</artifactId>
                       <executions>
                           <execution>
                               <phase>package</phase>
                           </execution>
                       </executions>

Entonces, lo que está haciendo es copiar las dependencias que coinciden con el valor de nuestra propiedad para ${env.arch}, luego construir el jar usando maven-jar-plugin.

Lo que tenemos que hacer es producir 2 jarras a partir de una compilación ... uno que contenga las dependencias de 32 bits y otro que contenga las dependencias de 64 bits.

¿Alguien puede ofrecer alguna orientación sobre cómo podemos hacer esto?

Gracias

1
Cuga 8 dic. 2011 a las 01:28

1 respuesta

La mejor respuesta

Esto se puede hacer especificando las dependencias en perfiles como en esta respuesta. Sin embargo, tendría que construir su proyecto dos veces para crear ambos artefactos. Probablemente también debería configurar el complemento jar por perfil para dar diferentes clasificadores a los artefactos.

También puede establecer una propiedad en los perfiles y usarla más adelante en la sección de dependencia en lugar de la variable de entorno.

También puede activar los perfiles basados ​​en la arquitectura del sistema actual, para tener un caso predeterminado de trabajo:

<profile>
    <activation>
        <os>
            <arch>x86</arch>
        </os>
    </activation>
    ...
</profile>

Todas las opciones de activación se describen en esta página.

2
Community 23 may. 2017 a las 15:27
Gracias. ¿Cómo puedo construir el programa 2x? invocando maven dos veces, como "mvn compile -Dprofile1" seguido de "mvn package -Dprofile2"?
 – 
Cuga
8 dic. 2011 a las 02:36
Sí, invocando mvn package dos veces con perfiles diferentes. Idealmente, esto lo haría un servidor de compilación.
 – 
Jörn Horstmann
8 dic. 2011 a las 02:50