2011-05-20 106 views
22

我使用.jar開發項目以重用代碼。帶有外部.jar的Java命令行

所以我有命名的tools.jar的.jar,我發展文件的簡單應用程序HelloWorld.java至極參考我的包從工具的tools.jar

我用這個命令行編譯:

javac -g -d C:\MyApp -cp TOOLS.jar HelloWorld.java 

這是成功的,而當我想執行我的應用程序使用此命令(我在C:\ MyApp文件夾):

java -cp <path>\TOOLS.jar;. HelloWorld 

這是成功的,但我的問題是:

當我有多個外部.jar時,如何執行我的應用程序?

我必須使用-cp選項來添加每個命令嗎?

有沒有辦法只生成一個二進制文件並執行它(與C程序的.exe一樣)?

回答

36

串連每個jar文件參數與到CP:

; on Windows 
: on Linux or Mac 

例如

java -cp <path>\TOOLS.jar;.;<path>\jar2.jar;<path>\jar3.jar HelloWorld 
在新的JVM(6+,我認爲),你也可以使用*追加所有JAR文件的目錄如

java -cp .;<path>\*; HelloWorld 

要進一步創建單個打包的可執行文件,請參見this question

+1

給我,在你的使用「。」。起初這裏有點混亂。你在連接參數中的不同位置使用它們,沒有解釋它可能會讓讀者感到困惑。 「。」是必需的,因爲默認情況下當前目錄在類路徑中;但是如果我們明確指定類路徑,我們必須確保顯式包含當前目錄。 – Paul 2016-05-23 19:26:02

2

如果在一個文件夾中有許多jar文件,並且不想手動將它們追加到classpath中。你可以在Linux上的windows或shell上使用.bat。

從Tomcat

rem --------------------------------------------------------------------------- 
rem Append to CLASSPATH 
rem 
rem $Id: cpappend.bat 301115 2002-08-04 18:19:43Z patrickl $ 
rem --------------------------------------------------------------------------- 

rem Process the first argument 
if ""%1"" == """" goto end 
set CLASSPATH=%CLASSPATH%;%1 
shift 

rem Process the remaining arguments 
:setArgs 
if ""%1"" == """" goto doneSetArgs 
set CLASSPATH=%CLASSPATH% %1 
shift 
goto setArgs 
:doneSetArgs 
:end 

cpappend.bat而另一蝙蝠文件,該文件使用 「for」 語句添加所有的jar文件到classpath中

set CURRENT_DIR=%cd% 
set CLASSPATH=. 
for %%i in (%CURRENT_DIR%\lib\*.jar) do call cpappend.bat %%i 
start java -Duser.dir=%CURRENT_DIR% -cp %CLASSPATH% a.b.c.MainApp 
-4

如果u有多個外部罐子,複製全部需要的罐子爲C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext並運行命令javac "yourfilename.java"。它會編譯沒有錯誤