未だにJava 8でずっとやっていたのですが、いい加減にJava 9に移ろうかなと…。
対象のOSは、Ubuntu Linux 16.04 LTS。
とりあえず、「openjdk-9-jdk」パッケージをインストールしようとしてみます。
$ sudo apt-get install openjdk-9-jdk
ところが、このままだとこんなエラーで止まります。
openjdk-9-jdk:amd64 (9~b114-0ubuntu1) を展開しています... dpkg: アーカイブ /var/cache/apt/archives/openjdk-9-jdk_9~b114-0ubuntu1_amd64.deb の処理中にエラーが発生しました (--unpack): '/usr/lib/jvm/java-9-openjdk-amd64/include/linux/jawt_md.h' を上書きしようとしています。これはパッケージ openjdk-9-jdk-headless:amd64 9~b114-0ubuntu1 にも存在します 〜省略〜 処理中にエラーが発生しました: /var/cache/apt/archives/openjdk-9-jdk_9~b114-0ubuntu1_amd64.deb E: Sub-process /usr/bin/dpkg returned an error code (1)
なんか、ファイルを上書きできないみたいです…。
これを回避したい場合、「-o Dpkg::Options::="--force-overwrite"」オプションをつけて上書き可能にしてインストールすればよい模様。
$ sudo apt-get install -o Dpkg::Options::="--force-overwrite" openjdk-9-jdk
確認。
$ javac -version javac 9-internal $ java -version openjdk version "9-internal" OpenJDK Runtime Environment (build 9-internal+0-2016-04-14-195246.buildd.src) OpenJDK 64-Bit Server VM (build 9-internal+0-2016-04-14-195246.buildd.src, mixed mode)
もしくはGUI系のものが不要であれば、「openjdk-9-jdk-headless」にしてインストールすればよいかと。
$ sudo apt-get install openjdk-9-jdk-headless
現時点でのLTSであるOpenJDK 8もインストールしておきたい場合は、次のコマンドで。
$ sudo apt-get install openjdk-8-jdk
切り替えは、「update-alternatives」で。
$ sudo update-alternatives --config javac alternative javac (/usr/bin/javac を提供) には 2 個の選択肢があります。 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /usr/lib/jvm/java-9-openjdk-amd64/bin/javac 1091 自動モード 1 /usr/lib/jvm/java-8-openjdk-amd64/bin/javac 1081 手動モード 2 /usr/lib/jvm/java-9-openjdk-amd64/bin/javac 1091 手動モード 現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: #################################################################################################### $ sudo update-alternatives --config java alternative java (/usr/bin/java を提供) には 2 個の選択肢があります。 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /usr/lib/jvm/java-9-openjdk-amd64/bin/java 1091 自動モード 1 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 手動モード 2 /usr/lib/jvm/java-9-openjdk-amd64/bin/java 1091 手動モード 現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:
一応、簡単なプログラムも書いてみましょうか。
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.littlewings</groupId> <artifactId>hello-java9</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.source>1.9</maven.compiler.source> <maven.compiler.target>1.9</maven.compiler.target> </properties> </project>
「maven.compiler.source」と「maven.compiler.target」は、「1.9」みたいです。
src/main/java/org/littlewings/example/App.java
package org.littlewings.example; public class App { public static void main(String... args) { System.out.println("Hello World!!"); } }
実行。
$ mvn compile exec:java -Dexec.mainClass=org.littlewings.example.App Hello World!!
はい、と。