Native Client Throws NoClassDefFoundError in Fisheye 2.x
症状
Setting up the Native Client in Fisheye/Crucible 2.0+ throws the following error:
ERROR: problem running command
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.cenqua.fisheye.FishEyeCtl.mainImpl(FishEyeCtl.java:106)
at com.cenqua.fisheye.FishEyeCtl.main(FishEyeCtl.java:39)
Caused by: java.lang.NoClassDefFoundError: org/tigris/subversion/javahl/LogMessageCallback
at com.cenqua.fisheye.svn.SvnRepositoryEngine.<init>(SvnRepositoryEngine.java:38)
at com.cenqua.fisheye.svn.SvnScmConfig.createRepositoryEngine(SvnScmConfig.java:123)
at com.cenqua.fisheye.RepositoryConfig.createRepositoryEngine(RepositoryConfig.java:161)
at com.cenqua.fisheye.rep.RepositoryHandle.run(RepositoryHandle.java:293)
at com.cenqua.fisheye.config.RepositoryManager.runRepository(RepositoryManager.java:231)
at com.cenqua.fisheye.config.RootConfig.startRepositories(RootConfig.java:462)
at com.cenqua.fisheye.ctl.Run.mainImpl(Run.java:248)
at com.cenqua.fisheye.ctl.Run.main(Run.java:46)
... 6 more
Caused by: java.lang.ClassNotFoundException: org.tigris.subversion.javahl.LogMessageCallback
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 14 more
原因
Fisheye or Crucible 2.0+ requires SVN 1.5+ (with the javahl libs 1.5+) in order for the native client to work, and is incompatible with Subversion 1.4 or earlier.
ソリューション
Upgrade your SVN repository to 1.5 or above and download the javahl 1.5x libs, to connect Fisheye/Crucible 2.x to the native client.
Alternatively you can use the SVNKit client that comes bundled with Fisheye/Crucible 2.x.
または
If your server fails to start up because of the above error (and you cannot go into administration to remove the native client settings), edit your FISHEYE_INST/config.xml
and remove the bit:
<svn-config jar="/path/to/jar" jnilib="path/to/dynamic lib"/>
Without the above, the next time you restart Crucible will use the bundled SVNKit.
If you do not have the above in your config.xml
file, but your fisheye server still fails to load up with the error java.lang.NoClassDefFoundError: org/tigris/subversion/javahl/LogMessageCallback
, check to ensure that the "svn-javahl.jar" is not being loaded (i.e. does not exist in your FISHEYE_INST/lib
or FISHEYE_HOME/lib
directory, where the jars are loaded into fisheye) and that it is not being included in the classpath (i.e. not included in the FISHEYE_LIBRARY_PATH Environment Variables ).