java - 列出javac编译的Java源文件
问题描述
我有一系列通过 CLASSPATH 引用大型代码存储库的小型 Java 项目(*.java 文件中的类)。代码存储库包含大量 *.java 文件(源文件)和一些 *.jar 文件。我想将任何给定的项目与其目录分开,以便打包和分发它。
给定一个包含作为给定项目起点的 main 方法的 Java 类,如何列出 CLASSPATH 中用于编译给定 Java 类的所有文件,例如 *.java 文件或 *.jar 文件?javac可以在编译过程中生成详细的日志吗?你能单独使用 Java API 并以编程方式检查用于编译的源文件吗?
解决方案
javac可以在编译过程中生成详细的日志吗?
javac
可以-verbose
选择哪些 JAR 在类路径上以及哪些 Java 文件已编译。
javac -verbose <filepath>
示例输出(编译使用 Dummy2.java 和一些 JDK 类的 Dummy.java):
[parsing started RegularFileObject[Dummy.java]]
[parsing completed 10ms]
[search path for source files: .]
[search path for class files: C:\Program Files\Java\jdk1.7.0_80\jre\lib\resources.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\rt.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\sunrsasign.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\jsse.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\jce.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\charsets.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\jfr.jar,C:\Program Files\Java\jdk1.7.0_80\jre\classes,C:\Program Files\Java\jdk1.7.0_80\jre\lib\ext\access-bridge-64.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\ext\dnsns.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\ext\jaccess.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\ext\localedata.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\ext\sunec.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\ext\sunjce_provider.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\ext\sunmscapi.jar,C:\Program Files\Java\jdk1.7.0_80\jre\lib\ext\zipfs.jar,.]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/io/File.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Object.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/lang/String.class)]]
[checking Dummy]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/lang/AutoCloseable.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/net/URI.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/lang/System.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/io/PrintStream.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/io/FilterOutputStream.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.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 Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/lang/StringBuilder.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/lang/CharSequence.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/io/Serializable.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Comparable.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/lang/AbstractStringBuilder.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0_80\lib\ct.sym(META-INF/sym/rt.jar/java/lang/StringBuffer.class)]]
[wrote RegularFileObject[Dummy.class]]
[checking Dummy2]
[wrote RegularFileObject[.\Dummy2.class]]
[total 257ms]
推荐阅读
- javascript - 如何修复 RichEmbed Discord.js
- jquery - jQuery ajax 在 ajax 结果中查找匹配项
- sql - MS SQL SERVER 在从池中获取连接之前经过的超时时间
- r - 转换 Python 列表并将其存储在 R 环境中。所以我可以使用 rpy2.objects.r() 访问列表
- elasticsearch - 具有过滤器匹配的 Elasticsearch 聚合
- video-streaming - 视频流在几秒钟后冻结,但声音正常
- sql - 包括存在数据的指标,但不包括在结果中
- amazon-web-services - Packer 可以在本地构建 AMI(即,不连接到 AWS)吗?
- python - 舍入包含数字和字符串的数据框中的所有数字?
- javascript - Nuxtjs toastr 和数据表插件在 adminLTE - 3 模板中不起作用