2012-08-30 25 views
7

Sto scrivendo un'applicazione che utilizza lo jsvc per avviare un servizio Java come daemon. Ho bisogno di usare qualcosa come jsvc perché la mia applicazione utilizza porte sotto 1024 e ancora mi piacerebbe davvero non eseguirlo come root in modo che i file creati siano di proprietà di un altro utente. Mi piacerebbe anche mantenere le dipendenze e la configurazione al minimo in modo che tutto il client abbia bisogno di una JVM e del binario jsvc installato.Impossibile trovare Java home

Tuttavia, sembra che jsvc abbia un problema importante; non è possibile rilevare la cartella principale di Java su un dato sistema operativo Unix, che è abbastanza frustrante:

$ ./startup.sh 
Cannot locate Java home 

sono stato in grado di risolvere il problema su Ubuntu almeno impostando manualmente la directory home JVM:

jsvc ... -home /usr/lib/jvm/default-java/ ... 

esiste un modo per determinare la directory home Java dinamicamente da uno script Bash modo che io possa fare questo lavoro nella maggior parte dei sistemi Unix/versioni di Linux? Sarei in grado di dormire meglio la notte facendo qualcosa di simile:

JAVA_HOME="$(...)" 

jsvc ... -home "$JAVA_HOME" ... 

... piuttosto che hard-codifica per ogni singolo sistema operativo. C'è un modo che, dato un binario java, posso trovare la directory home della sua JVM/JRE?

+0

possibile duplicato di [Qual è l'obiettivo corretto per la variabile di envrionment JAVA_HOME per una distribuzione basata su Debian OpenJDK Linux?] (Http://stackoverflow.com/questions/663658/what-is-the-correct-target- for-the-java-home-envrionment-variable-per-a-linux-op) – paulsm4

+1

Non un duplicato; Sto cercando di localizzare Java in modo generico, non solo per le distribuzioni Debian ma anche per Red Hat, OSX e altri Linux/Unix. –

+0

Si prega di leggere il link SO. Soprattutto le parti su "update-java-alternative/update-alternative". – paulsm4

risposta

5

Non sono sicuro se questo funziona su * nix, ma ha trovato questa soluzione:

JAVA_HOME="$(readlink -f "$(which java)" | sed "s:bin/.*$::")" 

ho testato su Ubuntu e funziona, ma non funziona per OSX.

+0

Grazie amico, ha funzionato in CentOS 6.5 :) –

0

Usa dirname e which comandi per trovare directory bin di Java:

echo `dirname \`which java\`` 
JAVA_HOME=`dirname \`which java\`` 

... Funziona solo se Java è già sul $PATH.

+1

Che restituisce '/ usr/bin', che senza dubbio (e riproducibile) fallisce. Poiché 'which java' restituisce'/usr/bin/java', questo è quello che ottengo. –

3

La mia soluzione è stata la compilazione del sorgente di Linux native come pagina principale jsvc dice nel http://commons.apache.org/proper/commons-daemon//jsvc.html

Qui è la mia procedura passo passo

Scarica www.fightrice.com/mirrors/apache/commons/daemon /source/commons-daemon-1.0.13-src.tar.gz

Una volta estratto il file, andare a ...../commons-daemon-1.0.13-src/src/native/unix

in terminale come root do the foll grazie:

$ supporto/buildconf.sh

$ ./configure --with-java =/usr/lib/jvm/default-java

$ rendono

prova generato binario jsvc App

$ ./jsvc -help

funziona! pulito.

0

Un altro modo è:

type -p java 

aspettiamo che questo per tornare alla cartella di installazione di Java corretto.

Problemi correlati