我正在构建一个uber jarfile,但对maven shade插件使用了<minimizeJar>true</minimizeJar>
选项。
使用该选项集时出现此错误:
$> 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)
但是,使用the肿的大罐子(将minimizeJar设置为false),它可以工作。
我已经解压缩了迷你罐子,实际上包括了所需的类。
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中。一个常见的错误是pom中任何提供的依赖项都不会被着色。AmazonWebServiceClient可能是从另一个未着色的Amazon jar中扩展而来的。