【问题标题】:How to release a multimodule project with a classifier?如何发布带有分类器的多模块项目?
【发布时间】:2012-08-02 14:15:06
【问题描述】:

如果其中一个子模块有分类器,你如何发布一个 maven 多模块项目?

鉴于此用例:

  • 多模块项目:EAR、WAR、interface-jar、extension-AA-jar、extension-BB-jar、utility-jar
  • 所有 JAR 只能构建一次(或至少只部署一次到存储库,因为禁止部署具有相同版本的相同工件)
  • 必须为两种不同的设置构建 WAR,一次使用 extension-AA-jar,一次使用 extension-BB-jar
  • 只有单个 extension-XX-jar 使这两个版本有所不同
  • 我想通过分类器 (AA|BB) 区分存储库中的两个最终工件
  • 还应该有两个 EAR,只包含一个 WAR(也由同一分类器标识)
  • 我不想要两个 WAR/EAR 的额外项目,因为内容会 100% 相同。

所以目标是最后在存储库中包含以下内容(经过两次发布:准备,发布:执行):

  • EAR-1-AA.ear
  • EAR-1-BB.ear
  • WAR-1-AA.war
  • WAR-1-BB.war
  • interface-1.jar
  • extension-1-AA.jar
  • extension-1-BB.jar
  • utility-1.jar

关于如何进行发布构建有很多解释,也有如何使用分类器的示例 - 但分类器似乎从未在多模块设置中使用。

注意:第一个版本通常不会成为问题,因为尚未部署新版本的工件。但是为第二个分类器发布会破坏整个事情,因为 maven 会尝试使用相同的版本再次构建和部署 jars,并且存储库将(希望)不允许它。这对于 WAR 和 EAR 来说不是问题,因为会考虑分类器来唯一标识工件

或者分类器真的只适用于单模块项目吗?

【问题讨论】:

    标签: maven release maven-release-plugin


    【解决方案1】:

    这对于 Maven 来说非常棘手。 您可以在 maven 生命周期的 package 阶段尝试多次执行 maven-[jar/war/ear]-plugins。在每次执行中,您可以设置不同的分类器。

    此外,在执行 maven-war-plugin 时,您可以使用 <overlay> 将具有正确分类器的扩展名放入 WAR 文件中。在执行 maven-ear-plugin 时,您可以使用正确的分类器将 WAR 文件指定为 <webModule>

    示例

    在扩展模块中,你可以像这样配置maven-jar-plugin:

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <executions>
            <execution>
              <id>extension-AA</id>
              <phase>package</phase>
              <goals>jar</goals>
              <configuration>
                <classifier>AA</classifier>
              </configuration>
            </execution>
            <execution>
              <id>extension-BB</id>
              <phase>package</phase>
              <goals>jar</goals>
              <configuration>
                <classifier>BB</classifier>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
      ...
    </build>
    

    WAR模块的配置非常相似:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <executions>
        <execution>
          <id>extension-AA</id>
          <phase>package</phase>
          <goals>
            <goal>war</goal>
          </goals>
          <configuration>
            <overlays>
              <overlay>
                <groupId>com.example</groupId>
                <artifactId>extension-1</artifactId>
                <classifier>AA</classifier>
              </overlay>
            </overlays>
          </configuration>
        </execution>
        <execution>
          <id>extension-BB</id>
          <phase>package</phase>
          <goals>
            <goal>war</goal>
          </goals>
          <configuration>
            <overlays>
              <overlay>
                <groupId>com.example</groupId>
                <artifactId>extension-1</artifactId>
                <classifier>BB</classifier>
              </overlay>
            </overlays>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

    最后是EAR模块的配置:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-ear-plugin</artifactId>
      <executions>
        <execution>
          <id>extension-AA</id>
          <phase>package</phase>
          <goals>
            <goal>ear</goal>
          </goals>
          <configuration>
            <classifier>AA</classifier>
            <modules>
              <webModule>
                <groupId>com.example</groupId>
                <artifactId>war-1</artifactId>
                <classifier>AA</classifier>
              </webModule>
            </modules>
          </configuration>
        </execution>
        <execution>
          <id>extension-BB</id>
          <phase>package</phase>
          <goals>
            <goal>ear</goal>
          </goals>
          <configuration>
            <classifier>BB</classifier>
            <modules>
              <webModule>
                <groupId>com.example</groupId>
                <artifactId>war-1</artifactId>
                <classifier>BB</classifier>
              </webModule>
            </modules>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-14
      • 2018-06-19
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      相关资源
      最近更新 更多