簡體   English   中英

從 java 中的批處理文件運行 jar

[英]running jar from batch file in java

我在從 jar 運行主 class 時遇到問題。

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

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

我正進入(狀態

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

更新

新的錯誤是:

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

謝謝...

您似乎正在將多個 JAR 文件傳遞給java 應用程序啟動器 這不是它的工作原理。

您需要傳入一個單一的 jar 文件(在本例中為 MyProject.jar),該文件用作入口點。 所有相關的 JARs 應在主 jar 的清單 MANIFEST.MF的 ClassPath 條目中指定。 清單還應指定 Main class - 具有 main() 方法的那個。

如果您想避免上述情況,並在命令行上指定完整的類路徑,請使用-cp-classpath標志。 但是,您需要以與問題中列出的方式不同的方式在類路徑上指定通配符 以下可能有效; 在 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 服務器 JDBC 驅動程序似乎不存在於類路徑中。 這需要下載並放置必要的 JARs(在 lib 目錄中)。 如果驅動程序存在於其他地方,則上述用於啟動應用程序的命令應使用 JAR 的位置進行更新。

使用 -cp(或 -classpath)而不是 -jar:

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

-jar 選項用於運行 .jar 文件,這要求 .jar 文件必須包含一個清單,說明要執行哪個 class。 但在這里你不希望這樣,因為你已經提供了 class 來運行 (com.my.test.MainTest)。

更新:

正如@Rob 提到的,在類路徑中使用通配符的方法只是'*',而不是'*.jar',所以你真的想要:

java -cp ../dist/MyProject.jar;../lib/* com.my.test.MainTest
  1. 使用-cp指定類路徑
  2. 刪除通配符的.jar擴展名

您生成的命令將是:

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

具有啟發性答案的相關問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM