2012-09-07 15 views
9

W希望我的maven项目能够一次生成具有不同分类器的三个工件。我知道我可以用模块生产它。这实际上是一个资源项目,我想为DEV,STAGE和PROD环境生成配置。立即用不同的分类器构建多个工件

我想要的是运行mvn:install一次,并在我的回购中有my.group:resources:1.0:dev,my.group:resources:1.0:stagemy.group:resources:1.0:prod

+0

不是欺骗而是一个非常* *类似的情况:http://stackoverflow.com/questions/3866784/release-different-configurations-with-maven – chrisinmtown

回答

11

如果您指定多个插件执行和resource filtering,则可以在没有配置文件的情况下完成此操作。

${basedir}/src/main/filters(例如prod.properties,dev.properties)中的每个版本创建一个属性文件,该文件为每个环境保留适当的值。

打开过滤你的资源:

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

现在添加资源插件执行。请注意不同的过滤器文件和输出目录。

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

最后,jar插件;注意分类和输入目录:

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

运行mvn clean install应该devprod分类产生适当过滤资源工件,如你想要的。

在这个例子中,我为开发版本使用了default-resourcesdefault-jar的执行ID。没有这个,你在构建时也会得到一个未分类的jar工件。

+0

在包包含** prod.properties * *和** dev.properties **,如果我希望两个jar文件具有相同的属性,比如** config.properties ** ** –

+0

@ChristianVielma,我该怎么办?您是否在询问在您的包含config.properties罐子或使用config.properties作为两个罐子的过滤器? – user944849

+0

我的意思是如果我有一个config-dev.properties和一个config-prod.properties,我该怎么做才能在每个生成的jar中只有一个config.properties。我能解释一下自己吗? –

3

仅供参考 - 将版本号放在那里以确保您的版本支持自定义过滤器。在maven 3中,我例如像这样设置了我的。没有版本,它不起作用。