質問: 始めにhoge.jarというファイルがあってjavaファイル内で ``` import hoge.hogehoge.*; Hoge a; ``` のように独自のクラスを利用したいです。 ``` $ javac -cp .:hoge.jar prog1.java $ java -cp .:hoge.jar prog1 ``` macではこのようにhoge.jarがあるディレクトリでprog1.javaをコンパイル実行できるのですが、 以下のように hai - 1 - prog1.java | - 2 - prog2.java | - 3 - prog3.java | - hoge.jar (hai, 1, 2, 3はフォルダ) とディレクトリ構造があったばあい **ディレクトリhaiにいながら**prog1.javaやprog2.javaのコンパイル実行をやりたいです。 ``` $ javac -cp .:hoge.jar 1/prog1.java ``` このようにコンパイルしディレクトリ1にprog1.classを作成し ``` $ java -cp .:hoge.jar -classpath 1/ prog1 ``` ` のように実行したのですが ``` Exception in thread "main" java.lang.NoClassDefFoundError: hoge/~~ ``` のようなエラーが出てしまいます。 やはり素直にディレクトリ1, 2, 3すべてにhoge.jarをコピーして実行は全てそのディレクトリ内でやるしかないんでしょうか また新たにhai内にtestというディレクトリを作成し ``` javac -cp .:hoge.jar -d test 1/prog1.java ``` としprog1.classをtest下に配置し そのtestにhoge.jarをコピーしました。 つまり hai | test-hoge.jar prog1.class のようにして ``` java -cp .:hoge.jar -classpath test/ prog1 ``` 実行しても同じような結果になってしまいました。 どのようにすればいいでしょうか
回答: ディレクトリをまたいでコンパイルしたいというような要望については、自作でシェルスクリプトを書くか Ant や Maven や Gradle などのビルドツールを使用するのがよいと思います。 お勧めは Gradleです。 以下の記事を参考にしてみてはいかがでしょうか? * Qiita - Gradle初心者によるGradle事始め * JavaビルドツールGradle入門