Come dirigere un'app per utilizzare una versione Java specifica?

2

Ho ottenuto un'applicazione Java che fa esegue in Java 1.8 senza problemi quando avvio direttamente il suo JAR. Tuttavia sul mio Mac il JAR è racchiuso in un'app che richiede l'installazione di Java 1.6, cosa che davvero non voglio fare!

Quindi sto cercando il punto all'interno del pacchetto dell'app in cui posso configurare che la mia app utilizzi Java 1.8 installato

La modifica della proprietà InfoDictionary version in Contents/Info.plist in 8.0 non aiuta.

È possibile o è necessario creare un nuovo pacchetto di app completo? Nel caso del successivo, quale strumento sarebbe meglio fare questo per un gruppo di applicazioni?

    
posta Seven 01.09.2015 - 21:11
fonte

3 risposte

3

Questo potrebbe aiutare a trovare una risposta. Ricordando che PyCharm.app fa qualcosa di simile, ecco un estratto dal file Info.plist delle applicazioni (guarda ... le linee ... snip ...)

…snip…
<key>JVMOptions</key>
<dict>
  …snip…
  <key>JVMVersion</key>
  <!-- string>1.6*,1.7+</string -->
  <string>1.7+</string>
  …snip…
</dict>
…snip…

Inoltre, l'applicazione PaperCut Client (PCClient) utilizza alcuni elementi simili nella sua Info.plist :

<plist version="1.0">
  <dict>
    …snip…
    <key>CFBundleExecutable</key>
    <string>JavaAppLauncher</string>
    <key>JVMRuntime</key>
    <string>jre</string>
    <key>JVMMainClassName</key>
    <string>biz.papercut.pcng.client.uit.UserClient</string>
    <key>JVMOptions</key>
    <array>
      <string>-Dclient.home=$APP_ROOT/Contents/Resources/</string>
      <string>-Dcom.apple.macos.useScreenMenuBar=true</string>
      <string>-Xmx256m</string>
      <!-- Workaround since the icon parameter for bundleapp doesn't work -->
      <string>-Xdock:icon=$APP_ROOT/Contents/Resources/client-icon.icns</string>
    </array>
    <key>JVMArguments</key>
    <array/>
  </dict>
</plist>

Anche in questo caso, si tratta di parti di diversi Info.plist file, quindi potrebbero non funzionare come copia e incolla diritte. Tuttavia, entrambe le app funzionano su OS X, quindi queste chiavi / valori potrebbero aiutarti a restringere a una soluzione funzionante.

Entrambe le app sembrano avere un modo leggermente diverso di fare le cose. PCClient.app sembra includere la sua versione di Java, mentre PyCharm si basa su ciò che è installato su OS X.

    
risposta data 01.09.2015 - 22:26
fonte
1

Grazie a un post su SuperUser , sembra abbastanza semplice. Sembra che diverse versioni di Java possano essere chiamate da JRE di Apple:

/usr/libexec/java_home -v 1.6.0 --exec <Java command>

La mia comprensione è che questo non fornisce in realtà un JRE diverso, ma semplicemente fa sì che il JRE installato si identifichi come versione chiamata e implementa eventuali differenze minori tra le versioni. Altri dovrebbero sicuramente correggermi se questo non è il caso.

Per i tuoi scopi, sarebbe

/usr/libexec/java_home -v 1.6.0 --exec java -jar <yourJarHere>.jar

Il post collegato sopra indica anche che è possibile modificare il file chiamato /Applicazioni/yourApp.app/Contents/MacOS/yourApp per utilizzare il comando corretto in modo da non doverlo ridigitare o ricordare ogni volta.

Tutta questa cortesia Geff

    
risposta data 02.09.2015 - 21:26
fonte
1

Sembra che Oracle avrebbe potuto aggiustarlo. Ma non ...

Quindi ho funzionato ora facendo questo: (Tutti i crediti vanno a: link )

Suppongo che tu abbia installato l'ultimo JDK (attualmente 1.8.0_60, per favore aggiustalo in futuro)

Modifica il contenuto di Info.plist:

Apri il terminale e invia questo comando

sudo nano /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Info.plist

Cerca la chiave JVMCapabilities e modificala in questo modo:

<key>JVMCapabilities</key>
<array>
    <string>CommandLine</string>
    <string>JNI</string>
    <string>BundledApp</string>
</array>

Aggiungi un link simbolico per libjvm.dylib e libserver.dylib :

Apri Terminale ed emetti questi due comandi:

sudo mkdir -p /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bundle/Libraries
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bundle/Libraries/libserver.dylib
    
risposta data 15.10.2015 - 16:20
fonte

Leggi altre domande sui tag