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

时间:2013-09-20 09:20:35

标签: 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

“datastructures”和“sorting”包中的类的编译工作正常。这是我使用的命令。 “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

这是我的类文件的代码:

Queue.java

package net.chris.dojo.datastructures;

public class Queue {
    ...
}

LinkedList.java

package net.chris.dojo.datastructures;

public class LinkedList {
    ...
}

MergeSort.java

package net.chris.dojo.sorting;

public class MergeSort {
    ...
}

Program.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

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

2 个答案:

答案 0 :(得分:4)

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

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

感谢@BigMike提供解决方案。

答案 1 :(得分:2)

尝试在您的计划类中更改此内容

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