2013-01-25 4 views
1

내 프로그램에서 VM 인수에 액세스하는 데 문제가 있습니다. 내가 몇 가지 VM 인수에 액세스하려는 주석 프로세서를 작성 중입니다. NETBeans IDE를 사용하고 있습니다. 주석 프로세서의 jar 파일을 만든 다음 주석이있는 Java 파일이있는 다른 프로젝트에서이 파일을 사용합니다.컴파일 타임에 VM 인수에 액세스

-Dname="hello from VM" 

및 주석 프로세서의 처리() 함수에서 다음과 같이 내가 그것을

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

System.out.println(property); 
에 액세스하려고 할 때 내가 VM 인수를 설정 IDE에서 내 주석 프로세서 프로젝트에 지금

,

null을 인쇄합니다. 컴파일 타임에 이러한 VM 인수에 액세스 할 수 있습니까? 주석 프로세서와 주석 클래스가 모두 동일한 VM에서 실행됩니까? 감사합니다.

+0

문제가 특수 효과와 어떤 관련이 있습니까? – Andremoniy

+0

중복 된 http://stackoverflow.com/questions/1490869/how-to-get-vm-arguments-from-inside-of-java-application? – Thirler

+0

@Thirler - 나는 링크를 보았다. 나는 그것들을 시도했지만 성공하지 못했다. 나는 컴파일 타임에 VM 인수에 액세스 할 수 있는지 확실하지 않으므로 액세스하려고하는 컨텍스트에 주석 처리를 언급했습니다. – yash6

답변

1

주석 처리기에서 시스템 속성에 액세스하는 방법을 모르지만 주석 처리기 옵션이 사용 사례를 지원한다고 생각합니다. 본질적으로 프로세서에 getSupportedOptions을 구현하고 processingEnv.getOptions을 통해 옵션에 액세스하고 명령 행에서 옵션을 -Aname=value으로 전달해야합니다. 지원되는 옵션은 @SupportedOptions 주석을 통해 지정 될 수도 있습니다.

0

당신은 너무

-J-Dname="hello from VM" 

가능성이 필요한 일을 할 수 -J를 사용하여 javac를 실행하는 JVM에 옵션을 전달할 수 있습니다.

0

이 기능은 Java 1.8.0_05가 설치된 Windows 8.1 x64에서 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을()) 깨끗하게하여 주석 프로세서에 키 - 값 쌍을 전달하기위한 확실히 더 정확합니다.

관련 문제