Java:从命令行编译和运行多个包

urb*_*uce 2 java command-line compilation javac

我创建了多个包并希望编译和运行它们。我摆弄周围javacjava并了解项目如何包应该被命名为和应该如何构建。我希望我一切都好。但是我在编译和运行这些东西时失败了。我知道我可以为此使用 IDE,但出于好奇,我想使用命令行工具进行尝试。这是我的项目的组织方式:

Project
  + src
    + net
      + chris
        + dojo
            - Program.java
          + datastructures
            - Queue.java
            - LinkedList.java
          + sorting
            - MergeSort.java
  + bin
    + net
      + chris
        + dojo
            - Program.class (should be here but missing because compilation fails)
          + datastructures
            - Queue.class
            - LinkedList.class
          + sorting
            - MergeSort.class
Run Code Online (Sandbox Code Playgroud)

“数据结构”和“排序”包中的类的编译工作正常。这是我使用的命令。“bin”文件夹中的文件夹结构是由编译器自动创建的。

javac -d bin src\net\chris\dojo\datastructures\*.java
javac -d bin src\net\chris\dojo\sorting\*.java
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试编译“Program.java”(这是我从命令行运行的测试类)时,编译器抛出错误,因为它找不到包“net.chris.dojo.datastructures”和“net .chris.dojo.sorting”。下面是编译命令:

javac -d bin src\net\chris\dojo\Program.java
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

src\net\chris\dojo\Program.java:3: error: cannot find symbol
import net.chris.dojo.datastructures;
                     ^
symbol:   class datastructures
location: package net.chris.dojo
src\net\chris\dojo\Program.java:4: error: cannot find symbol
import net.chris.dojo.sorting;
                     ^
symbol:   class sorting
location: package net.chris.dojo
src\net\chris\dojo\Program.java:11: error: cannot find symbol
            MergeSort.sort(values);
            ^
symbol:   variable MergeSort
location: class Program
src\net\chris\dojo\Program.java:12: error: cannot find symbol
            Queue queue = new Queue();
            ^
symbol:   class Queue
location: class Program
src\net\chris\dojo\Program.java:12: error: cannot find symbol
            Queue queue = new Queue();
                              ^
symbol:   class Queue
location: class Program
src\net\chris\dojo\Program.java:13: error: cannot find symbol
            LinkedList list = new LinkedList();
            ^
symbol:   class LinkedList
location: class Program
src\net\chris\dojo\Program.java:13: error: cannot find symbol
            LinkedList list = new LinkedList();
                                  ^
symbol:   class LinkedList
location: class Program
7 errors
Run Code Online (Sandbox Code Playgroud)

这就是我的类文件的代码:

队列.java

package net.chris.dojo.datastructures;

public class Queue {
    ...
}
Run Code Online (Sandbox Code Playgroud)

链表

package net.chris.dojo.datastructures;

public class LinkedList {
    ...
}
Run Code Online (Sandbox Code Playgroud)

合并排序程序

package net.chris.dojo.sorting;

public class MergeSort {
    ...
}
Run Code Online (Sandbox Code Playgroud)

程序.java

package net.chris.dojo;

import net.chris.dojo.datastructures;
import net.chris.dojo.sorting;

public class Program {

    public static void main(String[] args) {
        int[] values = { 9, 4, 6, 2, 0, 3, 8, 1, 7, 5 };
        MergeSort.sort(values);
        Queue queue = new Queue();
        LinkedList list = new LinkedList();
    }

}
Run Code Online (Sandbox Code Playgroud)

我会用这个命令运行它:

java -cp bin net.chris.dojo.Program
Run Code Online (Sandbox Code Playgroud)

我在项目的根文件夹中执行所有命令。谢谢你的帮助。

urb*_*uce 5

解决方案是在编译时包含类路径。这样它就可以找到它所依赖的包。

javac -d bin -cp bin src\net\chris\dojo\Program.java
Run Code Online (Sandbox Code Playgroud)

感谢@BigMike 的解决方案。