• maven-shade-plugin 入门指南


    1. Why?

    通过 maven-shade-plugin 生成一个 uber-jar,它包含所有的依赖 jar 包。

    2. Goals

    GoalDescription
    shade:help Display help information on maven-shade-plugin.Callmvn shade:help -Ddetail=true -Dgoal=<goal-name>to display parameter details.
    shade:shade Mojo that performs shading delegating to the Shader component.

    3. Usage

    • 配置 maven-shade-plugin

    maven-shade-plugin 将 goal shade:shade 绑定到 phase package 上。

     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-shade-plugin</artifactId>
                 <version>2.4.3</version>
                 <configuration>
                    <!-- put your configurations here -->
                 </configuration>
                 <executions>
                     <execution>
                         <phase>package</phase>
                         <goals>
                            <goal>shade</goal>
                         </goals>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
     </build>
    • 执行命令
    mvn clean package

    会在 target 文件生成一个 uber-jar,以 -shaded.jar 为后缀的 jar 包。

    4. Examples

    • Selecting Contents for Uber JAR

    将该工程依赖的部分 Jar 包 include/exclude 掉。

    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <artifactSet>
                    <excludes>
                      <exclude>classworlds:classworlds</exclude>
                      <exclude>junit:junit</exclude>
                      <exclude>jmock:*</exclude>
                      <exclude>*:xml-apis</exclude>
                      <exclude>org.apache.maven:lib:tests</exclude>
                      <exclude>log4j:log4j:jar:</exclude>
                    </excludes>
                  </artifactSet>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
    </build>

    将依赖的某个 Jar 包内部的类或者资源 include/exclude 掉。

    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <filters>
                    <filter>
                      <artifact>junit:junit</artifact>
                      <includes>
                        <include>junit/framework/**</include>
                        <include>org/junit/**</include>
                      </includes>
                      <excludes>
                        <exclude>org/junit/experimental/**</exclude>
                        <exclude>org/junit/runners/**</exclude>
                      </excludes>
                    </filter>
                    <filter>
                      <artifact>*:*</artifact>
                      <excludes>
                        <exclude>META-INF/*.SF</exclude>
                        <exclude>META-INF/*.DSA</exclude>
                        <exclude>META-INF/*.RSA</exclude>
                      </excludes>
                    </filter>
                  </filters>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
    </build>

    maven-shade-plugin 自动将所有不使用的类全部排除掉,将 uber-jar 最小化。

    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <minimizeJar>true</minimizeJar>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    • Attaching the Shaded Artifact

    默认会生成一个Jar包和一个以 "-shaded"为结尾的uber-jar包,可以通过配置来指定uber-jar的后缀名。

    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <shadedArtifactAttached>true</shadedArtifactAttached>
                  <shadedClassifierName>jackofall</shadedClassifierName> <!-- Any name that makes sense -->
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    • Executable JAR

    通过设置 MainClass 创建一个可执行 Jar 包。

    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <mainClass>org.sonatype.haven.HavenCli</mainClass>
                    </transformer>
                  </transformers>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    • Relocating Classes

    Java 工程经常会遇到第三方 Jar 包冲突,使用 maven shade plugin 解决 jar 或类的多版本冲突。 maven-shade-plugin 在打包时,可以将项目中依赖的 jar 包中的一些类文件打包到项目构建生成的 jar 包中,在打包的时候把类重命名。下面的配置将 org.codehaus.plexus.util jar 包重命名为 org.shaded.plexus.util。

    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <relocations>
                    <relocation>
                      <pattern>org.codehaus.plexus.util</pattern>
                      <shadedPattern>org.shaded.plexus.util</shadedPattern>
                      <excludes>
                        <exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude>
                        <exclude>org.codehaus.plexus.util.xml.pull.*</exclude>
                      </excludes>
                    </relocation>
                  </relocations>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>

    参考

    maven 入门指南
    maven 生命周期
    Maven 默认插件以及功能
    maven 依赖管理
    maven-shade-plugin 入门指南
    maven-assembly-plugin 入门指南



    转自:https://www.jianshu.com/p/7a0e20b30401
  • 相关阅读:
    poj 3616 Milking Time
    poj 3176 Cow Bowling
    poj 2229 Sumsets
    poj 2385 Apple Catching
    poj 3280 Cheapest Palindrome
    hdu 1530 Maximum Clique
    hdu 1102 Constructing Roads
    codeforces 592B The Monster and the Squirrel
    CDOJ 1221 Ancient Go
    hdu 1151 Air Raid(二分图最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/10537134.html
Copyright © 2020-2023  润新知