我有一个关于在Jar文件(MyJar.jar)中编译具有某些依赖类的类的问题。通过将目录树放在-classpath选项中(例如:)javac -cp MyJar MyClass.java,是否将检查所有子目录中的类或仅检查目录树中的顶级类?提前致谢。
MyJar.jar
javac -cp MyJar MyClass.java
是否-cp会递归搜索指定的目录:否
-cp
当类加载器进入在类路径中指定的目录时,它将使用package该类所在的子目录开始。如果未指定包,则类加载器将其放在目录的直接子级(类文件)下。
package
它是-cp直接货币/罐和的组合package name。
package name
假设您具有以下目录结构
+ Project sayhello.jar + dir + sub + com + test SayHelloMain.java
该类的代码在哪里SayHelloMain.java( 请注意包声明 )
SayHelloMain.java
package com.test; import miscellaneous.so.SayHello; public class SayHelloMain { public static void main(String[] args) { SayHello.sayIt(); } }
和sayhello.jar包含该类的jar文件SayHello
sayhello.jar
SayHello
SayHelloMain如果在与Java源文件相同的目录中打开命令行,这就是编译类的方式
SayHelloMain
javac SayHelloMain.java -cp ..\..\..\..\sayhello.jar
或者如果在目录中打开了命令行 Project
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
com.test.SayHelloMain
命令
java -classpath dir;sayhello.jar com.test.SayHelloMain
将不会工作,因为dir未递归搜索目录
dir
java -classpath dir;sayhello.jar sub.com.test.SayHelloMain
由于没有这样的软件包,也将无法使用sub.com.test。包仅是在类的包声明中定义的包
sub.com.test