【问题标题】:Parent and child pom with maven shade plugin带有maven shade插件的父子pom
【发布时间】:2021-12-13 04:11:06
【问题描述】:

我有一个带有 pom 的父 maven 项目和两个带有 jar 模式包装的 pom 的子项目。这两个子 pom 都有一个启动类。 问题是每次创建新的子项目时,都需要一个带有jar包装的新pom。 研究目标是创建一个jar打包模式的父pom,去掉MyChildLauncherCLass声明,规范每个子pom的版本。

孩子 1 个绒球

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>myChildGroupId</groupId>
        <artifactId>myChildartifactId</artifactId>
        <version>myChildVersion</version>
    </parent>

    <artifactId>myChildArtifactId</artifactId>
    <packaging>jar</packaging>
    <name>${project.artifactId}</name>

    <build>
        <sourceDirectory>../../webapp/src/main/java</sourceDirectory>
        <resources>
            <resource>
                <directory>../../webapp/src/main/resources</directory>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Main-Class>MyChildLauncherCLass</Main-Class>
                                        <Child1Version>${project.version}</Child1Version>
                                    </manifestEntries>
                                </transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.handlers</resource>
                                </transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.schemas</resource>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>

    </build>

</project> 

父pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>myParentgroupId</groupId>
        <artifactId>myParentArtifactId1</artifactId>
        <version>myParentVersion</version>
    </parent>

    <artifactId>myParentArtifactId2</artifactId>
    <packaging>jar</packaging>
    <name>${project.artifactId}</name>

    <dependencies>
        ... dependencies...
    </dependencies>


    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <finalName>${project.artifactId}</finalName>
                  <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <manifestEntries>
                        <Child1Version>${project.version}</Child1Version> <!-- How to do this generic for any child pom ???? -->
                      </manifestEntries>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.schemas</resource>
                    </transformer>
                  </transformers>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
    </build>
        
</project>

我怎么能在上面的父 pom 上做到这一点

【问题讨论】:

  • 我会尝试在你的父 POM 中使用 &lt;pluginManagement&gt;
  • 删除&lt;sourceDirectory&gt;../../webapp/src/main/java&lt;/sourceDirectory&gt;,因为你做错了...请在 GitHub 或类似网站上制作一个完整的工作示例...
  • 嗨 @GeroldBroser 在我的父包中我有 atori-batchpom${project.artifactId}。我想将包装 pom 更改为 jar 包装,并添加带有 标签的 shade 插件,以便为每个孩子提供特定版本
  • 嗨 @khmarbaise 在我的父包中我有 atori-batchpom${project.artifactId}。我想将包装 pom 更改为 jar 包装,并添加带有 标签的 shade 插件,以便为每个孩子提供特定版本
  • 仅使用 maven-shade-plugin 的配置创建一个单独的子级,并将所需的子级添加为依赖项。您不能将父包装从 pom 更改为 jar,因为这不适用于多模块构建...

标签: java maven jar pom.xml maven-shade-plugin


【解决方案1】:

项目结构:

+- parent
   + pom.xml ... <packaging>pom, <module>child1/<module>child1/<module>childN
   |
   +- child1
   |  +- pom.xml ... <parent>parent
   |  +- ... src/main, src/test, etc.
   |
   +- child2
   |  +- pom.xml ... <parent>parent
   |  +- ... src/main, src/test, etc. 
   |
   +- childN
      +- pom.xml ... <parent>parent
      +- ... src/main, src/test, etc.

父 POM

    ...
    <build>
      <pluginManagement>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>...</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <finalName>${project.artifactId}</finalName>
                  <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <manifestEntries>
                        <ChildVersion>${project.version}</childVersion>
                      </manifestEntries>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                      <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                      <resource>META-INF/spring.schemas</resource>
                    </transformer>
                  </transformers>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </pluginManagement>
    </build>
    ...

子 POM

    ...
    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <manifestEntries>
                        <Main-Class>Child[N]LauncherCLass</Main-Class>
                      </manifestEntries>
                    </transformer>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
    </build>
    ...

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2021-07-12
    • 2011-12-10
    • 2014-07-23
    • 2015-02-05
    • 1970-01-01
    相关资源
    最近更新 更多