Que s'est-il passé dans «Java 8 to Java 11» et comment créer un environnement

Objectif de cet article

――Cet article s'adresse aux personnes qui sont absolument accros à la "création d'un environnement Java" et qui sont toujours déroutées par des informations complexes. ――Depuis 2017, Java est devenu un monde en évolution rapide. Conscient de cela, nous avons compilé les informations que nous avons étudiées afin de pouvoir comprendre les «idées fondamentales» et les «tendances importantes».


I. Histoire approximative

À propos du cycle de publication

―― Les versions de fonctionnalités sont fournies en mars et septembre chaque année, et les versions principales sont en cours de développement. Ex: Java9 => septembre 2017, Java10 => mars 2018, Java11 => septembre 2018, ...

image.png

"8 et au-delà"

--Java 8 est dans la position de "la dernière version avant le changement de modèle de publication". Java 8 lui-même est également ouvert et est soumis à LTS dans Oracle JDK.

Différenciation de la distribution

--Une série de tests appelés le kit de compatibilité technologique (TCK) sont fournis par la communauté OpenJDK (contrat avec Oracle) pour approuver la distribution. Les distributions qui réussissent TCK peuvent être appelées "compatibles Java SE"

Comment dois-je choisir?

――Il est réaliste de juger par l'état du support et l'écosystème entourant chaque distribution.

Cependant, il y a peu de différences notables à l'heure actuelle et il est difficile de choisir. Des fonctionnalités peuvent sortir à partir de maintenant.

II. Créer un environnement de développement local en 2020

Puisque la situation est celle décrite dans ~~ I, il n'y a pas de meilleur fixe, et il a tendance à devenir bientôt obsolète. ~~

=> SDKMAN! est la meilleure pratique actuelle. (Ajouté le 2020.1.10)

Ici, nous soulignons que "l'installation est terminée uniquement avec la ligne de commande" et "permet de basculer entre plusieurs versions", et les deux modèles de procédures de construction suivants sont illustrés:

--Modèle 1: SDKMAN! (Recommandé) --Modèle 2: Homebrew & jEnv

Modèle 1: installation par SDKMAN!

https://sdkman.io/

SDKMAN! Est le prédécesseur de GVM, l'outil de gestion multi-version de Groovy. Il gère plusieurs versions d'une grande variété d'outils, centrés sur le langage JVM et ses outils de construction.

Voir le fonctionnaire pour l'installation de SDKMAN! Après l'installation, l'installation de Java est terminée avec la commande suivante:

sdk install java      

La distribution installée actuellement est la version 11 d'Adopt Open JDK à partir de janvier 2020.

Pour les autres distributions, vous pouvez librement vérifier et basculer avec les trois sous-commandes list, ʻinstall et default`. Utilisez l'identificateur dans la liste pour spécifier la version et la distribution.

sdk list java

================================================================================
Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 AdoptOpenJDK  |     | 13.0.1.j9    | adpt    |            | 13.0.1.j9-adpt      
               |     | 13.0.1.hs    | adpt    |            | 13.0.1.hs-adpt      
               |     | 12.0.2.j9    | adpt    |            | 12.0.2.j9-adpt      
               |     | 12.0.2.hs    | adpt    |            | 12.0.2.hs-adpt      
               |     | 11.0.5.j9    | adpt    |            | 11.0.5.j9-adpt      
               | >>> | 11.0.5.hs    | adpt    | installed  | 11.0.5.hs-adpt      
               |     | 8.0.232.j9   | adpt    |            | 8.0.232.j9-adpt     
               |     | 8.0.232.hs   | adpt    |            | 8.0.232.hs-adpt     
 Amazon        |     | 11.0.5       | amzn    |            | 11.0.5-amzn         
               |     | 8.0.232      | amzn    |            | 8.0.232-amzn        
               |     | 8.0.202      | amzn    |            | 8.0.202-amzn        
 Azul Zulu     |     | 13.0.1       | zulu    |            | 13.0.1-zulu         
               |     | 12.0.2       | zulu    |            | 12.0.2-zulu  
       
...(Omission)...         

 SAP           |     | 12.0.2       | sapmchn |            | 12.0.2-sapmchn      
               |     | 11.0.4       | sapmchn |            | 11.0.4-sapmchn      
================================================================================

Lors de l'installation du deuxième JDK et des suivants, vous serez invité à définir cette distribution par défaut.

sdk install java 13.0.1-open # Oracle OpenJDK 13

Downloading: java 13.0.1-open

...(Omission)...

Installing: java 13.0.1-open
Done installing!

Do you want java 13.0.1-open to be set as default? (Y/n): Y

Setting java 13.0.1-open as default.

Si vous le définissez sur la valeur par défaut, la version Java basculera à ce stade. Pas besoin de définir un chemin. Essayez de vérifier le démarrage de jshell.

jshell
|Bienvenue dans JShell--Version 13.0.1
|Pour un aperçu, tapez: /help intro
jshell>

jshell est un Java REPL ajouté à partir de Java 9. Vous le connaissez peut-être dans d'autres langues, mais il est utile pour une petite vérification de fonctionnement de l'API standard. Vous pouvez quitter avec / exit, alors revenez en arrière et réessayez.

sdk default java 11.0.5.hs-adpt

Default java version set to 11.0.5.hs-adpt
jshell
|Bienvenue dans JShell--Version 11.0.5
|Pour un aperçu, tapez: /help intro
jshell>

J'ai pu confirmer que la version avait changé.

Modèle 2: Installation par Homebrew & jEnv

Modèle 2: Installation par Homebrew et jEnv

  • Comparé à SDKMAN!, Il est plus compliqué et déconseillé. Cela peut être une référence pour savoir comment la passe est passée au verso *

** Installation JDK avec Homebrew **

https://brew.sh/index_ja

  • Relativement récemment (probablement en novembre 2019), ʻopenjdka été ajouté à Formulas. Par conséquent, il peut être installé avecbrew install open jdk`.
  • La distribution installée actuellement est Oracle Open JDK.
  • Si vous devez installer Java 8 ou une version antérieure, ou si vous souhaitez utiliser une autre distribution, vous utiliserez actuellement Homebrew Cask (non inclus dans cet article). --Supported Formulas est rapide à trouver ici => https://formulae.brew.sh/formula/

Vous remarquerez une mise en garde (avertissement) si l'installation réussit. Ce qui suit est le message lorsque je l'ai essayé avec Catalina + zsh.

==> Pouring openjdk-13.0.1+9.catalina.bottle.tar.gz
==> Caveats
For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

openjdk is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have openjdk first in your PATH run:
  echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc

C'est écrit à la légère, mais chaque paragraphe est important. Selon l'environnement, les détails du message et les actions à entreprendre peuvent différer.

For the system Java wrappers to find this JDK, symlink it with...

On ne sait pas à quoi se réfèrent les "enveloppeurs Java système", mais il est nécessaire de créer des liens symboliques pour pouvoir utiliser la commande java_home décrite plus loin.

openjdk is keg-only, which means it was not symlinked into /usr/local,...

Cela signifie qu'il n'est pas lié symboliquement sous / usr / local, ce qui signifie que taper java dans le terminal à ce stade ne signifie pas que l'OpenJDK installé ici fonctionnera immédiatement.

If you need to have openjdk first in your PATH run:...

Pour que l'OpenJDK installé ici soit recherché en premier comme chemin, le chemin doit être ajouté au démarrage du shell.

Cependant, cette fois, c'est une politique de gérer plusieurs versions de JDK avec un autre outil, évitez donc d'écrire le chemin Java directement dans ~ / .zshrc.

Dans cet esprit, créez simplement le lien symbolique recommandé par le premier message:

sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

Cela devrait permettre aux commandes suivantes de fonctionner:

java --version

openjdk 13.0.1 2019-10-15
OpenJDK Runtime Environment (build 13.0.1+9)
OpenJDK 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
/usr/libexec/java_home

/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home

** Inscrivez-vous avec jEnv **

http://www.jenv.be/

Un outil qui facilite la gestion de plusieurs versions du JDK, comme pyenv. La procédure d'installation sera officiellement remise. Après avoir exécuté brew install, vous devez passer le chemin.

Par exemple, avec pyEnv, vous pouvez installer Python avec des commandes telles que pyenv install 3.5.0. Cependant, comme vous pouvez le voir à partir des opérations jusqu'à présent, jEnv lui-même n'a pas la fonction de télécharger le JDK. La commande jenv add requiert" le chemin complet vers JAVA_HOME du JDK téléchargé" comme argument. Ce chemin peut être référencé avec la commande java_home mentionnée ci-dessus.

/usr/libexec/java_home

/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home

Ensuite, vous pouvez utiliser ceci pour ajouter le JDK à jEnv:

jenv add `/usr/libexec/java_home`

openjdk64-13.0.1 added
13.0.1 added
13.0 added

** Plusieurs versions installées **

À partir de l'état ci-dessus, par exemple, si vous souhaitez installer en plus Oracle Open JDK 11, la procédure est la suivante:

# 1.Installez le JDK
brew install openjdk@11

# 2.Créer un lien symbolique sous JavaVirtualMachines
# (Copiez la commande qui apparaît à l'invite pendant l'installation de l'infusion)
sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk

# 3.Ajouter à la gestion jEnv
jenv add `/usr/libexec/java_home -v 11`

Vérifiez que jEnv peut gérer plusieurs versions et vérifiez le démarrage de jshell.

jenv versions

* system
  11.0
  11.0.5
  13.0
  13.0.1
  openjdk64-11.0.5
  openjdk64-13.0.1

Définissez la version sur 13.

jenv global 13.0 

jenv versions

  system
  11.0
  11.0.5
* 13.0
  13.0.1
  openjdk64-11.0.5
  openjdk64-13.0.1
jshell
|Bienvenue dans JShell--Version 13.0.1
|Pour un aperçu, tapez: /help intro
jshell>

Puis changez de version et essayez la même chose.

jenv global 11.0

jenv versions

  system
* 11.0
  11.0.5
  13.0
  13.0.1
  openjdk64-11.0.5
  openjdk64-13.0.1
jshell
|Bienvenue dans JShell--Version 11.0.5
|Pour un aperçu, tapez: /help intro

J'ai pu confirmer que la version avait changé.

Si vous faites jusqu'à présent, vous pouvez dire qu'il s'agit d'un environnement de développement local qui peut gérer l'ajout de distributions et de versions dans une certaine mesure.

III. Sources et URL de référence

En raison du contexte décrit ci-dessus, les informations auxquelles les développeurs doivent se référer dépendent de la distribution sélectionnée.

Ce serait bien de trouver une page qui vous donne une vue transversale de la situation actuelle, mais pour l'instant c'est une bonne idée de se référer d'abord à la feuille de route officielle d'Oracle, qui dirige le développement de l'OpenJDK.

Feuille de route du support Oracle Java SE https://www.oracle.com/technetwork/jp/java/eol-135779-ja.html

Dans certains cas, des fournisseurs tels que Red Hat publient leurs cycles de vie et politiques de distribution.

OpenJDK Life Cycle and Support Policy https://access.redhat.com/articles/1299013

Autre URL de référence

(Cet article est principalement constitué d'extraits et de résumés des articles suivants, donc si vous voulez en savoir plus en profondeur!)

À propos du nouveau modèle de version et de l'offre de licence de JDK https://www.oracle.com/technetwork/jp/articles/java/ja-topics/jdk-release-model-4487660-ja.html

Project Jigsaw https://openjdk.java.net/projects/jigsaw/

Que choisir pour le futur JDK? Comment choisir (v1.2) https://www.slideshare.net/TakahiroYamada3/how-to-choose-jdk-20191101 (Ajouté le 09/03/2020. Merci @yamadamn)

Comment choisir la meilleure distribution OpenJDK https://www.slideshare.net/TakahiroYamada3/how-to-choose-the-best-openjdk-distribution-201905

Résumé à expliquer le plus facilement possible à ceux qui se trompent en "Java payé" https://togetter.com/li/1343743

OpenJDK - Wikipedia https://ja.wikipedia.org/wiki/OpenJDK

Oracle JDK vs. OpenJDK builds comparison https://devexperts.com/blog/oracle-jdk-vs-openjdk-builds-comparison/

Recommended Posts

Que s'est-il passé dans «Java 8 to Java 11» et comment créer un environnement
Comment installer le langage utilisé dans Ubuntu et comment créer l'environnement
Comment changer la version Java et l'exécuter dans un environnement où Java ne peut pas être installé librement
Comment résoudre les problèmes d'expression en Java
[Rails] Comment créer un environnement avec Docker
Comment créer un fichier exécutable dans Maven
Comment créer un environnement Java en seulement 3 secondes
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment créer un environnement de développement Java avec VS Code
Comment apprendre JAVA en 7 jours
Comment appeler et utiliser l'API en Java (Spring Boot)
Comment utiliser les classes en Java?
Comment nommer des variables en Java
Comment développer et enregistrer une application Sota en Java
Différences dans la gestion des chaînes entre Java et Perl
Comment concaténer des chaînes avec Java
[Java] Comment utiliser les modificateurs statiques (Que sont l'importation statique finale et statique)
Comment créer une application Apache Flink à partir de zéro en 5 minutes
Comment obtenir la longueur d'un fichier audio avec Java
Comment implémenter le calcul de la date en Java
Comment implémenter le filtre de Kalman par Java
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Comment faire une conversion de base en Java
[Java] Comment sortir et écrire des fichiers!
Comment créer SquashTM et comment prendre en charge le japonais
Comment appliquer les conventions de codage en Java
Comment intégrer Janus Graph dans Java
Comment obtenir la date avec Java
Comment utiliser les variables d'environnement dans RubyOnRails
De Java à C et de C à Java dans Android Studio
Comment créer un environnement Rails 6 avec Docker
Comment tester une méthode privée et la simuler partiellement en Java
Comment créer un environnement pour n'importe quelle version de Ruby en utilisant rbenv
Comment créer une application avec un mécanisme de plug-in [C # et Java]
Comment créer votre propre annotation en Java et obtenir la valeur
Essayez de créer un environnement Java 8 sur Amazon Linux2
Résolution d'une erreur survenue lors de la tentative d'utilisation de Spark dans un environnement où Java 8 et Java 11 coexistent
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
Je souhaite envoyer un e-mail en Java.
Comment afficher une page Web en Java
Comment installer Titan 2D (v4.2.0) dans un environnement virtuel
Comment obtenir une classe depuis Element en Java
Créer un environnement de test E2E avec Selenium (Java)
Comment masquer les champs nuls en réponse en Java
Rails6.0 ~ Comment créer un environnement de développement respectueux de l'environnement
Comment obtenir et étudier Java SE8 Gold
Comment créer une API avec GraphQL et Rails
Comment créer des outils de parquet et fusionner des fichiers Parquet
Comment créer un environnement Pytorch sur Ubuntu
Comment créer la blockchain la plus simple de Ruby
Comment écrire Java String # getBytes dans Kotlin?
[Rails] Comment utiliser PostgreSQL dans l'environnement Vagrant
Comment accéder aux méthodes et champs Java Private
[Java] Comment utiliser la classe Calendar et la classe Date
Comment concaténer des chaînes séparées par des virgules à l'aide de StringJoiner même dans un environnement Java7
Comment envoyer des métriques et des événements personnalisés à datadog avec laravel dans l'environnement docker-compose