urb*_*uce 2 java command-line compilation javac
我创建了多个包并希望编译和运行它们。我摆弄周围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
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)
我在项目的根文件夹中执行所有命令。谢谢你的帮助。
解决方案是在编译时包含类路径。这样它就可以找到它所依赖的包。
javac -d bin -cp bin src\net\chris\dojo\Program.java
Run Code Online (Sandbox Code Playgroud)
感谢@BigMike 的解决方案。
| 归档时间: |
|
| 查看次数: |
12453 次 |
| 最近记录: |