2012-09-07 10 views
9

W quiero que mi proyecto maven produzca tres artefactos con diferentes clasificadores a la vez. Sé que puedo producirlo con módulos, etc. Este es en realidad un proyecto de recursos que quiero producir para entornos DEV, STAGE y PROD.Crear artefactos múltiples con diferentes clasificadores a la vez

Lo que quiere tener es ejecutar una vez mvn:install y tienen my.group:resources:1.0:dev, my.group:resources:1.0:stage y my.group:resources:1.0:prod en mi repo.

+0

una víctima sino un * muy * situación similar: http://stackoverflow.com/questions/3866784/release-different-configurations-with-maven – chrisinmtown

Respuesta

11

Esto se puede hacer sin perfiles si especificas varias ejecuciones de complementos y resource filtering.

Cree un archivo de propiedades para cada versión en ${basedir}/src/main/filters (por ejemplo, prod.properties, dev.properties) con los valores adecuados para cada entorno.

active el filtro de sus recursos:

<resources> 
    <resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
    </resource> 
</resources> 

Ahora suma las ejecuciones de recursos de plugin. Tenga en cuenta los diferentes archivos de filtro y el directorio de salida.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>default-resources</id> 
     <phase>process-resources</phase> 
     <goals> 
     <goal>resources</goal> 
     </goals> 
     <configuration> 
     <outputDirectory>${project.build.outputDirectory}/dev</outputDirectory> 
     <filters> 
      <filter>${basedir}/src/main/filters/dev.properties</filter> 
     </filters> 
     </configuration> 
    </execution> 
    <execution> 
     <id>prod</id> 
     <phase>process-resources</phase> 
     <goals> 
     <goal>resources</goal> 
     </goals> 
     <configuration> 
     <outputDirectory>${project.build.outputDirectory}/prod</outputDirectory> 
     <filters> 
      <filter>${basedir}/src/main/filters/prod.properties</filter> 
     </filters> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Finalmente, el plugin jar; nota directorio clasificador y de entrada:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>default-jar</id> 
     <phase>package</phase> 
     <goals> 
     <goal>jar</goal> 
     </goals> 
     <configuration> 
     <classifier>dev</classifier> 
     <classesDirectory>${project.build.outputDirectory}/dev</classesDirectory> 
     </configuration> 
    </execution> 
    <execution> 
     <id>jar-prod</id> 
     <phase>package</phase> 
     <goals> 
     <goal>jar</goal> 
     </goals> 
     <configuration> 
     <classifier>prod</classifier> 
     <classesDirectory>${project.build.outputDirectory}/prod</classesDirectory> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Correr mvn clean install debe producir los recursos adecuadamente filtrados en artefactos con dev y prod clasificadores como usted desee.

En el ejemplo, utilicé ID de ejecución de default-resources y default-jar para las versiones de desarrollo. Sin esto, también obtendrás un artefacto de jar no clasificado cuando construyas.

+0

En los paquetes se incluyen ** * prod.properties * y ** dev.properties **, ¿cómo hago si quiero que ambos archivos jar tengan el mismo, digamos, ** config.properties? ** –

+0

@ChristianVielma, ¿está preguntando por incluir config.properties en su jar o usar config.properties como filtros para ambos jarrones? – user944849

+0

Quiero decir que si tengo un config-dev.properties y un config-prod.properties, ¿cómo hago para tener solo un config.properties en cada uno de los jar generados. ¿Me explico? –

3

Solo un FYI - ponga el número de versión allí para asegurarse de que tiene la versión que admite filtros personalizados. En maven 3 configuré el mío así, por ejemplo. Sin la versión, no funcionó.

No
Cuestiones relacionadas