2017-12-05 16 views
3

Eclipse의 프로젝트에서 WITH SYSTEM JRE 9을 실행 중입니다. Java 컴파일러를 JDK 9로 설정하려고 할 때 null이 발생합니다.JDK 9에서 ToolProvider.getSystemJavaCompiler()가 null을 반환합니다.

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk-9.0.1"); 
System.out.println(System.getProperty("java.home")); // print C:\Program Files\Java\jdk-9.0.1 
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); // returns null 

이 코드는 이전 JDK 8 잘 작동

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.8.0_152"); 
System.out.println(System.getProperty("java.home")); // print C:\Program Files\Java\jdk1.8.0_152 
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); // returns compiler 

이 ToolProvider.getSystemJavaCompiler 요구 사항이 어떻게 작동하는지에 대한 변경이있는 (JRE 8에서 실행)?

업데이트 : 내가 JDK 9에서 내 프로젝트를 실행하는 경우가 getSystemJavaCompiler()하지만 중요한 확실하지가 대응 경로를 변경 JRE 9

+0

물론 JRE만으로는 작동하지 않습니다. 나는 이것이 JRE 8로 시작하고'java.home'을 JDK 8 디렉토리로 바꿀 때 이것이 작동한다고 말했다. 이해가 안되는 점은 JRE9 - JDK9 쌍에 대한 작동이 중지된다는 것입니다. – vda8888

+0

@ vda8888 with JRE9는'... jdk-9.0.1.jdk \\ Contents \\ Home'의 경로를 설정합니까? – nullpointer

+2

시스템 프로퍼티'java.home'가이 기능과 관련이 있다고 명시된 적이 없습니다. 따라서 변경된 이전 Java 버전의 구현 세부 사항을 사용하고있었습니다. 'ToolProvider' API의 모든 목적은 컴파일러에 접근하기위한 구현 세부 사항의 사용을 중단하는 것입니다. 왜 이러는거야? Eclipse의 Launch Configuration에서 jdk를 지정하여 jdk로 애플리케이션을 실행하면 어떨까요? – Holger

답변

2

반대 (java.home에 변화가 더 이상 필요) 잘 작동하지 않습니다 나를 위해 유닉스 /Contents/Home에 작품 :

System.setProperty("java.home", 
        "/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/"); 

에서 모든 속성을 설정하는 필요가있을 것 같지 않지만. 코드의 다음 줄부터도 독립적으로 미세뿐만 아니라 실행 : JDK9 Home 디렉토리를 가리 키도록 설정 내 시스템에 JAVA_HOME

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

합니다.

+1

참고로, OP는 그의 코드를 JRE9가 아니라 JDK9가 아니라 – ZhekaKozlov

+0

@ZhekaKozlov 예, 코드가'C : \\ Program Files \\ Java \\ jdk-9.0.1'을 읽으므로 조금 혼란 스럽습니다. – nullpointer