Apache Commons の概要

もちろん、歴史から始めましょう!

すべては 1999 年に、Apache Software Foundation (ASF) を代表する「Apache Group」の登録から始まりました。この財団が支援したプロジェクトは、1995 年から 1999 年にかけて作成された Apache HTTPD Web サーバーでした。

同じことが、Sun Microsystems、IBM、Oracle、および Apache のチームの協力の結果として登場した Jakarta Project (ジャカルタ プロジェクト) でした。そして 2001 年、開発チームは作業中に、同じ機能を作成することが多く、場合によっては相互にコピーするだけであることに気づきました。このようなコードはボイラープレートと呼ばれます。彼らは開発者に役立つ大量のコードを収集することに成功しましたが、それを保存するライブラリがありませんでした。

こうして、Jakarta Commons プロジェクトが誕生し、Java コンポーネントが (主に既存のコードに基づいて) 追加されました。このプロジェクトは後に Apache Commons に名前変更されました。

より広義には、Apache Commons は「小さな Java ユーティリティの大きなコレクション」です。多くのオープンソース プロジェクトで使用されています。

Apache Commons ユーティリティは、Apache Tomcat、Struts、Hibernate などのプロジェクトの中心です。

もちろん、ビルド システム (Maven、Gradle) を使用せずに、これらすべてを手動で接続することもできますが、ここではこれを行わず、単にプロジェクトに追加するだけです。

Maven を使用するには、まず適切な依存関係を追加します。

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>${apache.common.version}</version>
</dependency>

${apache.common.version}は、このライブラリのバージョンです。

Gradle (Groovy) の場合:

implementation 'org.apache.commons:commons-lang3:3.12.0'

人気の Apache Commons ライブラリ

最もよく使用されるクラスとメソッドのリストは次のとおりです。

Apache Commons:Lang

このライブラリには次のパッケージが含まれています。


Packages
org.apache.commons.lang
org.apache.commons.lang.builder
org.apache.commons.lang.enum
org.apache.commons.lang.enums
org.apache.commons.lang.exception
org.apache.commons.lang.math
org.apache.commons.lang.mutable
org.apache.commons.lang.reflect
org.apache.commons.lang.text
org.apache.commons.lang.time

ここでは、文字列、リフレクション、シリアル化、オブジェクト、システムを簡単かつ迅速に操作できます。最もよく使用されるメソッドに注目してみましょう。

文字列ユーティリティ

文字列を操作するための膨大な数のメソッド。

  • is(Not)Blank/Empty(String) - このタイプのチェックのことは忘れましょう: if (s!=null && s.trim().length()>0)、ここに適切な代替手段があります。

StringEscapeUtils

  • (un)escapeSql(String) - PreparedStatmentを置き換えます
  • (un)escapeHtml(String) - HTML からの値を処理します

ToStringBuilder

  • reflectionToString(Object) は、リフレクションに基づいたtoString()の実装です。リフレクションを使用してフィールドを削除すると、メソッドの結果が変わります。

EqualsBuilder と HashCodeBuilder

  • reflectionEquals/HashCode(Object)は、自動生成の優れた代替品であり、独自の利点があります。これら 2 つのメソッドは、フィールドの追加など、操作中のオブジェクトの構造変更を考慮します。

例外ユーティリティ

  • getFullStackTrace(Throwable) - StackTrace 全体を文字列として出力します。

Apache Commons: コレクション

Packages
org.apache.commons.collections4
org.apache.commons.collections4.bag
org.apache.commons.collections4.bidimap
org.apache.commons.collections4.collection
org.apache.commons.collections4.comparators
org.apache.commons.collections4.functors
org.apache.commons.collections4.iterators
org.apache.commons.collections4.keyvalue
org.apache.commons.collections4.list
org.apache.commons.collections4.map
org.apache.commons.collections4.multimap
org.apache.commons.collections4.multiset
org.apache.commons.collections4.properties
org.apache.commons.collections4.queue
org.apache.commons.collections4.sequence
org.apache.commons.collections4.set
org.apache.commons.collections4.splitmap
org.apache.commons.collections4.trie
org.apache.commons.collections4.trie.analyzer

Java SE Collections Frameworkを完全に補完するライブラリです。

CollectionUtils は、コレクションを便利に操作するためのクラスです。

    filter/find(Collection, Predicate) - 述語によるフィルタリングと検索 forAllDo(Collection, Closure) - 各要素の Closure を実行しますが、このメソッドは非推奨ですIterator.forEach() is(Not)Empty(Collection) - を使用します。isEqualCollection(Collection, Collection)を呼び出す前に null をチェックしない - 2 つのコレクションを比較するのに役立ちます

実用性の異なるさまざまなレベルのクラスが他にも多数あります。ここと以下に、純粋に私の場合に最も一般的に使用されるものをリストします。

Apache Commons:IO

Packages
org.apache.commons.io
org.apache.commons.io.comparator
org.apache.commons.io.file
org.apache.commons.io.file.spi
org.apache.commons.io.filefilter
org.apache.commons.io.function
org.apache.commons.io.input
org.apache.commons.io.input.buffer
org.apache.commons.io.monitor
org.apache.commons.io.output
org.apache.commons.io.serialization

さらに、Java でのファイルの操作にも役立ちます。

ファイルユーティリティ

  • copyDirectory(File, File) - ディレクトリをコピーします
  • copyFile(File, File) - ファイルをコピーします
  • listFiles(File, String[], boolean) - ファイルを拡張子ごとに再帰的にリストします。
  • readFileToString(ファイル, 文字列)
  • writeStringToFile(ファイル, 文字列)

IOUtils

  • closeQuietly(Reader/Writer/InputStream/OutputStream) - データ ストリームを閉じます
  • copy(InputStream, OutputStream) - あるストリームから別のストリームにコピーします