我最近将eclipse Java项目转换为动态Web项目。在项目之前和之后列出的导入的jar都是相同的,但是对动态Web项目的更改会导致以下编译错误:
W3C_XML_SCHEMA_NS_URI cannot be resolved or is not a field
由以下代码行抛出:
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
我已经研究过这个错误,它似乎是由javax.xml.XMLConstants
在不同罐子中的冲突版本引发的,但我比较了两个项目中的罐子列表并且它们是相同的,所以我认为一个必须改变罐子的顺序。如何做到这一点?
部分解决方案可能在逻辑上涉及确定哪些罐包含名为javax.xml.XMLConstants
的包。所以我按照@ DiogoSantana的建议,使用Type向导在以下打印屏幕中获得结果:
然后我按照DiogoSantana的建议运行mvn dependency:tree
并得到以下结果:
我接下来对pom.xml
进行了以下更改:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.7</version>
<exclusions>
<exclusion>
<groupId>jsr173_api</groupId>
</exclusion>
</exclusions>
</dependency>
然后我在刷新eclipse项目之前运行mvn clean install
,甚至在eclipse中运行maven..update project
,但错误仍然存在。
注意:在infoset
中搜索字符串pom
未产生任何结果,因此我尝试了下一个更高级jar
。
答案 0 :(得分:48)
我遇到了同样的问题,并且能够通过以下方式解决问题:
答案 1 :(得分:4)
目前(在Java 6及更新版本中),您不需要任何显式的JAXB,JAX-WS,XML Streaming API(JSR-173)或SAAJ jar,因为它们都包含在JDK中。还有许多其他非xml相关的API,例如javax.activation。
如果您的环境是Java 6或更高版本,则应排除与这些相关的任何内容。
答案 2 :(得分:1)
Fisrt使用mvn依赖:tree来确定依赖于jsr173_api的依赖。
假设它是休眠的,就像你提到的那样(我不知道这是不是真的,没有检查出来)。你需要像这样排除jsr173_api:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.6.Final</version>
<exclusions>
<exclusion>
<groupId>jsr173_api</groupId>
</exclusion>
</exclusions>
</dependency>
答案 3 :(得分:0)
只是为了跳过错误&amp;继续执行代码只需在代码中包含以下行。它会起作用。
final String W3C_XML_SCHEMA_NS_URI = "http://www.w3.org/2001/XMLSchema";