I’ve looked through many of the existing threads about this error, but still no luck. I’m not even trying to package a jar or use any third-party packaging tools. I’m simply running from within Eclipse (works great) and then trying to run the exact same app from the command line, in the same location it’s built to (getting this error). My goal is to be able to zip up the bin folder and send it off to be run by someone else via a command line script. Some details:
- It’s a command-line app and I’m using the commons-lang-2.4.jar for string utilities. That is the file that cannot be located (specificaly “java.lang.NoClassDefFoundError: org/apache/commons/lang/StringEscapeUtils”)
- I have that jar in my lib folder and have added it to my build path in Eclipse via right-click “Build Path -> Add to Build Path”
- The .classpath file looks correct and contains the reference to the jar, but I assume that file is only used by Eclipse (contains this line:
<classpathentry kind="lib" path="lib/commons-lang-2.4.jar"/>) - Could this be related to the Eclipse working directory setting? I have some internal template files that I created that are under src/templates, and the only way I can seem to get those to be seen is by setting the project working directory to AppName/src. Maybe I should be putting those somewhere else?
Let me know if any additional info would help. Surely this is something simple, but I’ve wasted too much time on it at this point. This is reminding me why I originally left Java back in ’05 or so…
A
NoClassDefFoundErrorbasically means that the class was there in the classpath during compiletime, but it is missing in the classpath during runtime.In your case, when executing using
java.exefrom commandline, you need to specify the classpath in the-cpor-classpathargument. Or if it is a JAR file, then you need to specify it in theclass-pathentry of itsMANIFEST.MFfile.The value of the argument/entry can be either absolute or relative file system paths to a folder containing all
.classfiles or to an individual.jarfile. You can separate paths using a semicolon;. When a path contains spaces, you need to wrap the particular path with doublequotes". Example:To save the effort of typing and editing the argument in commandline everytime, use a
.batfile.Edit: I should have realized that you’re using an Unix based operating system. The above examples are Windows-targeted. In the case of Unix like platforms you can follow the same rules, but you need to separate the paths using a colon
:and instead of an eventual batch file, use a.shfile.