Cannot run GAE Test when gwt-dev dependency is removed (java.lang.NoClassDefFoundError: org/mortbay/xml/XmlParser)

Cannot run GAE Test when gwt-dev dependency is removed (java.lang.NoClassDefFoundError: org/mortbay/xml/XmlParser)

我在想办法解决这个错误,有人说 httpcore 依赖性:

java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET
    at com.jayway.restassured.config.EncoderConfig.<init>(EncoderConfig.java:48)
    at com.jayway.restassured.config.RestAssuredConfig.<init>(RestAssuredConfig.java:41)
    at com.jayway.restassured.RestAssured.<clinit>(RestAssured.java:423)

然而,运行 mvn dependency:tree 给出

[INFO] +- com.jayway.restassured:rest-assured:jar:2.4.0:compile
[INFO] |  +- org.codehaus.groovy:groovy:jar:2.3.7:compile
[INFO] |  +- org.codehaus.groovy:groovy-xml:jar:2.3.7:compile
[INFO] |  +- org.apache.httpcomponents:httpclient:jar:4.3.6:compile
[INFO] |  |  +- org.apache.httpcomponents:httpcore:jar:4.3.3:compile

更新:

显然是 GWT 依赖引起的:

  <dependency>
      <groupId>com.google.gwt</groupId>
      <artifactId>gwt-dev</artifactId>
      <version>${version.gwt}</version>
      <scope>test</scope>
      <exclusions>
          <exclusion>
              <groupId>org.apache.httpcomponents</groupId>
              <artifactId>httpcore</artifactId>
          </exclusion>
      </exclusions>
  </dependency>

我已经添加了排除项并且错误消失了,但是删除 gwt-dev 会使 GAE 测试失败并抛出此错误:

Caused by: java.lang.NoClassDefFoundError: org/mortbay/xml/XmlParser
    at com.google.apphosting.utils.config.AppEngineWebXmlProcessor.getTopLevelNode(AppEngineWebXmlProcessor.java:94)
    at com.google.apphosting.utils.config.AppEngineWebXmlProcessor.processXml(AppEngineWebXmlProcessor.java:55)
    at com.google.apphosting.utils.config.AppEngineWebXmlReader.processXml(AppEngineWebXmlReader.java:132)
    at com.google.apphosting.utils.config.AppEngineWebXmlReader.readAppEngineWebXml(AppEngineWebXmlReader.java:76)
    at com.google.appengine.tools.KickStart.isVMRuntime(KickStart.java:368)
    at com.google.appengine.tools.KickStart.<init>(KickStart.java:241)
    at com.google.appengine.tools.KickStart.main(KickStart.java:106)

解决办法就是让GWT放心不接类:

  <dependency>
      <groupId>com.jayway.restassured</groupId>
      <artifactId>rest-assured</artifactId>
      <version>2.4.0</version>
  </dependency>
  <dependency>
      <groupId>com.google.gwt</groupId>
      <artifactId>gwt-dev</artifactId>
      <version>${version.gwt}</version>
      <scope>test</scope>
  </dependency>

有了这个命令后,测试正常。