我的项目有很多罐子。两个罐子有一个具有相同名称的特定类。 jar都包含一个名为Response的类。 jar A中的一个Response类有一个方法abc()。我在Service类中创建此类的引用,并调用此方法abc()。当我使用maven生成war文件并在与Eclipse集成的本地系统Tomcat中运行项目时,找到了该方法,并且没有异常。但是当我在外部AWS Tomcat中部署相同的war文件时,我得到了java.lang.NoSuchMethodError。这必须是因为在war文件中,引用必须属于另一个没有方法abc()的jar中的类。我不能删除这些类,因为两者都被使用。 帮助
答案 0 :(得分:0)
如果你只希望将A的类包含在你的超级jar中,我相信你可以通过在yuor POM文件中使用以下指令行中的内容将jar包中的类排除在uber jar中: -
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>${hadoop.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
</exclusion>
</exclusions>
</dependency>
上面的指令将包括hadoop客户端核心jar中除commons-math3之外的所有依赖jar,所以如果你想使用更新版本(或说不同版本)的apache commons-math3,你可以明确地添加它作为POM中的依赖,而不必担心hadoop核心库中的commons-math3是否会被包含在你的超级jar中