在maven依赖项中有一个类与Java 8不兼容。
如何正确解决这个问题?
现在我正在做以下事情:
1.创建具有相同名称的包
1.在该包中创建一个同名的类
1.复制并粘贴代码
1.修复不兼容的API调用
问题是这个类包含对受限类的API调用,尽管我更改了Eclipse编译器设置(窗口->首选项-> Java ->编译器->错误/错误->弃用和受限API ->禁止引用(访问规则)):Error -> Warning)来允许访问,该项目有时只会编译。如果它不能编译,我会得到一个“找不到符号”的错误。
编辑:
以下是您要求的详细信息:
- depth:http://mvnrepository.com/artifact/com.sun.xml.wss/xws-security/3.0
- 类别:加密处理器
- 必要变更:
// Change line 1053 FROM:
// _dataEncryptor = XMLCipher.getInstance(dataEncAlgo, _dataCipher);
// TO:
_dataEncryptor = XMLCipher.getInstance(dataEncAlgo);
编辑-2:
Maven构建错误:
[ERROR] symbol: class XMLCipher
[ERROR] location: class com.sun.xml.wss.impl.apachecrypto.EncryptionProcessor
[ERROR] /C:/Users/{name}/development/eclipse_workspace/git/xws-security/src/main/java/com/sun/xml/wss/impl/apachecrypto/EncryptionProcessor.java:[1482,98] cannot find symbol
3条答案
按热度按时间pbpqsu0x1#
下面是一个详细的指南,描述了我到底做了什么:
1.在Eclipse中创建新的Maven项目
1.配置新项目的Maven设置(重要提示:使用相同的组和工件ID,仅更改版本号)
1.添加已安装窃听器的路由器的依赖关系
1.在需要修复的类的同一包中创建Java文件
1.添加Maven shade构建插件来处理补丁文件的创建(这不是唯一一个处理此类任务的插件-例如。dependency:unpack)
1.根据需要在其他项目中包括已修补的服务器(注意:如果您遇到ClassNotFoundError或类似错误,请执行以下操作:右键单击项目-> Properties -> Maven ->“Resolve dependencies from Workspace projects”:false)
如果你不熟悉Maven。下面是完整的pom.xml:http://pastebucket.com/88444
k5hmc34c2#
类似于Steve S.的答案,但使用maven-dependency-plugin。基于this blog post。
我更改了补丁库的名称(而不是版本),但这取决于您的需求,什么更适合您。
对原始库的依赖项应该标记为
<optional>true</optional>
。否则,依赖于您的补丁库的项目也将依赖于原始库,这意味着补丁和原始版本都将位于类路径上,这可能导致各种问题。如果您的项目是子项目,您仍然可以使用与父项目完全不同的groupId和版本。不重要
您可以从解包中排除您修补的类,但这可能不是必要的,因为Maven将首先解包原始库,然后编译新版本,这意味着原始类将被覆盖。好极了!
yduiuuwa3#
一般溶液:
pom.xml
中更改版本,例如从3.0
更改为3.0-patched