首页 > 解决方案 > Maven 打包几个阴影罐子

问题描述

我目前正在运行一个多模块 maven 项目,并且在每个模块中我正在生成一个阴影 jar。这些 jars 旨在单独运行,因为它们代表三个不同的 Spark 作业。

然而,为了让它们更容易“运送”到某个地方,我想把所有这些有阴影的罐子都拉上拉链。我试过使用程序集插件来实现这一点,但我很挣扎。

当我尝试使用模块集时,它似乎抓住了未着色的 jar。

我已经能够使用文件集来实现这一点,但它不是很优雅,而且它不能处理我有开发和生产版本的事实,这些版本会改变阴影 jar 的命名。

我假设模块集仍然是正确的方法,但我不知道如何让它抓住我的阴影罐子,只有阴影罐子。任何人都可以帮忙吗?

标签: javamavenzip

解决方案


根据此处此处的示例,您需要这样的东西:

1) 一个带有阴影 jar 项目的父 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.greg</groupId>
    <artifactId>assembly-example</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>pom</packaging>

    <name>assembly-example</name>

    <modules>
        <module>shaded-jar-1</module>
        <module>shaded-jar-2</module>
        <module>distribution</module>
    </modules>

</project>

2)像这样的阴影 jar 项目我已经用作示例

<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <artifactId>assembly-example</artifactId>
    <groupId>com.greg</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>shaded-jar-1</artifactId>

  <name>shaded-jar-1</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.7</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.greg.App</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

3) 将构建最终 zip 的分发项目

<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>assembly-example</artifactId>
        <groupId>com.greg</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>distribution</artifactId>

    <packaging>pom</packaging>

    <name>Distribution</name>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>distro-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>src/assembly/bin.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

4) 一个 bin.xml 来控制 zip 的构建

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">

    <id>bin</id>

    <formats>
        <format>zip</format>
    </formats>

    <includeBaseDirectory>false</includeBaseDirectory>

    <moduleSets>
        <moduleSet>

            <!-- Enable access to all projects in the current multimodule build! -->
            <useAllReactorProjects>true</useAllReactorProjects>

            <!-- Now, select which projects to include in this module-set. -->
            <includes>
                <include>com.greg:shaded-jar-1</include>
                <include>com.greg:shaded-jar-2</include>
            </includes>
            <binaries>
                <outputDirectory>modules/maven-assembly-plugin</outputDirectory>
                <unpack>false</unpack>
            </binaries>
        </moduleSet>
    </moduleSets>

</assembly>

这会给你一个带有脂肪罐的拉链

jar tvf distribution/target/distribution-1.0-SNAPSHOT-bin.zip 
     0 Fri Jun 15 10:37:32 BST 2018 modules/
     0 Fri Jun 15 10:37:32 BST 2018 modules/maven-assembly-plugin/
501520 Fri Jun 15 10:37:30 BST 2018 modules/maven-assembly-plugin/shaded-jar-1-1.0-SNAPSHOT.jar
501520 Fri Jun 15 10:37:30 BST 2018 modules/maven-assembly-plugin/shaded-jar-2-1.0-SNAPSHOT.jar

检查您的阴影插件是否正常工作,在您的 traget 文件夹中,您应该有一个 fat jar 和一个原始 jar,fat jar 是“默认”工件。

greg@greg-XPS-13-9360:~/work/assembly-example$ ls -l shaded-jar-1/target/
total 520
drwxrwxr-x 3 greg greg   4096 Jun 15 10:37 classes
drwxrwxr-x 3 greg greg   4096 Jun 15 10:37 generated-sources
drwxrwxr-x 3 greg greg   4096 Jun 15 10:37 generated-test-sources
drwxrwxr-x 2 greg greg   4096 Jun 15 10:37 maven-archiver
drwxrwxr-x 3 greg greg   4096 Jun 15 10:37 maven-status
-rw-rw-r-- 1 greg greg   2418 Jun 15 10:37 original-shaded-jar-1-1.0-SNAPSHOT.jar
-rw-rw-r-- 1 greg greg 501520 Jun 15 10:37 shaded-jar-1-1.0-SNAPSHOT.jar
drwxrwxr-x 3 greg greg   4096 Jun 15 10:37 test-classes

推荐阅读