2011-10-20 9 views
6

Ho ottenuto un'applicazione Java, voglio fornire capacità all'utente di compilare il codice sorgente Java (Utilizzando l'interfaccia JavaCompiler)Java: come rilevare il runtime java corrente è un JRE o JDK?

Se l'utente esegue l'applicazione su un JRE, la mia domanda dovrebbe dire all'utente che la nessuna istanza JavaCompiler aviable.

così come rilevare JDK o JRE nel programma java?

risposta

11

È possibile richiedere un'implementazione di JavaCompiler da ToolProvider. Se restituisce null, non v'è alcuna implementazione di JavaCompiler disponibili:

JavaCompiler c = ToolProvider.getSystemJavaCompiler(); 
if (c == null) { 
    // JRE 
} 
+0

non sono sicuro se funziona - sembra che la 'interfaccia JavaCompiler' stessa è sempre a disposizione, ma la distinzione di JDK vs. JRE dipende su c'è una implementazione. –

+0

@David: aggiornato. – axtavt

+0

funziona perfettamente quando il JDK è installato correttamente e 'javac' si trova sul classpath. ma cosa succede se voglio consentire a un utente di eseguirlo, anche se non è possibile raggiungere 'javac'? tutto quello che voglio sapere è se sto correndo su JDK o JRE ... vedi [questo link] (http://www.java.net/node/688208) - può essere risolto se l'utente definisce la variabile d'ambiente . ma dato che non ho bisogno di 'javac', non voglio disturbare l'utente con questo overhead di configurazione extra ... –