列出由 javac 编译的 Java 源文件



我有一系列小的Java项目(*.java文件中的类(,它们通过CLASSPATH引用大型代码存储库。代码存储库包含大量 *.java 文件(源文件(和一些 *.jar 文件。我想将任何给定的项目与其目录分开,以便打包和分发它。

给定一个包含 main 方法作为给定项目的起点的 Java 类,如何列出 CLASSPATH 上用于编译给定 Java 类的所有文件,例如 *.java 文件或 *.jar 文件?javac 可以在编译过程中生成包含足够详细信息的日志吗?您可以单独使用 Java API 并以编程方式检查用于编译的源文件吗?

javac 可以在编译过程中生成包含足够详细信息的日志吗?

javac具有-verbose选项,该选项为您提供了类路径上的JAR以及编译了哪些Java文件。

javac -verbose <filepath>

示例输出(编译 Dummy.java使用 Dummy2.java 和一些 JDK 类(:

[parsing started RegularFileObject[Dummy.java]]
[parsing completed 10ms]
[search path for source files: .]
[search path for class files: C:Program FilesJavajdk1.7.0_80jrelibresources.jar,C:Program FilesJavajdk1.7.0_80jrelibrt.jar,C:Program FilesJavajdk1.7.0_80jrelibsunrsasign.jar,C:Program FilesJavajdk1.7.0_80jrelibjsse.jar,C:Program FilesJavajdk1.7.0_80jrelibjce.jar,C:Program FilesJavajdk1.7.0_80jrelibcharsets.jar,C:Program FilesJavajdk1.7.0_80jrelibjfr.jar,C:Program FilesJavajdk1.7.0_80jreclasses,C:Program FilesJavajdk1.7.0_80jrelibextaccess-bridge-64.jar,C:Program FilesJavajdk1.7.0_80jrelibextdnsns.jar,C:Program FilesJavajdk1.7.0_80jrelibextjaccess.jar,C:Program FilesJavajdk1.7.0_80jrelibextlocaledata.jar,C:Program FilesJavajdk1.7.0_80jrelibextsunec.jar,C:Program FilesJavajdk1.7.0_80jrelibextsunjce_provider.jar,C:Program FilesJavajdk1.7.0_80jrelibextsunmscapi.jar,C:Program FilesJavajdk1.7.0_80jrelibextzipfs.jar,.]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/io/File.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/lang/Object.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/lang/String.class)]]
[checking Dummy]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/lang/AutoCloseable.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/net/URI.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/lang/System.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/io/PrintStream.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/io/FilterOutputStream.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/io/OutputStream.class)]]
[loading RegularFileObject[.Dummy2.java]]
[parsing started RegularFileObject[.Dummy2.java]]
[parsing completed 0ms]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/lang/StringBuilder.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/lang/CharSequence.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/io/Serializable.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/lang/Comparable.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/lang/AbstractStringBuilder.class)]]
[loading ZipFileIndexFileObject[C:Program FilesJavajdk1.7.0_80libct.sym(META-INF/sym/rt.jar/java/lang/StringBuffer.class)]]
[wrote RegularFileObject[Dummy.class]]
[checking Dummy2]
[wrote RegularFileObject[.Dummy2.class]]
[total 257ms]

最新更新