K G
K G

Reputation: 1815

ClassDefNotFoundError while class in classpath

I'm trying to run ParSeMiS. According to the documentation, it requires ant, prefuse and antlr jars to be available in its lib directory. I've put all the required jars in it. However, when I try to run it, I get the following error:

Exception in thread "main" java.lang.NoClassDefFoundError: antlr/TokenStreamException
    at de.parsemis.miner.environment.Settings.parseFileName(Settings.java:198)
    at de.parsemis.miner.environment.Settings.parseOption(Settings.java:312)
    at de.parsemis.miner.environment.Settings.parse(Settings.java:170)
    at de.parsemis.miner.environment.Settings.parse(Settings.java:122)
    at de.parsemis.Miner.run(Miner.java:358)
    at de.parsemis.Miner.main(Miner.java:61)
Caused by: java.lang.ClassNotFoundException: antlr.TokenStreamException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 6 more

Now, I've verified that antlr/TokenStreamException.class is present in the antlr jar. I have tried adding the jar manually to the classpath by both exporting the CLASSPATH variable and setting it via the -cp switch. However, none of that works, and I still get this exception. Can anybody help me figure out what's wrong? Thanks.

Upvotes: 0

Views: 3822

Answers (2)

clemej
clemej

Reputation: 2563

I realize this question is very old, but I just had exactly the same problem and found this thread. For posterity, I'm posting how I did eventually get it to run:

As mentioned above, when running with -jar, java apparently ignores the class path. So don't run it with -jar. instead include the jars in the path and run the class directly. Poking around, the following should work (paths are on my Ubuntu 12.10 system):

java -cp /usr/share/java/antlr.jar:/full/path/to/parsemis.jar de.parsemis.Miner

You can then pass in options to the above. Maye sure you use full paths, and no shortcuts like ~/foo, as they apparently don't expand.

Of course, if you're using a Dot-formatted graph like I am, it dies very early on complaining of "unexpected char 0xA", but at least it gets further.

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1502835

The problem is that you're using -jar which ignores your CLASSPATH environment variable. You should list your dependencies in the manifest, as shown here, e.g.

Class-Path: lib/ant.jar lib/antlr-3.4-complete.jar lib/prefuse.jar

(It should have still worked with an explicit -cp option, however. My guess is that you got something wrong when specifying that, and assumed it was the same underlying cause as the failure when using the environment variable.)

Upvotes: 1

Related Questions