Reputation: 35970
I've looked here, here, here, and here.
While informative they just didn't quite have enough for me to discover the root of my problem. My code isn't contained within a JAR file and the customer has requested we do not ship it as such.
I built the application in Eclipse and from there it runs fine. I've set up a script that will modify the main
method of one of the java files for testing purposes. I want to run the application using a call from Python after I modify it. However, from the command line when I attempt to call the program using java
or java -cp .
I get the following error:
Exception in thread "main" java.lang.NoClassDefFoundError: DemoAPIFunctionality
Caused by: java.lang.ClassNotFoundException: DemoAPIFunctionality
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: DemoAPIFunctionality. Program will exit.
My project depends on several JARs, which are not within the root directory, and a DLL file, again not in the root directory. I'm hoping it's related to the location of one of those but I'm not sure and am making little headway. Here is DemoAPIFunctionality.java
:
public class DemoAPIFunctionality
{
public final static void main(String[] args)
{
DemoAPIFunctionality demo = new DemoAPIFunctionality();
I'd happily list any more information if it will help you help me. (No, I'm not a sports agent.) What do I need to do to get it to work at least from the command line?
Thanks in advance.
Upvotes: 4
Views: 6094
Reputation: 31
Easy workaround, hint and shortcut.
Dont use any path when calling java classname
from within python.
eg. commands.getstatusoutput("java -cp $CLASSPATH clusterize")
Upvotes: 3
Reputation: 114767
You didn't mention that your python script actually compiles the java source file after applying the edits.
Eclipse will compile it automatically (build-in builder) but of course, outside of the IDE you have to call javac
before you can execute the class. java
will not work on source files.
EDIT
I don't know you actual experience in java - but that's how it usually works on the command line.
Assuming, you have a java class com.example.Hello
with a main method and a file structure like
/dev/bin/com/example/Hello.class
then you cd
to /dev/bin
and do a java com.example.Hello
. Note that the package name (com.example
) is always mapped to a folder structure (com/example
). If you do the above command and java can't find Hello.class
in the folder ./com/example
, then it will throw the NoClassDefFoundError
.
Upvotes: 3
Reputation: 597036
java -cp .
from the root directory of your project - i.e. the directory where your .class
file resides, or when you create packages, the directory, where the com
(org
, etc) subdirectory resides.com.package.ClassName
Upvotes: 4