]
Chris Rankin commented on ARQ-1944:
-----------------------------------
I find your linkage error to be very strange. The reason that there's a problem with
the Hamcrest matchers is that an extra copy of {{org.hamcrest.*}} is bundled inside the
{{arquillian-junit.jar}} object that Arquillian includes to make a deployment
"testable". Removing the duplicate Hamcrest objects (by whatever means)
therefore resolves the problem.
Assuming that your problem is fundamentally the same as mine, this would imply that you
also have duplicated objects somewhere ({{org.joda.time.*}} perhaps?). I suggest examining
the artifacts that Arquillian deploys by adding these lines to your {{arquillian.xml}}
file:
{code:XML}<engine>
<property
name="deploymentExportPath">target/deployments</property>
</engine>{code}
Linkage error with arquillian-junit.jar
---------------------------------------
Key: ARQ-1944
URL:
https://issues.jboss.org/browse/ARQ-1944
Project: Arquillian
Issue Type: Bug
Affects Versions: 1.1.7.Final, 1.1.8.Final, 1.1.9.Final, 1.1.10.Final, 1.1.11.Final
Environment: JDK7, Windows 7 x64, Linux x64
Reporter: Chris Rankin
Attachments: arquillian-hamcrest-test.tar.xz
Testing a WAR in embedded Tomcat >= 7.0.51 using Restassured, JUnit and Hamcrest
matchers. (TestNG works fine).
The test fails with this error message:
{code}Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.404 sec
<<< FAILURE! - in org.testing.web.TroubleIT
testTrouble(org.testing.web.TroubleIT) Time elapsed: 0.774 sec <<< ERROR!
java.lang.LinkageError: loader constraint violation: when resolving interface method
"com.jayway.restassured.specification.ResponseSpecification.statusCode(Lorg/hamcrest/Matcher;)Lcom/jayway/restassured/specification/ResponseSpecification;"
the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current
class, org/testing/web/TroubleIT, and the class loader (instance of
sun/misc/Launcher$AppClassLoader) for resolved class,
com/jayway/restassured/specification/ResponseSpecification, have different Class objects
for the type
cification.statusCode(Lorg/hamcrest/Matcher;)Lcom/jayway/restassured/specification/ResponseSpecification;
used in the signature
at org.testing.web.TroubleIT.testTrouble(TroubleIT.java:35)
{code}
This error can be resolved in four different ways:
- Rewrite the test using TestNG
- Rewrite the test without using any Hamcrest matchers.
- Remove "org.hamcrest" from
{{org.jboss.arquillian.junit.container.JUnitDeploymentAppender}}.
- Set {{@Deployment(testable = false)}} to prevent Arquillian from packaging its
artifacts into the deployment in the first place.
See [Issue #78 for
arquillian-core|https://github.com/arquillian/arquillian-core/issues/78]