java - 带有 minimizeJar 的 Maven Shade 插件

标签 java maven classpath executable-jar maven-shade-plugin

我正在构建一个 super jarfile,但使用 <minimizeJar>true</minimizeJar> 进行了精简。 Maven Shade 插件的选项。

我在设置该选项时收到此错误:

$> java -jar target/lambda-send-email-1.0-SNAPSHOT.jar

Exception in thread "main" java.lang.NoClassDefFoundError: com.amazonaws.AmazonWebServiceClient
    at com.kilsbo.lambda.CreateAndSendEmail.addEmailToDynamo(CreateAndSendEmail.java:148)
    at com.kilsbo.lambda.CreateAndSendEmail.handleRequest(CreateAndSendEmail.java:125)
    at com.kilsbo.lambda.CreateAndSendEmail.main(CreateAndSendEmail.java:43)

但是,对于臃肿的大 jar (minimizeJar 设置为 false),它可以工作。

我已经解压了最小化的 jar,并且实际上包含了所需的类。

unzippedJar/$> file com/amazonaws/AmazonWebServiceClient.class 

com/amazonaws/AmazonWebServiceClient.class: compiled Java class data, version 50.0 (Java 1.6)

所以,我认为这里存在类路径问题,但我在阅读 Maven Shade 插件文档时还没有真正找到解决方案。

我在 pom 中的插件设置:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.kilsbo.lambda.CreateAndSendEmail</mainClass>
                    </transformer>
                </transformers>
                <createDependencyReducedPom>false</createDependencyReducedPom>
                <minimizeJar>true</minimizeJar>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

有什么建议吗?

最佳答案

如果 com/amazonaws/AmazonWebServiceClient.class 与正在查找和执行的类文件存在于同一个 jar 中,则不存在类路径问题。类加载器找到要加载的类。

更可能的情况是找不到 AmazonWebServiceClient 依赖的某些类。不幸的是,JVM 仍然抛出这个有点误导性的错误消息。例如,检查 AmazonWebServiceClient 的源,看看它是否扩展另一个类或具有任何不在您的阴影 uber-jar 中的导入。一个常见的错误是任何

<scope>provided<scope>
pom 中的依赖项将不会被遮蔽。也许 AmazonWebServiceClient 是从另一个 Amazon jar 中未被遮蔽的东西扩展而来。

关于java - 带有 minimizeJar 的 Maven Shade 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34184072/

相关文章:

java - Eclipse IDE 中的 AccessController.doPrivileged() 问题

java - Maven:缺少项目构建错误 'modelVersion'

java - OSX 中 Java CLASSPATH 在哪里?

java - Spring 工具套件中的 maven-compiler-plugin :3. 7.0:compile (default-compile)

java - 如何配置 Jenkins 使用 Maven 进行构建?

java - 在 Windows 7 java/lang/NoClassDefFoundError : java/lang/Object 上运行 jar

java - 从 cmd 运行程序时指定类路径时出错

c# - .Net MemberwiseClone 与 Java 克隆

java - 在android中通过TCP Socket传输一个byte[]

Java for 循环超过退出条件