我有一个关于编译在 Jar 文件 ( MyJar.jar
) 中有一些依赖类的类的问题。通过将目录树放在 -classpath 选项中(例如:)javac -cp MyJar MyClass.java
,将检查所有子目录的类还是只检查目录树中的顶级类?提前致谢。
问问题
1080 次
2 回答
1
-cp
将递归搜索指定的目录:否
当类加载器进入类路径中指定的目录时,它开始使用package
类所在的子目录作为子目录。如果未指定包,则类加载器将期望它位于目录的直接子项(类文件)下。
它是-cp
direcoties/jars 和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
以及包含该类的 jar 文件SayHello
SayHelloMain
如果在与 java 源文件相同的目录中打开命令行,这就是您必须编译类的方式
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
。包只是在类的包声明中定义的包
于 2013-02-28T10:09:40.820 回答
0
如果您的目录树代表包,那么您的所有类都将被加载并可用。
例如,下面的类:
package my.company.project;
public class MyClass {
public static void main(String[] args) {}
}
应该在文件夹my/company/project中才能使用。
于 2013-02-28T09:25:20.913 回答