2011-06-06 165 views
1

我有問題從jar中運行主類。從java批處理文件運行jar

Ant腳本產生了以下文件夾:

MyProject(Somewhere in C:) 
| 
| 
|____configuration(this contains properties/XML file) 
| 
|____dist(contains MyProject.jar) 
| 
|____lib(contains all other jars) 
| 
|____run(contains batch file to run MyProject.jar) 

內運行文件夾我有一個批處理文件,其內容是這樣的:

java -jar ../dist/MyProject.jar;../lib/*.jar com.my.test.MainTest 

有人可以指導我。 我只想去運行文件夾並雙擊.bat文件並運行應用程序。

我越來越

Exception in thread "main" java.lang.NoClassDefFoundError: MyProject/jar 

更新

新的錯誤是:

The java class is not found: com.microsoft.sqlserver.jdbc.SQLServerException 

謝謝...

+0

這是什麼問題? – 2011-06-06 22:15:35

回答

2

使用-cp(或-classpath)代替-jar:

java -cp ../dist/MyProject.jar;../lib/*.jar com.my.test.MainTest 

-jar選項用於運行.jar文件,該文件要求.jar文件必須包含指示要執行哪個類的清單。但是在這裏你不需要,因爲你已經提供了類來運行(com.my.test.MainTest)。

更新:

由於@Rob提到,在類路徑中使用通配符的方式就是 '*',而不是 '的* .jar',讓你真正想要的:

java -cp ../dist/MyProject.jar;../lib/* com.my.test.MainTest 
+0

我收到了問題中描述的上述異常。 – user234194 2011-06-06 22:21:58

+0

我覺得罐子沒有裝在我的箱子裏。 – user234194 2011-06-06 23:13:06

2
  1. 使用-cp指定類路徑
  2. 爲通配符
取出 .jar擴展

你得到的命令是:

java -cp ..\dist\MyProject.jar;..\lib\* com.my.test.MainTest 

Related question與啓發性的答案。

+0

我嘗試過,但它仍然給我錯誤。 – user234194 2011-06-06 23:13:50

6

看來你正在將多個JAR文件傳遞給java application launcher。這不是它的工作原理。

你需要傳入一個單獨的jar文件(在這種情況下是MyProject.jar),它用作入口點。所有相關的JAR應在主jar的manifest MANIFEST.MF的ClassPath條目中指定。清單還應指定Main類 - 具有main()方法的類。

如果要避免上述情況,並在命令行上指定完整的類路徑,請使用-cp-classpath標誌。但是,您需要在類路徑中使用specify wildcards,方式與問題中列出的方式不同。以下可能有效;在Windows上,如果需要用引號括類路徑條目:

REM notice the quotes in the cp argument. Those are to be omitted in *nix 
java -cp "../dist/MyProject.jar;../lib/*" com.my.test.MainTest 

更新

立足現在報道的新的錯誤消息,看來該Microsoft SQL Server JDBC Driver是不存在的類路徑。這需要下載並放置必要的JAR(在lib目錄中)。如果驅動程序存在於其他地方,那麼用於啓動應用程序的上述命令應該更新爲JAR的位置。

+0

它抱怨在lib文件夾中的jar ....它說沒有找到類。 – user234194 2011-06-06 23:12:18

+0

什麼是新錯誤?你可以在問題中發佈新的堆棧跟蹤嗎?這將有所幫助。 – 2011-06-06 23:16:55

+0

我已經更新了我的新錯誤的問題,謝謝..... – user234194 2011-06-06 23:37:15