【トラブル】【Java】Commons インポートしてるけど、ClassNotFoundExceptionが発生する

■ トラブル内容

 * Commons の RandomStringUtils をラップした自作の共通処理を
   まとめたJavaプロジェクト「CustomCommon」をJARファイル化し、
   そのJARファイルを、Javaプロジェクト「SampleProject」で使用したところ、
   以下の「例外内容」の例外「ClassNotFoundException」が発生した。
   なお、プロジェクト「SampleProject」には「commons-lang3-3.5.jar」をインポートしてある
    => 詳細は、以下の「構成」を参照。
 * Javaプロジェクト「CustomCommon」内で例外が発生したメソッドを使用しても例外が発生しなかった

例外内容

Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.RandomStringUtils
	at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 2 more

構成

 + Javaプロジェクト「CustomCommon」(JAR化する「CustomCommon.jar」) ★自作の共通処理★
    + src
       + PasswordCustomUtil.java
    + lib
       + velocity-1.7-dep.jar
        など...
 + Javaプロジェクト「SampleProject」 ★使用者側★
    + src
       + Main.java(PasswordCustomUtil.javaを使用)
    + lib
       + CustomCommon.jar
       + commons-lang3-3.5.jar
PasswordCustomUtil.java
import org.apache.commons.lang.RandomStringUtils;

public class PasswordCustomUtil {
  public static String creatNumberInitPassword() {
     return RandomStringUtils.random(4, "0123456789");
  }
}

■ 原因

 自作の共通処理「CustomCommon」で使用していた「RandomStringUtils」は、
  velocity-1.7-dep.jar内に入っているcommons-lang2系「org.apache.commons.lang.RandomStringUtils」を使用している
 
  しかし、使用者側のJavaプロジェクト「SampleProject」では、commons-lang3系のJARファイルをインポートしていたため。

  commons-lang3系だと「org.apache.commons.lang3.RandomStringUtils」で
 「lang3」ってなって、パッケージ名がcommons-lang2系とはそもそも異なる。

補足:velocity-1.7-dep.jarについて

https://blogs.yahoo.co.jp/dk521123/34456704.html
より抜粋

「依存関係のあるツールも含まれたJARファイル」
  => commons-lang2系が含まれている

■ 解決案

 * commons-lang2系「commons-lang-2.X.jar」又は「velocity-1.X-dep.jar」を
   使用者側のJavaプロジェクトにインポートする

関連記事

Java】 セキュアなランダム文字列生成を考える

https://blogs.yahoo.co.jp/dk521123/36415526.html

Java】【Velocity】Apache Velocity ~入門編~

https://blogs.yahoo.co.jp/dk521123/34456704.html