이 문제와 관련된 모든 게시물을 읽었으므로 아무런 해결책이 없지만 항상 null
이됩니다.
JRE를 사용하고 lib 디렉토리에 tools.jar를 넣고 빌드 경로에 추가했지만 Eclipse로 건너 뛰고 싶을 때 rt.jar (?) 내가 전혀하지 않는 것 알다.
그 이유가 내가 null
이 될 수 있습니까? 어떻게 올바르게 구성 할 수 있습니까?
null을 반환하는 getSystemJavaCompiler()
의 기준은 무엇입니까?ToolProvider.getSystemJavaCompiler()는 항상 jdk를 사용하여 null을 반환합니다.
0
A
답변
1
은 JRE는 자바 런타임 환경입니다. 컴파일러가 없으므로 null
이됩니다. 본격적인 JDK를 사용하면 null이 아닌 결과를 얻게됩니다.
0
문제점에 대한 해결책을 찾았습니다. 처음에는 jre를 다시 사용했습니다. tools.jar을 응용 프로그램의 lib 디렉토리에 넣습니다.
ToolProvider.getSystemJavaCompiler() return null.
이렇게하여 JavaCompiler를 얻을 수있는 해결 방법은 다음과 같습니다
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
if (compiler == null){
try {
Class<?> javacTool = Class.forName("com.sun.tools.javac.api.JavacTool");
Method create = javacTool.getMethod("create");
compiler = (JavaCompiler) create.invoke(null);
} catch (Exception e) {
throw new AssertionError(e);
}
의 rt.jar 자바의 기본 내용을 많이 포함되어 있습니다. – Nathan
[Java 컴파일러 API를 사용하는 동안 [null 포인터 예외]의 가능한 복제본 (https://stackoverflow.com/questions/2543439/null-pointer-exception-while-using-java-compiler-api) – Joe
나는 그 rt.jar을 알고있다. 사전 컴파일 된 Java 클래스를 포함하지만 jdk의 내용을 포함해서는 안됩니다. rt.jar의 클래스가 작동하지 않는 클래스 만 null을 반환합니까? – Tokra