我有一个关于编译 Jar 文件 (MyJar.jar
) 中有一些依赖类的类的问题。通过将目录树放在 -classpath 选项中(例如: javac -cp MyJar MyClass.java ),是检查所有子目录中的类还是仅检查目录树中的顶级类?
提前致谢。
最佳答案
是否会递归搜索-cp
指定的目录:否
当类加载器进入类路径中指定的目录时,它开始使用类所在的package
作为子目录。如果未指定包,则类加载器将期望它位于该目录的直接子级(类文件)下。
它是-cp
direcoties/jars和包名称
的组合。
假设您有以下目录结构
+ Project
sayhello.jar
+ dir
+ sub
+ com
+ test
SayHelloMain.java
类SayHelloMain.java
的代码在哪里(注意包声明)
package com.test;
import miscellaneous.so.SayHello;
public class SayHelloMain {
public static void main(String[] args) {
SayHello.sayIt();
}
}
以及包含类SayHello
的jar文件sayhello.jar
如果在与 java 源文件相同的目录中打开命令行,这就是编译类 SayHelloMain
的方式
javac SayHelloMain.java -cp ..\..\..\..\sayhello.jar
或者如果在目录Project
中打开命令行
javac dir\sub\com\test\SayHelloMain.java -cp sayhello.jar
假设您在目录 Project
中打开了命令行
这是运行类 SayHelloMain
java -classpath dir\sub;sayhello.jar com.test.SayHelloMain
类名必须完全限定,因此com.test.SayHelloMain
命令
java -classpath dir;sayhello.jar com.test.SayHelloMain
由于不递归搜索目录dir
,因此不起作用
命令
java -classpath dir;sayhello.jar sub.com.test.SayHelloMain
也不会工作,因为没有这样的包sub.com.test
。包只是在类的包声明中定义的包
关于java - 将 Jar 文件与 -classpath JAVA 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15131498/