2013-05-16 8 views
10

Sono responsabile di un'applicazione Java distribuita su più piattaforme incluso OS X. Con le versioni recenti dell'applicazione distribuiamo due bundle separati per OS X, uno che utilizza JavaApplicationStub fornito da Apple e un altro che include un pacchetto JDK 7 e utilizza un launcher prodotto in-house (una modifica del JavaAppLauncher di Oracle).In che modo Mac OS X determina che un'applicazione ha bisogno di Java?

Il problema è che, con quest'ultimo pacchetto, Mac OS X insiste ancora sul fatto che Java 6 sia installato se si tenta di eseguire l'applicazione. Nello specifico il messaggio dice:

"Per aprire (applicazione), è necessario un runtime di Java SE 6. Volete installarne uno ora?"

Se non si installa Java SE 6, non è possibile eseguire l'applicazione, nonostante JDK 7 sia in bundle (e, se si installa Java 6, viene comunque eseguito con Java 7 in dotazione).

Quello che sto cercando di capire è come OS X decide che l'applicazione richiede Java? Ho provato a rinominare il dizionario 'Java' nel file Info.plist e rinominare la sottocartella Java all'interno della cartella Risorse, senza successo. Qualcuno ha qualche idea? Sicuramente è possibile avere un'applicazione con un JDK in bundle senza richiedere l'installazione di un JDK di sistema?

+0

fa [questo] (http://stackoverflow.com/questions/14806709/application-is-using-java-6-from-apple-instead-of-java-7-from-oracle-on-mac- os-x) aiuto in qualche modo? – Gamb

+0

* "un altro che include un JDK 7 in dotazione" * DYM JRE 7? –

+0

Gamb, no. Non stiamo usando JavaAppLauncher da Apple. Il problema non è che sta funzionando con il JDK sbagliato, ma sta insistendo sul fatto che Java 6 sia installato. – davmac

risposta

2

Ho trovato la risposta (con l'aiuto di Mike Swingler sulla mailing list [email protected]).

La presenza del dizionario "Java" nel file Info.plist è ciò che attiva la finestra di dialogo, tuttavia, la modifica del nome del dizionario dopo aver tentato di avviare l'app non è sufficiente. Il sistema in qualche modo memorizza nella cache il requisito per Java e quindi semplicemente rilascia nuovamente la finestra di dialogo. Per evitare ciò è stato necessario scaricare una nuova copia dell'applicazione e apportare la modifica prima di provare a eseguirla per la prima volta (mi è stato detto da quando sarebbe stata sufficiente rinominare l'app, anche rinominandola e poi di nuovo quella originale) nome).

Fortunatamente, ciò significa che tutto ciò che dobbiamo fare è modificare il nome del dizionario "Java" e modificare il nostro programma di avvio personalizzato in modo che utilizzi il nuovo nome del dizionario.