2016-07-18 302 views
5

当我尝试通过ant我越来越java.lang.NoSuchMethodError: org.springframework.http.MediaType.getCharset()Ljava/nio/charset/Charset运行我TestNG测试(参见下面的完整的除外)java.lang.NoSuchMethodError:org.springframework.http.MediaType.getCharset()Ljava/NIO /字符集/字符集

我没有编译或运行我的web应用程序的麻烦,但无法通过ant运行测试。我很确定这是一个类加载问题,但不确定在运行时应该在什么样的顺序类加载。我使用Spring 4.3.1和Spring Security 4.1.1。

是否有特定的命令来加载我的罐子,以便使用org.springframework.http.MediaType的“正确”版本?

[testng] org.testng.TestNGException: 
    [testng] An error occurred while instantiating class com.avada.rest.api.GroupsIntTest: org.springframework.http.MediaType.getCharset()Ljava/nio/charset/Charset; 
    [testng]  at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:388) 
    [testng]  at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:290) 
    [testng]  at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:125) 
    [testng]  at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:191) 
    [testng]  at org.testng.TestClass.getInstances(TestClass.java:104) 
    [testng]  at org.testng.TestClass.initTestClassesAndInstances(TestClass.java:90) 
    [testng]  at org.testng.TestClass.init(TestClass.java:82) 
    [testng]  at org.testng.TestClass.<init>(TestClass.java:45) 
    [testng]  at org.testng.TestRunner.initMethods(TestRunner.java:409) 
    [testng]  at org.testng.TestRunner.init(TestRunner.java:247) 
    [testng]  at org.testng.TestRunner.init(TestRunner.java:217) 
    [testng]  at org.testng.TestRunner.<init>(TestRunner.java:161) 
    [testng]  at org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:555) 
    [testng]  at org.testng.SuiteRunner.init(SuiteRunner.java:168) 
    [testng]  at org.testng.SuiteRunner.<init>(SuiteRunner.java:117) 
    [testng]  at org.testng.TestNG.createSuiteRunner(TestNG.java:1359) 
    [testng]  at org.testng.TestNG.createSuiteRunners(TestNG.java:1346) 
    [testng]  at org.testng.TestNG.runSuitesLocally(TestNG.java:1200) 
    [testng]  at org.testng.TestNG.runSuites(TestNG.java:1124) 
    [testng]  at org.testng.TestNG.run(TestNG.java:1096) 
    [testng]  at org.testng.TestNG.privateMain(TestNG.java:1425) 
    [testng]  at org.testng.TestNG.main(TestNG.java:1394) 
    [testng] Caused by: java.lang.NoSuchMethodError: org.springframework.http.MediaType.getCharset()Ljava/nio/charset/Charset; 
    [testng]  at org.springframework.web.client.RestTemplate$AcceptHeaderRequestCallback.getSupportedMediaTypes(RestTemplate.java:757) 
    [testng]  at org.springframework.web.client.RestTemplate$AcceptHeaderRequestCallback.doWithRequest(RestTemplate.java:733) 
    [testng]  at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:617) 
    [testng]  at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:580) 
    [testng]  at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:287) 
    [testng]  at com.avada.rest.api.ApiTestClient.getAll(ApiTestClient.java:81) 
    [testng]  at com.avada.rest.api.GroupsIntTest.<clinit>(GroupsIntTest.java:17) 
    [testng]  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    [testng]  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    [testng]  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    [testng]  at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    [testng]  at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:29) 
    [testng]  at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:377) 
    [testng]  ... 21 more 
    [testng] The tests failed. 
+0

听起来像是Java版本不匹配 – paulsm4

+0

@ paulsm4 - 我的'$ {ant.java.version}'和'$ {java.version}'显示为'1.7'和'1.7.0_80'。我的'$ JAVA_HOME'显示为'/ usr/lib/jvm/java-7-oracle' - 我需要检查哪些Java版本? –

+0

您是否尝试过清洁和建立您的项目? –

回答

5

令人难以置信的是......再次被类加载问题挫败......一个名为activemq-minimal-5.13.3.jar的超级罐子引用了spring罐子,导致了冲突。 activemq-minimal-5.13.3.jar按字母顺序排列在spring之前,因此activemq罐子中的班级正被装入/使用在spring罐子上。更新我的蚂蚁编译首先加载spring类,现在我全部设置。

我发现的方法是,我把我所有的第三方库一起在“试验”项目,并添加/删除的罐子(带有些倾斜,其中的问题是的),直到我能够确定所在班级加载问题是。

+0

感谢您的更新!请“接受”您的解决方案。 – paulsm4

1

org.springframework.http.MediaType.getCharset()自4.3中引入的java,如果没有找到它意味着你必须在你的类路径下面4.3.1弹簧核心版本,得到加载和使用。
你能分享你的lib目录的内容吗?