我创建了多个包,想要编译并运行它们。我摆弄了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
“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
我执行项目根文件夹中的所有命令。 谢谢你的帮助。
答案 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