AdoptOpenJDKをパッケージで入れる

ここの情報によると、AdoptOpenJDKでようやくオフィシャルなRPMとDEBファイルが提供されるようになったらしい。というわけで、Ubuntu 18.04に入れてみる。

# wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add -
# echo deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ bionic main > /etc/apt/sources.list.d/adoptopenjdk.list
# apt-get update
# apt-get install adoptopenjdk-11-hotspot

という感じで簡単にインストールできる。

$ java -version
 openjdk version "11.0.3" 2019-04-16
 OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.3+7)
 OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.3+7, mixed mode)

デフォルトが変わらないようであれば

# update-alternatives --config java

をして切り替える。

Java9で日付のフォーマット変更

Java 11を真面目に使い始めて遭遇したのだが、Java 8まではDateFormat#getDateTimeInstanceで”M/d/yy h:mm a”のDateFormatが返ってきたけど、Java 9からは”M/d/yy, h:mm a”という感じで微妙にカンマが入る。ということで、今までどおりにパースはできない…。

JDK-8152154を見ると、-Djava.locale.providers=COMPAT,CLDR JI9032375 というオプションで前のも使えるらしい。

javadoc: error – The code being documented uses modules

Java 11を使ってmvn javadoc:javadocとしたときに

[ERROR] Exit code: 1 - javadoc: error - The code being documented uses modules but the packages defined in https://docs.oracle.com/javase/8/docs/api/ are in the unnamed module.

とか

[ERROR] Exit code: 1 - javadoc: エラー - ドキュメント化しようとしているコードではモジュールが使用されていますが、https://docs.oracle.com/javase/8/docs/api/で定義されているパッケージは名前のないモジュールのものです。

のようなエラーが出るときには、JavaDocの参照するJavaのソースコードのバージョンの問題なので、pom.xmlのjavadocプラグインで、sourceを次のようにして押しておく

      <plugin>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.0.1</version>
        <configuration>
          <encoding>UTF-8</encoding>
          <docencoding>UTF-8</docencoding>
          <charset>UTF-8</charset>
          <source>8</source>
        </configuration>
      </plugin>

TikaのLanguageDetector

Tikaには文字列を渡すと、その言語を渡してくれる機能がある。使うためにはまずpom.xmlに以下の依存関係を追加する。

                <dependency>
                        <groupId>org.apache.tika</groupId>
                        <artifactId>tika-langdetect</artifactId>
                        <version>1.20</version>
                </dependency>

あとは、LanguageDetectorを生成して利用する。

import java.io.IOException;

import org.apache.tika.langdetect.OptimaizeLangDetector;
import org.apache.tika.language.detect.LanguageDetector;
import org.apache.tika.language.detect.LanguageResult;

public class LanguageDetectorExample {

    public String detectLanguage(String text) throws IOException {
        LanguageDetector detector = new OptimaizeLangDetector().loadModels();
        LanguageResult result = detector.detect(text);
        return result.getLanguage();
    }
}

上記はTikaにあるexampleコードだが、OptimaizeLangDetectorをnewして、loadModels()でLanguageDetectorを取得する。あとはLanguageDetectorに言語判定したいテキストを渡せば言語情報が返ってくる。

まぁ、とはいえ、そこそこ判定が外れる気もする…。

Ubuntu 18.04でCorretto 11を使う

Corretto 11プレビューが公開されたので、使ってみることにする。まず、java-commonを入れておく

$ sudo apt-get update && sudo apt-get install java-common

次にここからCorrettoをダウンロードする。今回はjava-11-amazon-corretto-jdk_11.0.2.9-1_amd64.debをインストールする。

$ wget https://d2jnoze5tfhthg.cloudfront.net/java-11-amazon-corretto-jdk_11.0.2.9-1_amd64.deb
$ sudo dpkg --install java-11-amazon-corretto-jdk_11.0.2.9-1_amd64.deb

インストールすると設定されるので、以下で確認。

$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment Corretto-11.0.2.9.1 (build 11.0.2+9)
OpenJDK 64-Bit Server VM Corretto-11.0.2.9.1 (build 11.0.2+9, mixed mode)