Apache Commons

**Apache Commons**（アパッチ コモンズ）は、Apacheソフトウェア財団の傘下にある再利用可能なJavaコンポーネントをまとめたApacheのトッププロジェクト。Commonsの目的は再利用可能なオープンソースJavaソフトウェアを提供することである。Commonsは三つの部分、proper（プロパー）, sandbox（サンドボックス）, dormant（活動休止）から構成されている。

Commonsにはjava.langパッケージの機能を拡張するLang、Javaのコレクションフレームワークを拡張するクラス群を集めたCollectionsなどがある。

## Commons Proper
The Commons Properは役立つJavaコンポーネントを開発維持すること専用に作られている。Common Properはコラボレーションとシェアリングの役割を持っているが、Jakartaコミュニティの至る所からのディベロッパーがJakartaプロジェクトとJakartaユーザによってシェアされるためにプロジェクトで共に活動できる。

Commonディベロッパーはコンポーネントが他のソフトウェアライブラリに最小限に依存することを保証するよう努力する。それで、これらのコンポーネントは容易にデプロイ（配備）できる。加えて、Commonsコンポーネントは可能な限りインタフェースを保つ。それで、(他のJakartaサブプロジェクトを含む)Jakartaユーザはこれらのコンポーネントを、将来変更される心配無く実装することができる。

2006年8月にはこれらはCommons Properでは30以上のプロジェクトになり、5つの一般カテゴリに分類されている。
 *からの表*

### サブプロジェクト
* BCEL - Javaバイトコードを扱うライブラリ。
* BeanUtils - Java Beansをサポート。
* BSF
* Chain - GoFデザインパターンの一つ、Chain of Responsibility パターンをサポート。
* CLI
* Codec
* Collections - java.utilパッケージにあるコレクションフレームワークを拡張するクラス群。
* Compress - tar, ZIP, bzip2をサポート。
* Configuration - クラスのような設定ファイルを弄るクラス群。
* CSV
* Daemon
* DBCP - 関係データベースのコネクションプーリングをサポート。
* DBUtils - JDBCをサポートする。
* Digester
* Discovery
* EL
* Email - メールライブラリ
* Exec
* FileUpload - Java Servlet/JSPでのファイルアップロードをサポート。
* IO - java.ioパッケージをサポート。
* JCI
* Jelly
* Jexl
* JXPath
* Lang - java.langパッケージを拡張する。StringUtilsほか、, , , メソッドのオーバーライドを支援するクラスなどが存在する。
* Launcher
* Logging - ひとつのプログラムでJava Logging API(java.util.loggingパッケージ)やJakarta Log4Jを併用し、簡単に複数のロギングAPIを切り替えるときに便利なAPI。
* Math - クラスやjava.mathパッケージにはない数学ライブラリを提供。複素数や行列演算、統計学などのライブラリが揃っている。
* Modeler
* Net - java.netパッケージを拡張する。FTPなどのプロトコルを扱うことができる。
* Pool - Javaでのオブジェクトプーリングをサポート。
* Primitives
* Proxy
* SCXML
* Validator
* VFS
* Weaver

### Commons Lang
Commons Lang には java.lang を拡張した物が入っている。

#### 例1

`Object.equals()` を拡張した物。nullが入っていても比較が可能である。


```java
String s1 = null;
String s2 = "abc";
if(ObjectUtils.equals(s1, s2)) {
    System.out.println("equal");
}
```


#### 例2

Java のデフォルトの `Object.toString()` はメンバ変数の内容まで表示してくれないが、リフレクションを使用して、メンバ変数の内容を表示する形で、`Object.toString()` を実装する。


```java
public String toString() {
    return ToStringBuilder.reflectionToString(this);
}
```


### Commons Collections
Apache Commons Collections には、主に、java.util の Collection 関係の拡張した物が入っている。

#### 例

Java 6 にはクロージャがないが、`Predicate` を実装することで、条件を満たす物を探すことができる。以下、リストから、a で始まる物を見つけ出す。


```java
ArrayList<String> list = new ArrayList<String>();
list.add("apple");
list.add("banana");
list.add("ant");
Collection<?> aList = CollectionUtils.select(list, new Predicate() {
    public boolean evaluate(Object obj) {
        return ((String)obj).startsWith("a");
    }
});
```


## Commons Sandbox

The *Commons Sandbox*はJakartaコントリビュータがCommons Properに含まれていないプロジェクトで協業し実験する作業環境である。サンドボックスにあるプロジェクトはCommons Properの推進に関するJakartaのメンバによって支持されており、ディベロッパーのグループは彼らが推進に関して基準に満たすまでサンドボックスを一層よくするために活動している。

Apache CommonsにはCommons Sandboxのプロジェクトの現在のリストが存在する Sandbox page。

## Commons Dormant
Commons Dormantは最近の開発活動が矮小化していることが原因で不活性と宣告されたコンポーネントの集合である。これらのコンポーネントは役に立つかも知れないが、あなた自身でビルドしなければならない。これらのコンポーネントは近い将来リリースされないと思ったほうが良い。

Apache Commonsには利用できるCommons Dormantプロジェクトの現在のリストが存在するDormant page。

## 関連項目
* Google Guava - Googleによって開発されているオープンソースのJavaユーティリティライブラリ群。後方互換性の確保を担保しているApache Commonsと違い、JDK 1.6以降を対象として開発されている。

## 参考

## 外部リンク
*Apache Commons