Switiching versão Java por sessão

5

Eu tenho uma combinação de Java7 e Java8 instalados na minha máquina 14.04.

Quando quero alternar entre eles, faço um sudo update-alternatives --config java . No entanto, alterá-lo dessa maneira altera a versão atual do Java em todos os terminais. Eu queria mudá-lo apenas para o terminal atual. Por exemplo, eu quero testar algum código Java escrito em 1.7 em relação a outro código, compilado em 1.8.

Outra alternativa seria fazer algo como

function java_use() {
   export JAVA_HOME=$(/usr/libexec/java_home -v )
   export PATH=$JAVA_HOME/bin:$PATH
   java -version
}

Mas isso funciona apenas no meu Mac e eu queria algo mais limpo, sem ter que modificar o PATH a cada vez. Talvez usando chroot ?

Como posso "limpar" a minha versão Java - preferivelmente apenas entre as versões instaladas - e somente para a sessão de terminal atual?

    
por Alexandre Santos 23.07.2015 / 17:42

1 resposta

3

Se você olhar para /usr/sbin/update-java-alternatives , verá que iterates /usr/lib/jvm/.*.jinfo para encontrar as versões instaladas, para que você possa fazer o mesmo para detectar as versões instaladas.

Quanto a não modificar PATH a cada vez, você pode contornar PATH completamente dizendo ao bash qual binário deve ser usado para java com o comando hash embutido (run help hash ).

Veja aqui algo sobre o que você pode construir:

java_use() {
    local file version versions=()
    for file in /usr/lib/jvm/.*.jinfo; do
        [[ -e $file ]] || continue
        version=${file##*/.} version=${version%.jinfo}
        versions+=("$version")
    done
    if (( ${#versions[@]} == 0 )); then
        printf >&2 'No java installed\n'
        return 1
    fi
    select version in "${versions[@]}"; do
        if [[ -n $version ]]; then
            export JAVA_HOME="/usr/lib/jvm/$version"
            hash -p "$JAVA_HOME/bin/java" java
            break
        fi
    done
    type java
}
    
por geirha 23.07.2015 / 18:08

Tags