Java: как определить, что текущая среда выполнения java - это JRE или JDK?

У меня есть приложение Java, я хочу предоставить пользователю возможность компилировать исходный код Java (с использованием интерфейса JavaCompiler)

Если пользователь запускает приложение в JRE, мое приложение должно сообщить пользователю, что экземпляр JavaCompiler недоступен.

так как обнаружить JDK или JRE в Java-программе?


person CaiNiaoCoder    schedule 20.10.2011    source источник


Ответы (2)


Вы можете запросить реализацию JavaCompiler у ToolProvider. Если он возвращает null, реализация JavaCompiler недоступна:

JavaCompiler c = ToolProvider.getSystemJavaCompiler();
if (c == null) {
    // JRE
}
person axtavt    schedule 20.10.2011
comment
Я не уверен, работает ли это - кажется, что сам интерфейс JavaCompiler всегда доступен, но отличие JDK от JRE зависит от реализации. - person David Z; 20.10.2011
comment
он отлично работает, когда JDK установлен правильно, и javac можно найти в пути к классам. но что, если я хочу разрешить пользователю запускать его, даже если javac не может быть достигнут? все, что я хочу знать, это использую ли я JDK или JRE ... см. эту ссылку - это можно решить, если пользователь определит переменную окружения. но поскольку мне не нужен javac, я не хочу беспокоить пользователя этими дополнительными затратами на настройку ... - person gilad hoch; 10.10.2012
comment
Не работает с JDK7x64, уверены ли мы, что это все еще работает? - person spy; 02.05.2017