使用minimizeJar的Maven Shade插件

时间:2015-12-09 16:35:25

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

我正在构建一个超级jar文件,但使用<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>

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

更有可能的是,无法找到AmazonWebServiceClient 依赖于的某些类。不幸的是,JVM仍然会抛出这个有误导性的错误消息。例如,检查AmazonWebServiceClient的源以查看它是否扩展另一个类,或者是否有任何 imports 不在您的着色uber-jar中。一个常见的错误是,你的pom中的任何

<scope>provided<scope>
依赖关系都将加入阴影。也许AmazonWebServiceClient扩展自未被遮蔽的其他亚马逊jar中的某些东西。< p>