Help us understand the problem. What is going on with this article?

Javaで複数クラスパスを指定する際の環境による違い

More than 3 years have passed since last update.

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環境、という方も多いかと思います。知ってる人は知っている、というレベルの話でしたが、気に留めておくとどこかで役に立つかもしれませんね。

以上です。

tkhm
"Always leave the campground cleaner than you found it."
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away