Hi there,
I am maintaining my project and did some upgrades including gwt 2.8.2 from 2.7.0.
Now my JUnit based on GwtTestCase is failing with:
java.lang.NoSuchFieldError: FIREFOX_38
at com.google.gwt.junit.RunStyleHtmlUnit.<clinit>(RunStyleHtmlUnit.java:203)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.google.gwt.junit.JUnitShell.createRunStyle(JUnitShell.java:1181)
at com.google.gwt.junit.JUnitShell.doStartup(JUnitShell.java:942)
at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:913)
at com.google.gwt.junit.JUnitShell.getUnitTestShell(JUnitShell.java:698)
at com.google.gwt.junit.JUnitShell.runTest(JUnitShell.java:672)
at com.google.gwt.junit.client.GWTTestCase.runTest(GWTTestCase.java:421)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at com.google.gwt.junit.client.GWTTestCase.run(GWTTestCase.java:247)
at junit.framework.TestSuite.runTest(TestSuite.java:252)
at junit.framework.TestSuite.run(TestSuite.java:247)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
I found out that gwt-dev is depending on htmlunit 2.19 but due some dependency management I was using 2.29 instead.
So I overrode this again in my pom.xml:
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.19</version>
<scope>test</scope>
</dependency>
Now I am getting this error:
java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/BrowserVersion
at com.google.gwt.junit.RunStyleHtmlUnit.<clinit>(RunStyleHtmlUnit.java:202)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.google.gwt.junit.JUnitShell.createRunStyle(JUnitShell.java:1181)
at com.google.gwt.junit.JUnitShell.doStartup(JUnitShell.java:942)
at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:913)
at com.google.gwt.junit.JUnitShell.getUnitTestShell(JUnitShell.java:698)
at com.google.gwt.junit.JUnitShell.runTest(JUnitShell.java:672)
at com.google.gwt.junit.client.GWTTestCase.runTest(GWTTestCase.java:421)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at com.google.gwt.junit.client.GWTTestCase.run(GWTTestCase.java:247)
at junit.framework.TestSuite.runTest(TestSuite.java:252)
at junit.framework.TestSuite.run(TestSuite.java:247)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: com.gargoylesoftware.htmlunit.BrowserVersion
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 24 more
What is also interesting: When I do go to BrowserVersion.class in the htmlunit-2.29.jar of my maven-dependencies in Eclipse, it opens fine and shows the sources.
However, with version 2.19 Eclipse does not open BrowserVersion.class properly and instead shows:
java.util.zip.ZipException: invalid LOC header (bad signature)
at java.util.zip.ZipFile.read(Native Method)
at java.util.zip.ZipFile.access$1400(ZipFile.java:60)
...
So to me it seems like this:
-gwt-dev is hardwired against htmlunit 2.19 and refers to specific BrowserVersion constant fields that are gone in newer versions.
-for some strange reason htmlunit 2.19 deployment in maven central is broken (has a damaged JAR deployed to the world)
Any ideas or workarounds? I already tried 2.18 and 2.20 with no luck (e.g. getting NoSuchFieldError: INTERNET_EXPLORER_8).
Seems I am locked out by gwt. Also does not work with 2.8.1.
Thanks in advance for any hint or suggestion.
Kind regards
Jörg