特選汎用的Javaライブラリ

汎用的なJavaライブラリを特選するならという観点でまとめてみました。

joda-time:joda-time

便利な独自日時型を提供するライブラリ。Java8からはJRE標準ライブラリで同等な機能を持つjava.lang.LocalDateとLocalDateTimeが提供されてますが、 java.lang.Date型への変換が容易なために重宝します。特にHibernateActiveObjectsなどの主要なORMライブラリではjava.lang.Date型を必ず利用するため一緒に用いることが多いです。

org.projectlombok:lombok

Java特有の冗長的な記述をアノテーションを用いることで自動保管してくれるライブラリ。コンパイル時にアノテーションからJavaコードへ変換してくれるため、デプロイするアプリケーションサーバへライブラリを設置する手間や懸念を必要としません。

com.google.guava:guava

Javaの便利な型が揃うライブラリ。Collection系は総じて使用頻度が高いです。

com.google.code.gson:gson

Jsonデータを扱う上で便利なライブラリ。その特性上HTTP通信で用いられるため、HttpClientと一緒に利用します。

org.apache.httpcomponents:httpclient

HTTP通信を行う上で便利なライブラリ。Jsonデータでのやり取りならGsonと一緒に使えば幸せになれます。ちなみに以下はサンプルコード。

    public static void main( String[] args ) {
        try (val httpClient = HttpClients.createDefault()) {
            val request = new HttpPost("<url>");

            List<NameValuePair> postParams = Lists.newArrayList();
            postParams.add(new BasicNameValuePair("name", "any name");
            request.setEntity(new UrlEncodedFormEntity(postParams));

            val response = httpClient.execute(request);
            val content = new Gson().fromJson(EntityUtils.toString(response.getEntity()), Content.class);
        } catch (Exception e) {
            // Error procudure
    }

    /**
     * A content of response
     */
    @AllArgsConstructor
    public class Content {
        public String create_user;
        public String message;
        public String result;
        public String name;
    }

最後に

HTTP通信用のライブラリが汎用化どうかは議論の余地がありますが、WebアプリケーションでもAndroidでもHTTP通信は行うため汎用に含めました。Apache Commonsも使うには使いますが、意識的に使っているのはorg.apache.commons.lang3.tuple.Pairとorg.apache.commons.lang3.StringUtilsぐらいでしょうか。