2012-06-21 72 views
5

我創建一個批處理文件「的run.bat」我的批處理文件:如何引用目錄中的所有jar文件中

set CLASSPATH=%CLASSPATH%.;.\Jars\app.jar;.\Jars\a.jar;.\Jars\b.jar;.\Jars\c.jar;.\Jars\d.jar; 
java mypackage.mysubpackage.Start 
pause 

我一直在「應用程序相關的所有我的應用程序的類文件.jar「和 Start是應用程序從何處開始執行的類。我有這個「run.bat」文件和我的「app.jar」想要在同一目錄中引用的所有jar文件。
我將所有這些罐子放在「罐子」文件夾中,並在我的「run.bat」文件中引用它,如上所示。但是,要通過我的「run.bat」引用每個jar文件,我需要指定路徑爲「。\ Jars \ jarname.jar」。當我使用「。\ Jars \ *。jar」時,罐子不會被「run.bat」引用。 任何人都可以提供替代方案嗎?

+1

我認爲,在這裏你會發現一些更多的提示http://stackoverflow.com/questions/1914493/add-jar-file-to-buildpath-in-windows-command-line – BigMike

+0

和順便說一句,良好的舊的Windows批處理命令可以是有用的(看到http://stackoverflow.com/questions/180741/how-to-do-something-to-each-file-in-a-directory-with-a-batch-script) – BigMike

+0

@BigMike關於Java版本的好處。在Linux系統中,由於文件名擴展,問題不大。不確定的Windows也做了一些擴展+1 – Morfic

回答

2

實際上,您只使用* .jar完成了一半的工作。您還需要將它們作爲類路徑傳遞給java:java -cp $CLASSPATH mypackage.mysubpackage.Start。 (在Windows上,我認爲在腳本中使用變量是%CLASSPATH%)

稍後編輯:看看BigMike對您問題的評論。如果您使用的是java版本< 1.6,則可能需要使用循環來單獨構建完整的%CLASSPATH%(包括每個jar的全名),因爲我猜測Windows的shell不會像* nix那樣執行expansions系統。

+0

Java會讀取%CLASSPATH%環境變量,不是嗎? – trojanfoe

+1

你是對的,它應該自動讀取它。但是因爲設置類路徑可能會很棘手,所以建議使用'java -cp'選項作爲最佳實踐。這還允許您爲每個應用程序單獨指定類路徑,而不會影響其他現有應用程序,而修改環境變量則會產生全局影響。 – Morfic

+0

贊同格羅夫,在Windows上搞亂env變量可能是一個很大的痛苦(aaah我錯過了很好的舊autoexec.bat) – BigMike

2

您可以嘗試使用for循環來批量創建類路徑,如下所示。

@echo off 
for %%jar in (.\Jars\*.jar) do call :add_jar %%jar 

java -cp %CLASSPATH%;%JARS% mypackage.mysubpackage.Start 
pause 

exit /b 

:add_jar 
set JARS=%JARS%;%1 
exit /b 
+1

+1爲了使命令;) – BigMike

+0

+1:@ guanxiaohua2k6,你應該增加一個額外的'在暫停後退出/ b',以避免'for'循環終止後進入'add_jar'子程序。 –

+0

好的,謝謝。我添加了它。 – guanxiaohua2k6

1

你可以嘗試的東西,在下面的鏈接http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html

理解類路徑通配符部分給出:

「A包含*不匹配的類文件的類路徑條目要將兩個類和JAR文件匹配到單個目錄foo中,使用foo; foo/*或foo/; foo。所選順序決定foo中的類和資源是否在foo中的JAR文件之前加載,反之亦然。子目錄a不要搜索遞歸。例如,富/查找JAR文件僅在富,不富/酒吧,富/巴茲等」

所以你的情況,你應該做的:

set CLASSPATH=%CLASSPATH%.;.\Jars;.\Jars\* 

set CLASSPATH=%CLASSPATH%.;.\Jars;.\Jars\*.jar 

提供所有您需要罐子存在於\文件夾罐

相關問題