在eclipse项目中改变jar的顺序

时间:2014-10-23 23:28:37

标签: java eclipse

我最近将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

4 个答案:

答案 0 :(得分:48)

我遇到了同样的问题,并且能够通过以下方式解决问题:

  1. 右键单击包含错误文件的模块。
  2. 点击“属性”
  3. 从左侧选择“Java Build Path”
  4. 现在在右侧,选择“订购和导出”标签
  5. 点击“JRE系统库”,然后点击“向上”按钮将其移至“Maven Dependencies”的顶部

答案 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";