【问题标题】:Having difficulty creating an uber-jar难以创建 uber-jar
【发布时间】:2012-10-12 06:48:29
【问题描述】:

我正在尝试捆绑一个包含所有依赖项的 java 存档 (JAR)。首先,我尝试使用maven assembly plugin,尽管它缺少一些类。 jar-with-dependencies documentation 建议使用 maven-shade-plugin,这最终会丢失不同的类。我认为正在发生的事情是使用相同包名的多个依赖项似乎被跳过了,所以像 slf4j 这样的东西被跳过了。

我真正喜欢的是打包的 jar 包含自包含的库,而不是重新打包它们。

我几乎放弃了,并认为我只需要使用 bin descriptor for the assembly plugin,它只压缩了 jar 本身并且没有依赖项。

注意:我知道其他人也提出了类似的问题,这导致了使用阴影/组装插件的建议,尽管没有人说明我遇到的具体问题。

更新:由 khmarbaise 请求,以下显示了一个 POM,其中所有课程都被跳过。请注意,还有另一个 JAR 使用相同的包结构,但它是本地化包,包括本地化包但省略了所有类。

<?xml version="1.0"?>
<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>
  <groupId>com.ddtek</groupId>
  <artifactId>openedge</artifactId>
  <packaging>jar</packaging>
  <version>10.1C04</version>
  <name>openedge</name>
  <url>http://progress.com</url>
  <dependencies>
    <dependency>
      <groupId>com.ddtek</groupId>
      <artifactId>base</artifactId>
      <version>10.1C04</version>
    </dependency>
    <dependency>
      <groupId>com.ddtek</groupId>
      <artifactId>util</artifactId>
      <version>10.1C04</version>
    </dependency>
  </dependencies>
</project>

请注意,上面的 POM 是第三方库,不发布到 maven,只存在于我们本地的 nexus repo 中。

【问题讨论】:

  • 显示 pom 并描述错过了哪些课程?
  • 我遇到了类似的问题,并且对它的解决方案很感兴趣,因为我找不到令人满意的解决方案。顺便说一句,你打算把所有东西都放在一个罐子里吗?

标签: java maven maven-2 uberjar


【解决方案1】:

如果没有预定义的描述符适合您的需要,您可以编写自己的程序集。

要包含依赖项,您可以指定类似

的内容
<dependencySets>
    <dependencySet>
      <outputDirectory>/lib</outputDirectory>
      <useProjectArtifact>false</useProjectArtifact>
      <useTransitiveDependencies>true</useTransitiveDependencies>
      <unpack>false</unpack>
       <scope>runtime</scope>
    </dependencySet>
  </dependencySets>

在你的 pom 中是这样的:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <descriptors>
            <descriptor>assembly.xml</descriptor>
          </descriptors>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id> <!-- this is used for inheritance merges -->
            <phase>package</phase> <!-- bind to the packaging phase -->
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

然后根据您的要求进行定制。

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2021-10-02
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多