我是否可以构造一个 Java 源文件,以便在使用javac
(但不使用 调用java
)编译时运行任意代码?
或者我可以假设通过 运行任意源文件是安全的javac
吗?
我从来没有真正使用过这个特性,但是 javac 可以运行注释处理器——我相信这只是任意代码。处理器必须在处理器路径中,默认情况下只是用户类路径。因此,根据您的用例,我认为是的,这是一个需要注意的安全问题。您可能需要确保使用 禁用注释处理-proc:none
,或采取其他一些预防措施。
请参阅Javac 手册的注释处理部分。
javac
无论源文件如何设置,都无法执行 Java。它要做的就是将java文件编译成类文件。