Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running Java program from Python

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.

like image 265
wheaties Avatar asked Dec 30 '22 04:12

wheaties


1 Answers

  1. having classes in the default package (i.e. no package) is discouraged
  2. you must call 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.
  3. you must refer to the class by it full qualified name - i.e. com.package.ClassName
  4. you'd better use an IDE - for educational purposes there's BlueJ and JCreator. Eclipse and NetBeans are more powerful and complex.
like image 146
Bozho Avatar answered Dec 31 '22 19:12

Bozho