1

プログラムで VM 引数にアクセスする際に問題があります。いくつかの VM 引数にアクセスしたい注釈プロセッサを作成しています。NETBeans IDE を使用しています。注釈プロセッサの jar ファイルを作成し、それを注釈付きの Java ファイルを持つ別のプロジェクトで使用します。

私の注釈プロセッサプロジェクトでは、IDEでVM引数を次のように設定しました

-Dname="hello from VM"

そして、アクセスしようとすると、注釈プロセッサの process() 関数で

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

System.out.println(property);

null を出力します。注釈プロセッサと注釈付きクラスの両方が同じ 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 に答える