14

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

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

4

2 回答 2

15

如果您指定多个插件执行和资源过滤,则无需配置文件即可完成此操作。

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

为您的资源启用过滤:

<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应该在工件中生成正确过滤的资源,dev并带有prod您想要的分类器。

在示例中,我使用了 dev 版本的执行default-resourcesID default-jar。如果没有这个,您在构建时也会得到一个未分类的 jar 工件。

于 2012-09-07T15:45:28.950 回答
3

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

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    ...
</plugin>
于 2013-07-04T01:55:40.743 回答