Search code examples
javacommand-linejavac

Two java files, in same directory, one accessing the others class/s?


I am trying to grant one .java file access to the class in another .java file. I would like to do this on the command line. For example how would I do this using the two files below?

File: "ToImport.java"

package ABC;
public class ToImport {
    private String aName;
    public ToImport(String Name)  {
        aName = Name;
    }
    public String toString() {
        return("Text: " + aName);
    }
}

File: "TheImport.java"

package ABC;
public class TheImport {
        public static void main(String[] args) {
        ToImport abc = new ToImport("a");
        System.out.println("TEST: " + abc);
    }
}

When I type javac ToImport.java I get no errors but when I type javac TheImport.java I get the following error,

Command Prompt Error Message


Solution

  • TheImport depends on the class ToImport. So, when you compile TheImport the compiler must either also compile ToImport or have access to the already compiled ToImport class.

    Let's say you have a directory that looks like the following,

    src
    └── ABC
        ├── TheImport.java
        └── ToImport.java 
    

    In addition let's say you're in the directory src and want to compile to ../classes. You must use one of the following commands:

    javac -d ../classes ABC/ToImport.java ABC/TheImport.java
    

    or

    javac -d ../classes ABC/ToImport.java
    javac -cp ../classes -d ../classes ABC/TheImport.java
    

    If both .java files depended on each other then you'd have to compile them both at once as in the first command.

    Also note that packages should be all lowercase to respect the Java naming conventions.

    To run the main program you could type,

    cd ../classes
    java ABC.TheImport