2015-05-27 18 views
1

我在eclipse Luna下工作: 適用於Web開發人員的Eclipse Java EE IDE。Eclipse:避免在JUnit運行時類路徑中包含一些依賴關係

版本:月神服務版本2(4.4.2) 版本ID:20150219-0600

我已經有一些單元測試,並依賴於我的工作區等項目以及外部依賴一個項目使用解析行家。

該項目建立好了,使用作爲它的一個依賴 .m2目錄/庫/ ASM/ASM/3.1/ASM-3.1.jar

的問題是,當我試圖運行單元測試項目(該項目的名稱,然後選擇「運行方式的JUnit」,即鼠標右鍵菜單),它無法運行拋出一個異常:

May 27, 2015 2:06:10 PM com.sun.grizzly.http.servlet.ServletAdapter doService 
SEVERE: service exception: 
java.lang.IncompatibleClassChangeError: Implementing class 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    at com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:79) 
    at com.sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.java:104) 
    at com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:78) 
    at com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:89) 
    at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:700) 
    at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:678) 
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:203) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:211) 
    at com.sun.grizzly.http.servlet.ServletAdapter.loadServlet(ServletAdapter.java:456) 
    at com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:395) 
    at com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:349) 
    at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168) 
    at com.sun.grizzly.tcp.http11.GrizzlyAdapterChain.service(GrizzlyAdapterChain.java:183) 
    at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:745) 

我一直在檢討使用這條線作爲第一JUnit的運行時類路徑我代碼:

logger.trace("Execution classpath [" + System.getProperty("java.class.path") + "]"); 

而且我發現,不知何故,這兩個依賴在類路徑中: .m2/repository/org/ow2/asm/asm-debug-all/4.1/asm-debug-all-4.1.jar: .m2/repository/org/ow2/asm/asm/4.0/asm-4.0.jar:

我怎樣才能擺脫他們的? 我已經讀了很多關於將「運行配置」並從「類路徑」選項卡中刪除有問題的相關性,但在我的情況下,「類路徑」選項卡只顯示下一依賴關係:

引導條目 JRE系統庫[JavaSE的-1.7 用戶條目 MyProblematicProject

誰能告訴我如何擺脫這惱人的依賴或在怎麼做蝕至少純粹一點光來建立了JUnit運行時類路徑和什麼是機會修改它?

謝謝

胡安·弗拉

回答

0

在項目的POM中最有可能的東西在這些依賴關係是拉,傳遞性。在Eclipse的pom編輯器中打開pom文件,您可以使用Dependency Hierarchy選項卡來調查如何獲得兩個asm版本。從那裏你可以選擇排除你不需要或不需要的一個或兩個。

0

E-Riz,感謝您的回覆。有效地,依賴性是從其他項目中傳遞而來的。他們已經在位於連接我們有我們的POM中的下一行:

<dependency> 
     <groupId>websays</groupId> 
     <artifactId>common</artifactId> 
     <version>1.0.0</version> 
     <exclusions> 
     <exclusion> 
      <groupId>org.ow2.asm</groupId> 
      <artifactId>asm</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.ow2.asm</groupId> 
      <artifactId>asm-debug-all</artifactId> 
     </exclusion> 
     <exclusion>  
     <groupId>com.google.code.findbugs</groupId> 
     <artifactId>jsr305</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 

但是,仍然有這個POM配置的執行類路徑包括org.ow2.asm.asm和org.ow2.asm.asm - 調試 - 所有的神器。

請注意,我總是談論執行類路徑,構建類路徑工作正常。

相關問題