【发布时间】:2014-12-18 06:51:30
【问题描述】:
是否有javac 的选项,比如--dry-run,它将指示编译器不进行实际编译,而是解析源文件并列出哪些.class 文件(包括包路径)会生成吗?
考虑这个例子:
$ cat example.java
package whatever.example;
class First {}
class Second {}
$ javac -d . example.java
$ find .
.
./example.java
./whatever
./whatever/example
./whatever/example/First.class
./whatever/example/Second.class
源文件被编译成两个.class 文件,并在指定-d 选项时生成了包结构。我想知道这些信息之前编译。像这样的:
$ javac --dry-run -d . example.java
./whatever/example/First.class
./whatever/example/Second.class
或者,如果javac 没有这样的选项,是否有任何第三方实用程序可以做这样的事情?
【问题讨论】:
-
我不知道有什么这样的选择——但考虑到它无论如何都要做很多工作,为什么不直接编译到一个临时目录呢?
-
编译到临时目录需要“解析结果”。使结果可靠最终将编写一个专门的实用程序。在这样做之前,我想知道我有哪些选择。
-
我不知道你所说的“解析结果”是什么意思——你只是在遍历目录树。这如何涉及解析?
-
那是“解析”这个词的奇怪用法,IMO。通常,人们会解析某种描述的数据流,将其从一种格式转换为另一种格式或对象……我绝对不会将“调用
FileAPI”称为解析操作。无论如何,总而言之,我不知道有什么可以做到这一点 - 也不希望这样做,因为它似乎是一个非常小众的用例。 -
我们还需要为 qbs 构建系统执行此操作。我最终为此使用了 Java 编译器 API(WIP):codereview.qt-project.org/160346