Monday, February 27, 2006
JUnit and Maven - LinkageError: loader constraints violated when linking
Today I ran into an error trying to run my JUnit (3.8.1) test for my spring (1.2.6) application from within Maven (1.0.2). It looked like the following:
The JUnit FAQ says:
What isn't clear from the FAQ is that this problem was fixed by JUnit 3.8, and yet it can still happen when using JUnit from within Maven.
To solve the problem within maven, make sure you fork a new JVM to run your junit tests:
Reference
Testsuite: com.carrieriq.sqp.collector.AppTestThis error can happen when using earlier versions of JUnit (I believe anything before 3.8 or so) or when using later version of JUnit within maven. A google search on the subject found a dated answer in the JUnit FAQ:
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.762 sec
Testcase: testApp(com.carrieriq.sqp.collector.AppTest): Caused an ERROR
loader constraints violated when linking org/w3c/dom/Node class
java.lang.LinkageError: loader constraints violated when linking org/w3c/dom/Node class
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitions(DefaultXmlBeanDefinitionParser.java :294)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.registerBeanDefinitions(DefaultXmlBeanDefinitionParser.java:191)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:295)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:223)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:173)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions (XmlBeanDefinitionReader.java:148)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java :126)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:142)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
The JUnit FAQ says:
Why do I get a LinkageError when using XML interfaces in my test?
(Submitted by: Scott Stirling)
The workaround as of JUnit 3.7 is to add org.w3c.dom.* and org.xml.sax.* to your excluded.properties.
It's just a matter of time before this fix becomes incorporated into the released version of JUnit's excluded.properties, since JAXP is a standard part of JDK 1.4. It will be just like excluding org.omg.*. By the way, if you download the JUnit source from its Sourceforge CVS, you will find that these patterns have already been added to the default excluded.properties and so has a pattern for JINI. In fact, here is the current version in CVS, which demonstrates how to add exclusions to the list too:
#
# The list of excluded package paths for the TestCaseClassLoader
#
excluded.0=sun.*
excluded.1=com.sun.*
excluded.2=org.omg.*
excluded.3=javax.*
excluded.4=sunw.*
excluded.5=java.*
excluded.6=org.w3c.dom.*
excluded.7=org.xml.sax.*
excluded.8=net.jini.*
What isn't clear from the FAQ is that this problem was fixed by JUnit 3.8, and yet it can still happen when using JUnit from within Maven.
To solve the problem within maven, make sure you fork a new JVM to run your junit tests:
in project.properties, add :
------------------------------
maven.junit.fork=true
maven.compile.fork=true
------------------------------
to fork to distinct JVM.
Reference
- http://mail-archives.apache.org/mod_mbox/jakarta-commons-user/200501.mbox/%3C000b01c5058b$ac6b8dd0$1f0ee352@marcr0onmovhxv%3E
- http://junit.sourceforge.net/doc/faq/faq.htm#running_9
Comments:
Post a Comment