我正在构建一个超级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>
有什么建议吗?
答案 0 :(得分:0)
如果com / amazonaws / AmazonWebServiceClient.class与您正在查找和执行的类文件存在于同一个jar中,那么就没有类路径问题。类加载器找到了要加载的类。
更有可能的是,无法找到AmazonWebServiceClient 依赖于的某些类。不幸的是,JVM仍然会抛出这个有误导性的错误消息。例如,检查AmazonWebServiceClient的源以查看它是否扩展另一个类,或者是否有任何 imports 不在您的着色uber-jar中。一个常见的错误是,你的pom中的任何
<scope>provided<scope>依赖关系都将不加入阴影。也许AmazonWebServiceClient扩展自未被遮蔽的其他亚马逊jar中的某些东西。< p>