Maven や Eclipse などのツールが、Java アプリケーションのビルドとコンパイル、特に依存関係の処理に役立つと考える人が多いことは理解しています。しかし、特に多くの依存関係がある場合に、コマンドラインから Java アプリをコンパイルして実行することに関連する質問があります。私が取り組んでいることに役立たないので、「それをしないでください」のような答えをいただければ幸いです。たとえば、Mahout in Action の Mahout での最初のレコメンデーションの例に取り組んでいる場合、コマンド ラインから例をコンパイルして実行する方法は明らかではないようです。
javac -cp /usr/lib/mahout/mahout-core-0.7-cdh4.2.0.jar RecommenderIntro.java
これはエラーなしで完了します。ただし、次の問題は実際に出力を実行することであり、より多くの依存関係が必要と思われます。ご想像のとおり、これはイライラします。
$ java -cp /usr/lib/mahout/mahout-core-0.7-cdh4.2.0.jar:. RecommenderIntro
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<clinit>(FileDataModel.java:121)
at RecommenderIntro.main(RecommenderIntro.java:19)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 2 more
ただし、必要な jar ファイルのほとんどまたはすべてが /usr/lib/mahout/lib にあることは明らかです。特定の import ステートメントのセットについて、コンパイル中にクラスパスに追加する必要がある jar の完全なリストを確認する方法はありますか? これが重要な理由の 1 つは、私が使用している Mahout の Cloudera ディストリビューションは Apache バージョンではなく、そのため、作成者は支援に関心がないようです。Python などの他の言語では、はるかに簡単です。多くの Java プログラマーは、これらのようなコマンド ラインのコンパイルの問題を処理しますか? もしそうなら、どのように?