2016-07-18 301 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目錄的內容嗎?