2012-12-05 32 views
1

我的目錄結構是這樣的:如何在從父目錄編譯時在清單文件中指定主類?

javac src/*.java 
jar cvfm app.jar src/manifest.txt src/*.class 

manifest.txt包含此:

> makefile 
> app.jar 
> src 
    > Main.java 
    > Main.class 
    > some other classes 
    > manifest.txt 

我從這些命令生成文件編譯

Main-Class: Main 

當我從上面運行java -jar app.jar目錄我得到這個錯誤:

$ java -jar app.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: Main 
Caused by: java.lang.ClassNotFoundException: Main 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
Could not find the main class: Main. Program will exit. 

我試着改變清單,說Main-Class: src.Main,但也沒有工作。這可能很簡單,但我發現Google不提供任何簡單的解決方案。

+0

你確認生成的'jar'裏面包含'Main'類? – bellum

+1

我認爲jar應該被調用爲'jar cvfm app.jar src/manifest.txt -C src * .class'。 – khachik

回答

1

請找到甲骨文

答案

http://docs.oracle.com/javase/tutorial/deployment/jar/build.html

請找到示例代碼: -

package oata 
public class HelloWorld { 
public static void main(String[] args) { 
    System.out.println("Hello World"); 
} 
} 

創建一個文件夾放置.class文件 然後編譯並運行該文件。

`md build\classes 
    javac -sourcepath src -d build\classes src\oata\HelloWorld.java 
    java -cp build\classes oata.HelloWorld` 


    `echo Main-Class: oata.HelloWorld>myManifest 
    md build\jar 
    jar cfm build\jar\HelloWorld.jar myManifest -C build\classes . 
    java -jar build\jar\HelloWorld.jar` 

感謝 帕

0

你得到的NoClassDefFoundError異常,可能是類路徑設置不正確。

感謝, 帕

相關問題