我有一个关于编译一个在Jar文件(MyJar.jar
)中有一些依赖类的类的问题。通过将目录树放在-classpath选项中(例如:javac -cp MyJar MyClass.java
),是否会检查所有子目录的类或目录树中的顶级类?
提前谢谢。
答案 0 :(得分:1)
将对-cp
指定的目录进行递归搜索:否
当类加载器进入类路径中指定的目录时,它开始使用类所在的package
作为子目录。如果没有指定包,那么类加载器会将它放在目录的直接子节点(类文件)下。
这是-cp
目标/罐子和package name
的组合。
假设您有以下目录结构
+ 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
如果在与java源文件相同的目录中打开命令行,则必须编译类SayHelloMain
javac SayHelloMain.java -cp ..\..\..\..\sayhello.jar
或者如果在dierctory Project
javac dir\sub\com\test\SayHelloMain.java -cp sayhello.jar
假设您已在dierctory 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
。包只是在类
答案 1 :(得分:0)
如果你的目录树代表包,那么你的所有类都将被加载和使用。
例如,以下类:
package my.company.project;
public class MyClass {
public static void main(String[] args) {}
}
应该在 my / company / project 文件夹中可以使用。