2013-01-07 121 views
1

我有一個單元測試項目。我正在使用Maven和m2e。使用Maven在命令行中,我看到:如何擺脫org.hamcrest.core_1.1.0.v20090501071000.jar?

[INFO] | +- org.springframework:spring-test:jar:3.1.3.RELEASE:test 
[INFO] | \- junit:junit-dep:jar:4.10:test 
[INFO] +- org.mockito:mockito-core:jar:1.9.0:test 
[INFO] | +- org.hamcrest:hamcrest-core:jar:1.2.1:test 
[INFO] | \- org.objenesis:objenesis:jar:1.0:test 

mvn install作品,所有的測試運行。好。

現在我試着在Eclipse中使用M2E 1.2.0運行單元測試,我得到這個錯誤:

java.lang.SecurityException: class "org.hamcrest.DiagnosingMatcher"'s signer information does not match signer information of other classes in the same package 
     at java.lang.ClassLoader.checkCerts(ClassLoader.java:806) 
     at java.lang.ClassLoader.preDefineClass(ClassLoader.java:487) 
     ... 
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

這令我費解。 m2e中的依賴關係樹看起來不錯。但是,當我打開進程的屬性,我收到了修改classpath中包含這些額外的條目:

.../eclipse/3.7.2/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/junit.jar 
.../eclipse/plugins/org.hamcrest.core_1.1.0.v20090501071000.jar 

由於這些JAR簽署,測試失敗。我怎樣才能擺脫這兩個條目?或者我怎樣才能確保它們在類路徑中遲到(即在我的JUnit + Hamcrest版本之後)?

回答

0

似乎有兩種可能:

  1. 你已經有了JUnit的類路徑上的了。在Project Properties-> Java Build Path,Libraries選項卡中,是否在路徑上有多個junit庫,即是否已將junit庫添加到項目中?如果是這樣,請將其刪除並重試。

  2. 更可能的原因是你的hamcrest 1.2使用。這與JUnit 4.10(或4.8)不兼容。 JUnit 4.11之前版本包含了一些hamcrest 1.1類,所以你可能會遇到不兼容問題。你最好的選擇是升級到4.11,它不包括hamcrest庫,但是它將1.3作爲傳遞依賴。如果你可以使用hamcrest 1.3做到這一點,如果沒有,1.2 應該工作。

+0

1. JUnit是不上Java Build Path。2.我正在使用'junit-dep',它不包含任何Hamcrest類。問題是jdt Junit啓動程序似乎將JUnit和Hamcrest添加到類路徑(以及舊版本),但我不知道如何防止這種情況。 –

4

我找到了解決方法。

的原因錯誤是Eclipse的JUnit的啓動增加了JUnit和Hamcrest捆綁到classpath中。這兩個是已簽名的Orbit捆綁包,而來自Maven的JAR未簽名。

Hamcrest 1.2包含了比Eclipse的Hamcrest 1.1更多的類。如果Hamcrest 1.1首先被加載,Java將期望包org.hamcrest中的所有類共享相同的加密簽名。這是不正確的,沒有辦法解決這個問題。

錯誤消失,當我通過「Java構建路徑」,或在啓動配置的「類路徑」選項卡中手動添加的依賴。

在這些地方,我可以確保在類路徑中首先出現.m2/repository/的JAR(在JDT JUnit runner從Eclipse的plugins文件夾中添加JAR之前),所以Java永遠不會/嘗試從Orbit加載包。

在啓動配置,它看起來像這樣:

Launch Configuration

但我寧願如果Eclipse中沒惹我的類路徑:-(