GoingMush
GoingMush

Reputation: 45

How do I compile my main Java program on the command line when it includes an external java package?

I'm a relative Java newbie so apologies if the question appears somewhat basic. I've googled high and low for an answer here and I'm not finding anything that's helping.

Problem:

Whilst I'm able to integrate external packages into my Java programs from an IDE environment, I am trying to do run a very basic program from the command line that calls on a separate, basic package file that I have written - and am simply doing all this as I want to have a bottom-up understanding of how package files are related to a main program by Java.

I have a program that sits on my desktop named MyProgram.java:

import org.somepackage;

public class MyProgram {

    public static void main(String arguments[]) {

    System.out.println("Programme up and running...");
    Human myHuman = new Human(); 
    myHuman.scream();

  }

Still on the Desktop, I then have another folder which I've named src, inside of which I have created the necessary subfolders corresponding to the package name, i.e. ./src/org/somepackage - and in this location, I have the Human.java file which defines the Human class with the following contents:

package org.somepackage;

public class Human {

    public void scream() {

    System.out.println("I exist!!");

  }

}

I then created a classes folder, again on the Desktop, and ran the following compile command on the command line:

javac -d ./classes/ ./src/org/packagename/Human.java

This ran fine and created - as expected - the Human.class file within the ./classes/org/packagename/ location.

However, where I fall down is when I then try to compile MyProgram.java on the command line, i.e.

javac -cp ".:./classes/" MyProgram.java

As you'll see, my class path contains a reference to the current location (".") for the MyProgram.java file, and it contains a reference to the classes folder ("./classes/") which is the base location for the org.somepackage package inside whose subfolders (./classes/org/somepackage/) on can find the Human.class file.

At this stage, I was simply expecting the java engine to compile MyProgram.java into the program MyProgram.class - but, instead, I get an error:

MyProgram.java:1: error: package org does not exist

I've been following the instructions listed here:

https://www3.ntu.edu.sg/home/ehchua/programming/java/J9c_PackageClasspath.html

and I don't appear to be deviating from the instructions - yet I'm unable to locate an explanation on Stackoverflow or anywhere else as to a possible reason for this compile failure. If anyone has an idea, your help would be very much appreciated.

Thanks,

Upvotes: 0

Views: 1416

Answers (1)

fxrbfg
fxrbfg

Reputation: 1786

Your mistake is here

import org.somepackage; <--

public class MyProgram {

    public static void main(String arguments[]) {

    System.out.println("Programme up and running...");
    Human myHuman = new Human(); 
    myHuman.scream();

  }

you forgot to import class actually, you need to write this name import org.somepackage.Human; import all package content import org.somepackage.*; or write full qualified name of class in your code

org.somepackage.Human myHuman = new org.somepackage.Human(); 
myHuman.scream();

correct mistake:

import org.somepackage.Human;

public class MyProgram {

    public static void main(String arguments[]) {

    System.out.println("Programme up and running...");
    Human myHuman = new Human(); 
    myHuman.scream();

  } 

after that compile your Human.java by this command:

javac -d classes Human.java

and MyProgram.java

javac -d classes -cp "classes" MyProgram.java

and run MyProgram by

java -cp "classes" MyProgram

Upvotes: 1

Related Questions