如何防止AntClassLoader和URLClassLoader導致鏈接錯誤?ant LinkageError without includeantruntime
由於較舊的項目,junit和hamcrest.core被放入ANT_HOME,我們的構建使用includeantruntime = true來運行單元測試。
我現在正在使用ant構建的項目,我不想依賴ANT_HOME中的任何jar文件。我在所有的javac節中都使用includeantruntime = false。
但是,現在我正在使用hamcrest進行測試,我得到一個運行時鏈接錯誤。
java.lang.LinkageError: loader constraint violation: when resolving method
"org.junit.Assert.assertThat(Ljava/lang/Object;Lorg/hamcrest/Matcher;)V"
the class loader (instance of org/apache/tools/ant/loader/AntClassLoader5)
of the current class, myclass, and the class loader (instance of
java/net/URLClassLoader) for resolved class, org/junit/Assert, have different
Class objects for the type assertThat used in the signature
當junit運行測試時發生運行時鏈接錯誤。
我似乎有兩個選擇,而且我喜歡:從ANT_HOME
- 刪除JUnit和hamcrest.core。這打破了其他 項目。
- 從項目中刪除junit和hamcrest.core,並依賴於ANT_HOME中的設置 。這是我想要避免的。
我本來以爲包括行爲會有幫助。
我的目標是允許junit和hamcrest.core留在ANT_HOME中,同時也包括他們在項目中。也就是說,ANT_HOME的內容應該不重要。
有沒有解決這個問題的方法?