【发布时间】:2013-09-25 15:01:55
【问题描述】:
我创建了多个包并想要编译和运行它们。我摆弄了javac 和java 并了解了如何命名包以及如何构建项目。我希望我没事。但是我在编译和运行这些东西时失败了。我知道我可以为此使用 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 {
...
}
LinkedList.java
package net.chris.dojo.datastructures;
public class LinkedList {
...
}
MergeSort.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
我在项目的根文件夹中执行所有命令。 感谢您的帮助。
【问题讨论】:
-
看看 ANT (ant.apache.org)。命令行很好,但处理类路径可能有点痛苦。顺便说一句,更改您的导入并在 javac 命令行上指定一个类路径。
-
我的意思是编译后将 javac -d bin src\net\chris\dojo\Program.java 更改为 javac -d bin -cp bin src\net\chris\dojo\Program.java你的包裹。
-
感谢工作!所以每次当我想编译一个使用其他包中的类的类时,我应该包括
-cp选项来告诉javac在哪里可以找到这些包? -
@BigMike 您能否发表您的评论作为答案,以便我将此问题标记为已回答?
-
别担心。只要你解决了你的问题就好了。但真正了解一下 ANT 以便编写脚本,以后会省去很多麻烦。
标签: java command-line compilation javac