Instalando o Java no Ubuntu
1. Visão geral
Neste tutorial, apresentaremosdifferent methods for installing a JDK on Ubuntu. Em seguida, compararemos brevemente os métodos. Finalmente, mostraremos como gerenciar várias instalações Java em um sistema Ubuntu.
Como pré-requisito para cada método, precisamos
-
um sistema Ubuntu
-
estar logado como um usuário não root com privilégiossudo
As instruções descritas abaixo foram testadas no Ubuntu 18.10, 18.04 LTS, 16.04 LTS e 14.04 LTS. Para Ubuntu 14.04 LTS, existem algumas diferenças, que são mencionadas no texto.
Observe que os pacotes que você pode baixar do OpenJDK e Oracle e os pacotes disponíveis nos repositórios são atualizados regularmente. Os nomes exatos dos pacotes provavelmente serão alterados dentro de alguns meses, mas os métodos básicos de instalação permanecerão os mesmos.
2. Instalando JDK 11
Se queremos usar a versão mais recente e melhor do JDK, geralmente a instalação manual é o caminho a seguir. Isso significa baixar um pacote do OpenJDK ou do site da Oracle e configurá-lo de forma que ele siga as convenções de comoapt configura os pacotes JDK.
2.1. Instalando OpenJDK 11 manualmente
Em primeiro lugar, vamos baixar o arquivotar do recém-lançado OpenJDK 11:
$ wget https://download.java.net/java/ga/jdk11/openjdk-11_linux-x64_bin.tar.gz
E comparamos a soma desha256 do pacote baixado comthe one provided on the OpenJDK site:
$ sha256sum openjdk-11_linux-x64_bin.tar.gz
Vamos extrair o arquivotar:
$ tar xzvf openjdk-11_linux-x64_bin.tar.gz
Em seguida, vamos mover o diretóriojdk-11 que acabamos de extrair para um subdiretório de/usr/lib/jvm. Os pacotesapt descritos na próxima seção também colocam seus JDKs neste diretório:
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-11 /usr/lib/jvm/openjdk-11-manual-installation/
Agora, queremosmake the java and javac commands available. Uma possibilidade seria criar links simbólicos para eles, por exemplo, no diretório/usr/bin. Mas, em vez disso, instalaremos uma alternativa para ambos. Dessa forma, se quisermos instalar versões adicionais do JDK, elas funcionarão muito bem juntas:
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/openjdk-11-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/openjdk-11-manual-installation/bin/javac 1
Vamos verificar a instalação:
$ java -version
Como podemos ver na saída, realmente instalamos a versão mais recente do OpenJDK JRE e JVM:
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
Vamos dar uma olhada na versão do compilador também:
$ javac -version
javac 11
2.2. Instalando o Oracle JDK 11 manualmente
Se quisermos ter certeza de usar a versão mais recente do Oracle JDK, podemos seguir um fluxo de trabalho de instalação manual semelhante, como no OpenJDK. Para baixar o arquivotar para o JDK 11 emOracle website,we must accept a license agreement first. Por esse motivo, baixar viawget é um pouco mais complicado do que para OpenJDK:
$ wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/11.0.1+13/90cf5d8f270a4347a95050320eef3fb7/jdk-11.0.1_linux-x64_bin.tar.gz
O exemplo acima faz o download do pacote para 11.0.1 O link exato do download é alterado para cada versão secundária.
As etapas a seguir são as mesmas do OpenJDK:
$ sha256sum jdk-11.0.1_linux-x64_bin.tar.gz
$ tar xzvf jdk-11.0.1_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-11.0.1 /usr/lib/jvm/oracle-jdk-11-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle-jdk-11-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle-jdk-11-manual-installation/bin/javac 1
A verificação também é a mesma. Mas a saída mostra que, desta vez, não instalamos OpenJDK, mas Java ™:
$ java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
E para o compilador:
$ javac -version
javac 11.0.1
2.3. Instalando o Oracle JDK 11 a partir de um PPA
Atualmente, o Oracle JDK 11 também está disponível em um PPA (arquivo de pacote pessoal). Esta instalação envolve 2 etapas: adicionar o repositório ao nosso sistema e instalar o pacote do repositório viaapt:
$ sudo add-apt-repository ppa:linuxuprising/java
$ sudo apt update
$ sudo apt install oracle-java11-installer
As etapas de verificação devem mostrar o mesmo resultado que após a instalação manual na seção 2.2.1 .:
$ java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
E para o compilador:
$ javac -version
javac 11.0.1
No Ubuntu 14.04 LTS, o comandoadd-apt-repository não está disponível por padrão. Para adicionar um repositório, primeiro precisamos instalar o pacotesoftware-properties-common.
$ sudo apt update
$ sudo apt install software-properties-common
Depois, podemos continuar comadd-apt-repository, apt update andapt install como mostrado acima.
3. Instalando JDK 8
3.1. Instalação do OpenJDK 8 no Ubuntu 16.04 LTS e mais recente
O JDK 8 é uma versão LTS que já existe há algum tempo. Por esse motivo, podemos encontrar uma versão atualizada do OpenJDK 8 no repositório “Main” na maioria das versões suportadas do Ubuntu. Claro, também podemos ir para o site do OpenJDK, pegar um pacote lá e instalá-lo da mesma forma que vimos na seção anterior.
Mas usar as ferramentasapt e o repositório “Principal” oferece alguns benefícios. O repositório "Principal" está disponível por padrão em todos os sistemas Ubuntu. É apoiado pela Canonical - a mesma empresa que mantém o próprio Ubuntu.
Vamos instalar o OpenJDK 8 do repositório “Principal” comapt:
$ sudo apt update
$ sudo apt install openjdk-8-jdk
Agora, vamos verificar a instalação:
$ java -version
O resultado deve listar um Runtime Environment e uma JVM:
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-0ubuntu0.18.04.1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
Vamos verificar se o executáveljavac também está disponível:
$ javac -version
Agora devemos ver o mesmo número de versão, como mostrado acima:
javac 1.8.0_181
3.2. Instalação do OpenJDK 8 no Ubuntu 14.04 LTS
No Ubuntu 14.04 LTS, os pacotes OpenJDK não estão disponíveis no repositório “Principal”, então vamos instalá-los doopenjdk-r PPA. Como vimos na seção 2.3 acima, o comandoadd-apt-repository não está disponível por padrão. Precisamos do pacotesoftware-properties-common para isso:
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:openjdk-r/ppa
$ sudo apt update
$ sudo apt install openjdk-8-jdk
3.3. Instalando o Oracle JDK 8 a partir de um PPA
O repositório "Principal" não contém nenhum software proprietário. If we want to install Oracle Java with apt, we’ll have to use a package from a PPA. Já vimos como instalar o Oracle JDK 11 dolinuxuprising PPA. Para Java 8, podemos encontrar os pacotes nowebupd8team PPA.
Primeiro, precisamos adicionar o repositório PPAapt ao nosso sistema:
$ sudo add-apt-repository ppa:webupd8team/java
Então podemos instalar o pacote da maneira usual:
$ sudo apt update
$ sudo apt install oracle-java8-installer
Durante a instalação, temos que aceitar o contrato de licença da Oracle. Vamos verificar a instalação:
$ java -version
A saída mostra um Java ™ JRE e JVM:
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
Também podemos verificar se o compilador foi instalado:
$ javac -version
javac 1.8.0_181
4. Instalando o JDK 10
As versões Java 10 e Java 9 não são mais compatíveis. Você pode instalá-los manualmente, seguindo etapas semelhantes às da seção 2. Você pode pegar os pacotes em:
Ambos os sites contêm o mesmo aviso:
Essas versões mais antigas do JDK são fornecidas para ajudar os desenvolvedores a depurar problemas em sistemas mais antigos. They are not updated with the latest security patches and are not recommended for use in production.
4.1. Instalando OpenJDK 10 manualmente
Vamos ver como instalar o OpenJDK 10.0.1:
$ wget https://download.java.net/java/GA/jdk10/10.0.1/fb4372174a714e6b8c52526dc134031e/10/openjdk-10.0.1_linux-x64_bin.tar.gz
$ sha256sum openjdk-10.0.1_linux-x64_bin.tar.gz
$ tar xzvf openjdk-10.0.1_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-10.0.1 /usr/lib/jvm/openjdk-10-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/openjdk-10-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/openjdk-10-manual-installation/bin/javac 1
$ java -version
$ javac -version
4.2. Instalando o Oracle JDK 10 manualmente
Como vimos na seção 2.2., Para baixar um pacote do site da Oracle,we must accept a license agreement first. Ao contrário das versões suportadas, não podemos baixar os Oracle JDKs mais antigos por meio dewgete um cookie. Precisamos ir parahttps://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase10-4425482.htmle baixar o arquivotar.gz. Depois, seguimos as etapas familiares:
$ sha256sum jdk-10.0.2_linux-x64_bin.tar.gz
$ tar xzvf jdk-10.0.2_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-10.0.2 /usr/lib/jvm/oracle-jdk-10-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle-jdk-10-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle-jdk-10-manual-installation/bin/javac 1
$ java -version
$ javac -version
5. Instalando o JDK 9
5.1. Instalando o OpenJDK 9 manualmente
Assim como vimos acima com o OpenJDK 10.0.1, baixamos o pacote OpenJDK 9 viawgete configuramos de acordo com as convenções:
$ wget https://download.java.net/java/GA/jdk9/9.0.4/binaries/openjdk-9.0.4_linux-x64_bin.tar.gz
$ sha256sum openjdk-9.0.4_linux-x64_bin.tar.gz
$ tar xzvf openjdk-9.0.4_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-9.0.4 /usr/lib/jvm/openjdk-9-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/openjdk-9-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/openjdk-9-manual-installation/bin/javac 1
$ java -version
$ javac -version
5.2. Instalando o Oracle JDK 9 manualmente
Mais uma vez, usamos o mesmo método do JDK 10. Precisamos ir parahttps://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase9-3934878.htmle baixar o arquivotar.gz. Depois, seguimos as etapas familiares:
$ sha256sum jdk-9.0.4_linux-x64_bin.tar.gz
$ tar xzvf jdk-9.0.4_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-9.0.4 /usr/lib/jvm/oracle-jdk-9-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle-jdk-9-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle-jdk-9-manual-installation/bin/javac 1
$ java -version
$ javac -version
6. Comparação
Vimos três maneiras diferentes de instalar um JDK no Ubuntu. Vamos ter uma visão geral rápida de cada um deles, apontando as vantagens e desvantagens.
6.1. Repositório “Principal”
Este é o“Ubuntu native” way of installation. Uma grande vantagem é que atualizamos os pacotes através do “fluxo de trabalho normalapt” comapt updateeapt upgrade.
Além disso, o repositório “Principal” é mantido pela Canonical, queprovides reasonably fast (if not immediate) updates. Por exemplo, as versões 10.0.1 e 10.0.2 do OpenJDK foram sincronizadas dentro de um mês após o lançamento.
6.2. PPA
PPAs são pequenos repositóriosmaintained by an individual developer or a group. Isso também significa que a frequência da atualização depende do mantenedor.
Pacotes de PPAs são consideradosriskier than the packages in the “Main” repository. Primeiro, temos que adicionar o PPA explicitamente à lista de repositórios do sistema, indicando que confiamos nele. Depois, podemos gerenciar os pacotes por meio das ferramentas usuaisapt (apt updateeapt upgrade).
6.3. Instalação manual
Fazemos o download do pacote diretamente do site OpenJDK ou Oracle. Although this method offers a great deal of flexibility, updates are our responsibility. Se quisermos ter o melhor e mais recente JDK, este é o caminho a percorrer.
7. Explorando outras versões de JDKs
Os exemplos nas seções 2 e 3 refletem o status atual no Ubuntu 18.04 LTS. Lembre-se de que os JDKs e os pacotes correspondentes são atualizados regularmente. Portanto, é útil saber comoexplore our current possibilities.
Nesta seção, vamos nos concentrar em pesquisar os pacotes OpenJDK no repositório “Principal”. Se já adicionamos um PPA comadd-apt-repository, podemos explorá-lo de maneira semelhante comapt listeapt show.
Para descobrir quais PPAs estão disponíveis, podemos ir parahttps://launchpad.net/. Se não encontrarmos o que procuramos no repositório “Principal” e nos PPAs, teremos que voltar à instalação manual.
Se quisermos usar uma versão sem suporte, até isso pode ser difícil. No momento em que este livro foi escrito, não encontramos nenhum pacote para Java 9 ou Java 10 nos sites OpenJDK e Oracle.
Vamos ver quais outros pacotes JDK existem no repositório “Principal”:
$ apt list openjdk*jdk
No Ubuntu 18.04 LTS, podemos escolher entre as duas versões atuais do Java LTS:
Listing... Done
openjdk-11-jdk/bionic-updates,bionic-security,now 10.0.2+13-1ubuntu0.18.04.2 amd64 [installed,automatic]
openjdk-8-jdk/bionic-updates,bionic-security 8u181-b13-0ubuntu0.18.04.1 amd64
Também é importante notar que, embora o pacote seja chamadoopenjdk-11-jdk, no momento em que este livro foi escrito, ele na verdade instalou a versão 10.0.2. É provável que isso mude em breve. Podemos ver que, se inspecionarmos o pacote:
$ apt show openjdk-11-jdk
Vamos dar uma olhada na seção "Depende" da saída. Observe que esses pacotes (por exemplo, um JRE) também são instalados junto comopenjdk-11-jdk:
Depends: openjdk-11-jre (= 10.0.2+13-1ubuntu0.18.04.2),
openjdk-11-jdk-headless (= 10.0.2+13-1ubuntu0.18.04.2),
libc6 (>= 2.2.5)
Vamos explorar quais outros pacotes temos à nossa disposição além do pacote jdk padrão:
$ apt list openjdk-11*
Listing... Done
openjdk-11-dbg/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-demo/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-doc/bionic-updates,bionic-updates,bionic-security,bionic-security 10.0.2+13-1ubuntu0.18.04.2 all
openjdk-11-jdk/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-jdk-headless/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-jre/bionic-updates,bionic-security,now 10.0.2+13-1ubuntu0.18.04.2 amd64 [installed,automatic]
openjdk-11-jre-headless/bionic-updates,bionic-security,now 10.0.2+13-1ubuntu0.18.04.2 amd64 [installed,automatic]
openjdk-11-jre-zero/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-source/bionic-updates,bionic-updates,bionic-security,bionic-security 10.0.2+13-1ubuntu0.18.04.2 all
Podemos achar alguns desses pacotes úteis. Por exemplo,openjdk-11-source contém arquivos de origem para as classes da API Java principal, enquantoopenjdk-11-dbg contém os símbolos de depuração.
Além da famíliaopenjdk-*, existe o pacotedefault-jdk, que vale a pena explorar:
$ apt show default-jdk
No final da saída, a descrição diz:
"Este pacote de dependência aponta para o Java runtime, ou kit de desenvolvimento compatível com Java recomendado para esta arquitetura ..."
No caso do Ubuntu 18.04 LTS, é o pacoteopenjdk-11-jdk no momento.
8. Visão geral: versões e pacotes Java
Agora, vamos dar uma olhada em como diferentes versões do Java poderiam ser instaladas no Ubuntu 18.04 LTS até o momento em que este livro foi escrito:
Versão | OpenJDK | Oracle Java |
---|---|---|
11 |
instalação manual |
instalação manualoracle-java11-installer nolinuxuprising PPA |
10 |
instalação manual - não compatível |
instalação manual - não compatível |
9 |
instalação manual - não compatível |
instalação manual - não compatível |
8 |
openjdk-8-jdk no repositório “Principal” |
oracle-java8-installer nowebupd8team PPA |
9. Várias versões de Java em um sistema Ubuntu
A maneira padrão de gerenciar várias versões do mesmo software no Ubuntu é através do Sistema de Alternativas da Debian. Na maioria das vezes, criamos, mantemos e exibimos alternativas por meio do programaupdate-alternatives.
When apt installs a JDK package, it automatically adds the entries for the alternatives. No caso da instalação manual, vimos como adicionar as alternativas parajavaejavac respectivamente.
Vamos dar uma olhada em nossas alternativas:
$ update-alternatives --display java
Em nosso sistema de teste, onde instalamos duas versões diferentes do OpenJDK, a saída lista as duas alternativas com suas respectivas prioridades:
java - auto mode
link best version is /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link currently points to /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link java is /usr/bin/java
slave java.1.gz is /usr/share/man/man1/java.1.gz
/usr/lib/jvm/java-11-openjdk-amd64/bin/java - priority 1101
slave java.1.gz: /usr/lib/jvm/java-11-openjdk-amd64/man/man1/java.1.gz
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java - priority 1081
slave java.1.gz: /usr/lib/jvm/java-8-openjdk-amd64/jre/man/man1/java.1.gz
Agora que vimos nossas alternativas,we can also switch between them:
$ sudo update-alternatives --config java
Além disso, obtemos uma saída interativa, onde podemos alternar entre as alternativas via teclado:
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 manual mode
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
Press to keep the current choice[*], or type selection number:
Se estivermos trabalhando em vários aplicativos escritos em diferentes versões do Java, é provável que também precisemos de diferentes versões de outro software (por exemplo, Maven, algum servidor de aplicativos). Nesse caso, podemos considerar o uso de abstrações maiores, como contêineres do Docker.
10. Conclusão
Para resumir, neste artigo, vimos exemplos de instalação de um JDK do repositório "Principal", de um PPA e manualmente. Comparamos brevemente esses três métodos de instalação.
E, finalmente, vimos como gerenciar várias instalações Java no sistema Ubuntu comupdate-alternatives.
Como próximo passo, pode ser útil paraset the JAVA_HOME environment variable.