2011-04-20 63 views
0

我需要創建我的Java應用程序的jar文件。對於第i個已創建了一個名爲的Manifest.MF文件,在該文件中我已經存儲在以下代碼需要幫助通過Java命令創建Jar文件?

Manifest-Version: 1.0 
Main-Class: com.demo.test.JavaTest 

,然後我已在命令提示exceuted以下命令

jar cvfm JavaAppDemo.jar MANIFEST.MF "C:\JavaSamples\MyApp"

其中MyApp的是我的項目目錄,在那裏,我創造了包裝和使用的其他jar文件也

,然後我嘗試運行jar使用java命令

java -jar JavaAppDemo.jar

,我得到了下面的異常

Exception in thread "main" java.lang.NoClassDefFoundError: com/demo/test/JavaTest

Caused by: java.lang.ClassNotFoundException: com.demo.test.JavaSamp at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) Could not find the main class: com.demo.test.JavaTest. Program will exit.

請告訴我,我想創建一個罐子,我必須在我的項目目錄中的文件打包到jar文件,當我提取我有我的項目的jar文件夾,但是當我運行我的jar我得到了上述異常,所以我很困惑,在哪裏出現了循環漏洞。

+0

你有沒有試過'java -cp。 -jar JavaAppDemo.jar'? – helpermethod 2011-04-20 11:45:23

+0

@Helper方法:不,我沒有試過你的命令 – 2011-04-20 11:46:03

+1

@Helper方法:當使用'-jar'時忽略'-cp' – 2011-04-20 11:46:17

回答

0

你應該使用這個語法來構建你的罐子:

jar cvfm myapp.jar myapp.MF -C classes myclasspath 
+0

-c類新myclasspath手段,請告訴精細,即時通訊困惑,我想的jar文件和一些文件在我的當前目錄捆綁到我的罐子,什麼是類myclasspath – 2011-04-20 11:49:13

+1

@Selvi:「我希望捆綁的jar文件和一些文件在我當前的目錄中添加到我的jar中「Java在其他Jars內部不支持Jars。它們必須分別添加到應用程序的運行時類路徑中。這也可以通過將其他Jars列入包含'main(String [])'的Jar的清單來實現。 – 2011-04-20 12:56:23

0

好了好了幾件事情:

這裏是你如何來運行你的應用程序:

java -classpath myapplication.jar:.. -Dlog4j.info -Dlog4j.configuration=file:../../conf/log4j.xml com.mywebsite.Benchmarks 

接招如果你不需要它,log4j就會出來。我相信你只是錯過了「com.mywebsite.Benchmarks」這一行,它告訴jar開始的是哪個編譯類。如果你有基準,FullTest,MainApp所有編譯你的罐子和主要方法是在基準,你需要告訴罐子說。

至於建立你的罐子...

這是最容易使用的某種Ant構建腳本的。

<target name="build"> 
    <delete file="MyApplication.jar" /> 
    <delete dir="_classes" /> 
    <mkdir dir="_classes" /> 
    <javac srcdir="src" destdir="_classes" debug="true"> 
    <classpath path="../../3rdParty/log4j/log4j-1.2.16.jar" /> 
    </javac> 
    <jar jarfile="MyApplication.jar" basedir="_classes"/> 
</target> 

這應該讓你開始。但是當你運行它時,你需要確保一些東西:

  1. 你有你的類路徑的所有依賴關係。

  2. 你告訴罐子開始與階級。

+0

對不起,我仍然感到困惑 – 2011-04-20 13:01:15

0

有些事情我能想到的:

該錯誤消息說,它無法找到該文件COM /演示/測試/ JavaTest.class。你可以嘗試尋找一個zip文件程序的jar文件(.jar文件被壓縮,就像一個.zip文件),看看是否能文件是真的沒有在那裏。我懷疑錯誤代碼實際上是正確的,因爲它實際上並不存在,但至少你可以用自己的眼睛看到它(或沒有看到它)。請記住,它必須以「com」文件夾開頭。

也許你感到困惑的.class文件和.java文件。你確定你的.java文件實際上是編譯進去的。類文件?這可能不太可能,但也可以這樣說。

也許你需要在年底與"C:\JavaSamples\MyApp\*"來運行你的jar命令來挑選出所有的文件在正確的目錄。也許你正在告訴jar命令包含文件夾「MyApp」。你實際上並不想要那個文件夾;你想要它裏面的所有文件。