これでわかりました:jarにライブラリを含める
私たちは2つのライブラリパッケージを用意しています。これをjarファイルにコンパイルしました。
package starwars; public class JarJar { public void JarSayHello() { System.out.println("Jaaaaar!!"); } }
package barwars; public class BarBar { public void BarSayHello() { System.out.println("Baaaaa!!"); } }
私たちは私たちのためにジャーにすべてうまく
javac -d bin -sourcepath src src/barwars/BarBar.java jar cvf barwars.jar -C bin .
と
javac -d bin -sourcepath src src/starwars/JarJar.java jar cvf starwars.jar -C bin .
でこれらをコンパイルします。
ここで、この2つのjarを別のJavaプロジェクトに含めることにします。
ので、我々は
- /project/src/a_pack/HelloWorld.java
- を持っています
package a_pack; import starwars.JarJar; import barwars.BarBar; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); JarJar myJar = new JarJar(); myJar.JarSayHello(); BarBar myBar = new BarBar(); myBar.BarSayHello(); } }
/project/manifest.txt Manifest.txt
Main-Class: a_pack.HelloWorld Class-Path: libs/starwars.jar libs/barwars.jar
今、私たちは、でこれをコンパイルします。
javac -d bin -sourcepath src -cp "libs/starwars.jar;libs/*" src/a_pack/HelloWorld.java jar cvfm helloworld.jar manifest.txt -C bin .
そして、これはコンパイルし、罰金実行されます。
今私には2つの問題があります。
まず - 私はどこかに、このjarファイルを移動し、それを実行しようとした場合、その後、私は買ってあげる:
Exception in thread "main" java.lang.NoClassDefFoundError: starwars/JarJar
今、私は私が動くどこにLIBSのフォルダを移動することでこの問題を解決することができます瓶しかし、これは私に厄介なものです(既にその場所にlibsフォルダがある場合はどうでしょうか?)。
私がやりたいことは、参照されたjarファイルをjarファイルにインクルードすることです。その内部に実行するために必要なすべてのものが入っているjarファイルが1つあります。
これは可能ですか? (それは良い練習ですか?)
Mavenがこれをどのように解決するかを調べるとよいでしょう。 –