1

我在我的程序中访问 VM 参数时遇到问题。我正在编写一个注释处理器,我想在其中访问一些 VM 参数。我正在使用 NETBeans IDE。我创建了注释处理器的 jar 文件,然后在另一个具有带有注释的 java 文件的项目中使用它。

现在在我的注释处理器项目中,在 IDE 中我将 VM 参数设置如下

-Dname="hello from VM"

并且在我尝试访问注释处理器的 process() 函数中

String property = System.getProperty("name");

System.out.println(property);

它打印空。我们可以在编译期间访问这些 VM 参数吗?因为注释处理器和带注释的类都在同一个 VM 中运行?谢谢

4

3 回答 3

1

我不知道从注释处理器访问系统属性的方法,但我认为注释处理器选项将支持您的用例。本质上,您希望getSupportedOptions在您的处理器中实现,通过 访问选项processingEnv.getOptions,并在命令行上使用 传递选项-Aname=value。也可以通过@SupportedOptions注释指定支持的选项。

于 2013-01-30T22:58:33.253 回答
0

这适用于我在 Windows 8.1 x64 和 Java 1.8.0_05 下的 Netbeans 8.0。我只能假设它最近已修复。

    Messager cm = processingEnv.getMessager();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
        System.getProperties().storeToXML(baos, "System Properties");
    }
    catch (IOException ex) {
        cm.printMessage(Kind.ERROR, "Exception while getting System properties as XML: " + ex.getMessage());
    }
    cm.printMessage(Kind.NOTE, "\System.properties XML:\n" + baos.toString());

这会给我

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>System Properties</comment>
<entry key="java.runtime.name">Java(TM) SE Runtime Environment</entry>
<entry key="java.vm.vendor">Sun Microsystems Inc.</entry>
...
</properties>

jbunting 的anwser(即使用 processingEnv.getOptions())对于将键值对干净地传递给注释处理器肯定更正确。

于 2014-08-26T15:11:32.440 回答
0

您可以将选项传递给javac使用运行的 JVM -J,因此

-J-Dname="hello from VM"

可能会做你需要的。

于 2013-01-30T23:08:13.253 回答