【问题标题】:Besides the main artifact jar, generate another jar with some dependencies, not all, for distribution outside Maven除了主要的工件 jar,生成另一个包含一些依赖项的 jar,而不是全部,用于在 Maven 之外分发
【发布时间】:2011-10-06 13:39:23
【问题描述】:

我了解使用 Maven 的用户不应该关心依赖项,因为 Maven 会按照 pom.xml 中指定的方式下载它们。但是我想将另一个 jar 分发给非 Maven 用户。所以我仍然想为 Maven 生成原始 jar,那里没问题。但我也希望能够生成另一个包含一些依赖项的 jar。通过一些依赖项,我的意思是我将选择 pom.xml 中定义的一些依赖项,并将它们包含在我将自己分发的另一个 jar 中。

假设我的 pom.xml 中有 10 个依赖项。 dep1.jar, dep2.jar, ... , dep10.jar.

当然,为使用 MAVEN 分发而生成的主 jar 将没有任何这些依赖项。但我希望能够以某种方式生成另一个包含 dep3.jar 和 dep4.jar 的 jar。

任何帮助将不胜感激!

编辑: 将我引导至 maven 插件并没有帮助。但是给我一个 pom.xml 例子就可以了。 :)

【问题讨论】:

    标签: java maven-2 maven


    【解决方案1】:

    看看maven-assembly-plugin。您可以将其配置为创建一个 JAR,其中包含项目的所有依赖项以及项目的源代码。然后,您可以将插件的执行绑定到 package 阶段,以便将这个 mega-jar 构建为常规生命周期的一部分。

    【讨论】:

    【解决方案2】:

    不确定您所说的包含在生成的 jar 中的 jar 是什么意思,但您有几个选项可以使用。

    首先您可以使用Maven dependency plugin 获取依赖项,然后使用Maven assembly plugin 生成一个包。

    或者,您可以使用Maven Shade pluginMaven JarJar plugin 将多个jar 合并为一个。

    【讨论】:

      【解决方案3】:

      @matt b 已经回答了这个问题,但是既然你想要代码 sn-ps 就可以了。这是执行此操作的一种方法。

      src/main/assembly文件夹中创建一个文件,比如assemblyDescriptor.xml,如下所示:

      <assembly>
          <id>distribution</id>
          <formats>
              <format>zip</format>
          </formats>
          <dependencySets>
              <dependencySet>
                  <outputDirectory>/my-distribution</outputDirectory>
                  <includes>
                      <include>group3:dep3</include>
                      <include>group6:dep6</include>
                      ...
                  </includes>
                  <unpack>true</unpack>
              </dependencySet>
          </dependencySets>
      </assembly>
      

      在您的 pom 中指定以下插件,如果需要在 &lt;profile&gt; 部分中进行条件调用。

                      <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-assembly-plugin</artifactId>
                          <version>2.2.1</version>
                          <executions>
                              <execution>
                                  <phase>package</phase>
                                  <goals>
                                      <goal>single</goal>
                                  </goals>
                              </execution>
                          </executions>
                          <configuration>
                              <descriptors>
                                  <descriptor>src/main/assembly/assemblyDescriptor.xml</descriptor>
                              </descriptors>
                          </configuration>
                      </plugin>
      

      运行 mvn packagemvn install 并在项目 jar 之外查找 zip 文件。

      【讨论】:

      • 如何包含所有的罐子?
      • @jayunit100。你should 浏览文档而不是期望被勺子喂食。 dependencySet 默认包含 所有 依赖项,除非您指定 includesexcludes
      猜你喜欢
      • 1970-01-01
      • 2011-01-16
      • 2023-03-30
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 2014-06-08
      相关资源
      最近更新 更多