2

我创建了多个包并想要编译和运行它们。我摆弄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

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

javac -d bin src\net\chris\dojo\datastructures\*.java
javac -d bin src\net\chris\dojo\sorting\*.java

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

javac -d bin src\net\chris\dojo\Program.java

这是我得到的输出:

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

那是我的类文件的代码:

队列.java

package net.chris.dojo.datastructures;

public class Queue {
    ...
}

链表.java

package net.chris.dojo.datastructures;

public class LinkedList {
    ...
}

合并排序.java

package net.chris.dojo.sorting;

public class MergeSort {
    ...
}

程序.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();
    }

}

我会用这个命令运行它:

java -cp bin net.chris.dojo.Program

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

4

2 回答 2

5

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

javac -d bin -cp bin src\net\chris\dojo\Program.java

感谢@BigMike 的解决方案。

于 2013-09-21T23:46:03.020 回答
2

尝试在您的 Program 课程中更改此设置

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

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

当你编译你的 Program.java 使用以下命令

javac -d bin src\net\chris\dojo\Program.java -classpath bin
于 2013-09-20T09:23:46.450 回答