Executable JarではないJarを実行する場合は、次のように指定します。
java -cp "mysample.jar" com.example.main.Runner
これにより、com/example/main/Runner.class
をメインとして読み込みます。
さて、本題は、このRunnerの中で例えばdepended.jar
の内容をインポートしていた場合です。その場合には、実行時に同じくクラスパスを指定する必要があります。
次のように指定します。
java -cp "mysample.jar:depended.jar" com.example.main.Runner
ところで、上記例は、Windows環境では期待通りに動きません。
Windows環境では、:
(コロン)を;
(セミコロン)に書き換えると動くようになります。
java -cp "mysample.jar;depended.jar" com.example.main.Runner
この差は、Windows環境では:
をドライブの区切り文字として扱うため、とのことです。
私は普段Linux環境で動かすことが多かったこともあり、この違いを知らず、しばらくの間ハマってしまいました。(なぜか複数クラスパスを指定しない時はエラーにならないので不審に思っていました)
開発はWindows環境だけど、本番はLinux環境、という方も多いかと思います。知ってる人は知っている、というレベルの話でしたが、気に留めておくとどこかで役に立つかもしれませんね。
以上です。