如果.java文件导入包A
,而后者又导入另一个包B
,
当我编译.java文件以在命令行中使用javac
获取其.class文件时,是否需要在-cp
之后指定B.class
的路径作为A.class
的路径?
当我在命令行中使用java
运行.class文件时,是否需要在-cp
之后指定B.class
的路径以及{{{}的路径1}}
From an example of junit test,编译测试不需要将hamcrest指定为A.class
,而运行测试则需要。是关于编译“否”的第一个问题的答案,以及关于运行“是”的第二个问题的答案?
感谢。
答案 0 :(得分:0)
- 当我编译.java文件以在命令行中使用
javac
获取其.class文件时,是否需要在-cp
之后指定B.class
的路径以及路径到A.class
?
是。编译.java
文件时,编译器需要查找该文件导入的所有符号(类)。因此,如果您的.java
文件导入类A,则类加载器需要加载它。如果A类导入了B类,那么类加载器也需要加载它。这是递归发生的。
类加载器如何知道在哪里找到类? 它在类路径中搜索类。 如果它在类路径上找不到东西, 它将无法继续并引发错误。
- 当我在命令行中使用
java
运行.class文件时,是否需要在-cp
之后指定B.class
的路径以及A.class
的路径?
是的,原因与前一点完全相同。
From an example of junit test,编译测试不需要将hamcrest指定为
javac -cp
,同时运行测试。
运行测试时
你没有执行你的测试课,
你正在执行org.junit.runner.JUnitCore
课程。
因此,您必须提供的依赖项不仅仅是测试类的依赖项,
还有org.junit.runner.JUnitCore
的依赖,
在这个例子中是hamcrest。