当前位置: 首页 > 知识库问答 >
问题:

maven生成的uberjar不包含依赖类

吴山
2023-03-14

我在ubuntu 18.04上运行maven 3.6.0。

我的应用程序的pom.xml包括这个依赖项;关联的“neptus”jar在我的本地. m2/repository中:

  <dependencies>
    <dependency>
        <groupId>pt.lsts.neptus</groupId>
        <artifactId>neptus</artifactId>
        <version>x.x</version>
    </dependency>
 

我的应用程序实际上引用了“neptus”jar文件中的类,所以我想在我的项目的uberjar中包含这些类。因此,pom.xml也包括这个,改编自http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html

 <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.2.4</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/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>
 
 

然而,由mvn清洁包生成的uberjar不包含来自neptus工件的任何类文件,因此我的应用程序会为那些丢失的类java.lang.NoClassDefFoundError。

我做错了什么?谢谢!

共有1个答案

颛孙子民
2023-03-14

如果该插件被封闭在pluginManagement块中,则默认忽略maven-shade-plugin,就像我的情况一样(抱歉,在我的原始帖子中未显示)。如果我这样做,阴影插件确实会被执行:

% mvn package shade:shade

如本帖所述。

 类似资料:
  • 我正在尝试用maven-shade插件2.1构建一个uber-jar。我希望它包括我的jar和依赖jar中的所有类。但我发现它不包括依赖jar中的类。我可能做错了什么?以下是我在pom.xml中对maven-shade插件的用法。可能是因为finalName与project.artifactid相同吗?

  • 本文向大家介绍用Maven打成可执行jar,包含maven依赖,本地依赖的操作,包括了用Maven打成可执行jar,包含maven依赖,本地依赖的操作的使用技巧和注意事项,需要的朋友参考一下 因为今天一个朋友学习过程中用到了maven项目编写代码,到了最后打包阶段打的包不能运行,一时我也没想起来具体操作步骤,后来我百度学习了一下,特此记录下,以便后续自己查阅。 maven项目中不可避免的需要用到依

  • 我正在开发一个Java项目,使用maven作为依赖项管理器/构建工具。我当前在将依赖项的依赖项解析到正确版本时遇到问题。 有问题的依赖项称为JasperReports-Functions-6.1.0.jar,它不是托管在maven repo中,而是以jar形式提供的。 如何强制jar依赖项使用子依赖项的某个版本?

  • 我在{project_home}/src/test/groovy/中有一些功能测试 我希望能够使用一个gradle任务: 但是编译失败: 我确实在/build/libs下面有jar文件

  • 问题内容: 有没有一种方法可以强制maven(2.0.9)将所有依赖项包含在单个jar文件中? 我有一个构建到单个jar文件中的项目。我希望将依赖项中的类也复制到jar中。 更新:我知道我不能只在jar文件中包含jar文件。我正在寻找一种方法来解压缩指定为依赖项的jar,并将类文件打包到我的jar中。 问题答案: 你可以使用带有描述符的插件来执行此操作。这是我们之一的相关块,它可以完成此任务: