[英]How to create a jar. Use it in a class. execute the class using the jar in command line?
[英]How do I create a jar using the command line where a class is dependent on another class in the same project?(no build tools please!)
我正在嘗試學習Java,將它作為一種業余愛好比其他任何東西都多,它與我通常的C#有着不同的角度,在C#中,文件中實際上有名稱空間和多個類(不包含任何內容)。 但是,我似乎不太了解jar創建過程的工作原理,至少在“ files-input”參數方面。
我知道有一些構建工具,例如and,maven等。 我只是想更好地了解整個過程。
我試圖用兩個單獨的包中的2個類創建一個jar。
這是文件夾結構:
tryproject\\packageOne\\MainApp.class
tryproject\\packageTwo\\Greeter.class
MainApp.java
package packageOne;
import packageTwo.Greeter;
public class MainApp{
public static void main(String[] args){
Greeter greeter=new Greeter();
greeter.setMessage("Hello World");
greeter.sayHello();
}
}
Greeter.java
package packageTwo;
public class Greeter{
private String whatTosay;
public void setMessage(String whatTosay){
this.whatTosay=whatTosay;
}
public void sayHello(){
System.out.println(whatTosay);
}
}
這是命令提示符輸出:
C:\Users\SomeUser>jar cfve tryapp.jar MainApp C:\Users\SomeUser\Desktop\LearningJava\tryproject\packageOne\MainApp.class C:\Users\SomeUser\Desktop\LearningJava\tryproject\packageTwo\Greeter.class
added manifest
adding:Users/SomeUser/Desktop/LearningJava/tryproject/packageOne/MainApp.class(in = 414) (out= 299)(deflated 27%)
adding:Users/SomeUser/Desktop/LearningJava/tryproject/packageTwo/Greeter.class(in = 506) (out= 333)(deflated 34%)
C:\Users\SomeUser>java -jar tryapp.jar
Error: Could not find or load main class MainApp
Caused by: java.lang.ClassNotFoundException: MainApp
我真的不明白為什么它找不到我的MainApp
類,我也很好奇是否有可能在沒有預制清單的情況下以這種方式構建jar。
對於任何偶然發現此帖子的人,造成混亂的原因以及對我而言都不起作用的原因是,因為我沒有考慮到我在其他地方而不是在根目錄中創建我的jar的事實。驅動,所以jar結構看起來像這樣:
Users\SomeUser\Desktop\LearningJava\tryproject\packageOne\MainApp.class
Users\SomeUser\Desktop\LearningJava\tryproject\packageTwo\Greeter.class
上面是我用以下命令創建的jar結構的樣子:
C:\Users\SomeUser>jar cfve tryapp.jar MainApp C:\Users\SomeUser\Desktop\LearningJava\tryproject\packageOne\MainApp.class C:\Users\SomeUser\Desktop\LearningJava\tryproject\packageTwo\Greeter.class
現在,要運行此jar,必須更改上面的命令,以使不僅有MainApp,還需要像這樣放置整個項目結構:
C:\Users\SomeUser>jar cfve tryapp.jar Users.SomeUser.Desktop.LearningJava.tryproject.packageOne.MainApp C:\Users\SomeUser\Desktop\LearningJava\tryproject\packageOne\MainApp.class C:\Users\SomeUser\Desktop\LearningJava\tryproject\packageTwo\Greeter.class
而且,您還必須修改每個.java類文件的包,使其類似於我在命令中剛剛修改的結構。 因此,與其僅package packageOne;
將其package packageOne;
或package packageTwo;
您需要像這樣package Users.SomeUser.Desktop.LearningJava.tryproject.packageOne;
重寫它們package Users.SomeUser.Desktop.LearningJava.tryproject.packageOne;
並package Users.SomeUser.Desktop.LearningJava.tryproject.packageTwo;
。 導入也是如此。 現在,如果您修改了所有.java文件並重新編譯了它們,則應該能夠使用我前面提到的命令指令來運行jar。
但是更好的解決方案和更簡單的解決方案就像上面提到的@Prashant Gupta。
例如,只需使用:
jar cfve tryapp.jar packageOne.MainApp -C C:\Users\SomeUser\Desktop\LearningJava\tryproject\ .
但是它將獲得該目錄中的所有文件,因此可能只有一個單獨的目錄,用於存放二進制文件或應用程序所需的所有文件,以及源文件所需的所有文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.