简体   繁体   中英

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, ie ./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, ie

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,

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM