java - 执行 org.apache.maven.plugins :maven-shade-plugin:1. 3.1 :shade: java. lang.AbstractMethodError: null 时遇到 API 不兼容

标签 java maven cxf maven-shade-plugin

在尝试构建旧版本的 Apache CXF 2.2.2 时,我一直收到 ma​​ven-shade-plugin 使用的 XmlAppendingTransformer 产生的错误:无法连接以获取 http://java.sun.com/dtd/properties.dtd 的 DTD (由文件 META-INF/cxf/extensions.xml 引用)

我尝试使用从 1.3.1 版开始的 maven-shade-plugin 提供的 ignoreDtd 选项来解决这个问题。

但现在我遇到了另一个更奇怪的错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:1.3.1:shade (default) on project cxf-bundle: Execution default of goal org.apache.maven.plugins:maven-shade-plugin:1.3.1:shade failed: An API incompatibility was encountered while executing org.apache.maven.plugins:maven-shade-plugin:1.3.1:shade: java.lang.AbstractMethodError: null
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.apache.maven.plugins:maven-shade-plugin:1.3.1
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/C:/Users/postese/.m2/repository/org/apache/maven/plugins/maven-shade-plugin/1.3.1/maven-shade-plugin-1.3.1.jar
[ERROR] urls[1] = file:/C:/Users/postese/libraries/apache-cxf-2.2.2-patched-src/buildtools/target/cxf-buildtools-2.2.2.jar
[ERROR] urls[2] = file:/C:/Users/postese/.m2/repository/pmd/pmd/4.2/pmd-4.2.jar
[ERROR] urls[3] = file:/C:/Users/postese/.m2/repository/ant/ant/1.6/ant-1.6.jar
[ERROR] urls[4] = file:/C:/Users/postese/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[ERROR] urls[5] = file:/C:/Users/postese/.m2/repository/org/codehaus/plexus/plexus-utils/1.5.5/plexus-utils-1.5.5.jar
[ERROR] urls[6] = file:/C:/Users/postese/.m2/repository/asm/asm/3.2/asm-3.2.jar
[ERROR] urls[7] = file:/C:/Users/postese/.m2/repository/asm/asm-commons/3.2/asm-commons-3.2.jar
[ERROR] urls[8] = file:/C:/Users/postese/.m2/repository/asm/asm-tree/3.2/asm-tree-3.2.jar
[ERROR] urls[9] = file:/C:/Users/postese/.m2/repository/org/jdom/jdom/1.1/jdom-1.1.jar
[ERROR] urls[10] = file:/C:/Users/postese/.m2/repository/org/apache/maven/shared/maven-dependency-tree/1.1/maven-dependency-tree-1.1.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[project>org.apache.cxf:cxf-bundle:2.2.2, parent: ClassRealm[maven.api, parent: null]]]
[ERROR]
[ERROR] -----------------------------------------------------

哪个库或插件导致“API 不兼容”?

最佳答案

经过大量挖掘并尝试逐一消除 ma​​ven-shade-plugin 使用的 ResourceTransformers,我找到了罪魁祸首:

显然现在问题不是由 XmlAppendingTransformer 引起的,而是 Apache CXF 定义的两个 ResourceTransformer:

apache-cxf-2.2.2-patched-src\buildtools\src\main\java\org\apache\cxf\maven:

CXFAllTransformer.java
PluginTransformer.java

CXF 2.2.2 中定义的两个转换器不兼容 maven-shade-plugin 1.3 版中定义的新ResourceTransformer 接口(interface)。 1,因为缺少这个新方法:

public void processResource(String resource, InputStream is, List relocators) throws IOException {

它们已在 CXF 2.2.12 中“修复”,其中包含此方法。

所以我的“修复”是将这两个转换器的源代码从 CXF 2.2.12 的源代码复制到 CXF 2.2.2 的“修补”源代码中。

关于java - 执行 org.apache.maven.plugins :maven-shade-plugin:1. 3.1 :shade: java. lang.AbstractMethodError: null 时遇到 API 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382445/

相关文章:

java - 如何获取另一个java项目的类路径?

java - Heroku java 服务器崩溃

java - Maven - exec-maven-plugin - 逗号分隔属性

jms - Camel - CXF 端点 - JMS 请求-回复模型

java - CXF 3.1 wsdl2java 使用 Log4j2 进行日志记录

java - 带有 c3p0 数据库池和故障转移的 Spring Boot JDBCTemplate

java - 将数据返回给调用者的模态 JInternalFrame

java - Java 接口(interface)有什么意义?

java - 在Java中,多个线程想要操作一个对象,如何让一个对象操作该对象,而其他线程等待工作完成?

java - 设置默认的 SocketFactory