【问题标题】:Maven Shade Plugin Create Jar Without Dependencies and load dependency jars from another locationMaven Shade 插件创建没有依赖关系的 Jar 并从另一个位置加载依赖关系 jars
【发布时间】:2016-02-22 11:59:49
【问题描述】:

我想使用没有第三方依赖的 maven-shade-plugin 创建一个 jar 文件。但是,应将第 3 方依赖项 jar 复制到某个文件夹(例如 libs)。 因此,当我分发我的应用程序时,我将 main.jar 和 libs 文件夹一起分发,所以当我启动创建的主 jar 时,它应该从 libs 文件夹加载依赖项。

是否可以在 maven-shade-plugin 中执行此操作?那么如何配置呢?

【问题讨论】:

    标签: maven maven-shade-plugin


    【解决方案1】:

    这是无法实现的,因为 maven shade 插件会将所有依赖 jar 文件内容(类文件)提取到主 jar 文件中。但是,这可以使用maven-jar-pluginmaven-dependency-plugin 来实现。这是我的构建设置:

    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>fully.qualified.MainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>install</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    

    【讨论】:

      【解决方案2】:

      当然,我也直接通过maven shade插件搭建了一个大jar。

      这是我在一个 jar 中构建一个包含所有 spring 框架依赖项的 spring 应用程序的用法:

      <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.AppendingTransformer">
                              <resource>META-INF/spring.handlers</resource>
                          </transformer>
                          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                              <resource>META-INF/spring.schemas</resource>
                          </transformer>
                          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                              <resource>META-INF/spring.tooling</resource>
                          </transformer>
                          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                              <manifestEntries>
                                  <Main-Class>${project.build.mainClass}</Main-Class>
                                  <Build-Number>1</Build-Number>
                                  <Specification-Title>${project.artifactId}</Specification-Title>
                                  <Specification-Version>${project.version}</Specification-Version>
                                  <Implementation-Title>${project.artifactId}</Implementation-Title>
                                  <Implementation-Version>${project.version}</Implementation-Version>
                                  <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
                              </manifestEntries>
                          </transformer>
                      </transformers>
                  </configuration>
              </execution>
          </executions>
      </plugin>
      

      除了与Maven Assembly Plugin的比较,如HP中所说,Maven Assembly Plugin只提供了一些基本的支持,而Maven Shade Plugin可以提供更多的控制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-05
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多