带有外部.jar的Java命令行

时间:2011-05-20 09:06:12

标签: java jar classpath executable executable-jar

我使用.jar开发一个项目来重用代码。

所以我在.jar上命名为TOOLS.jar,我在文件HelloWorld.java中开发了一个简单的应用程序,它从TOOLS.jar引用我的包TOOLS

我用这个命令行编译:

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

它很成功,当我想执行我的应用程序时,我使用这个命令(我在C:\ MyApp文件夹中):

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

这很成功,但我的问题是:

当我有多个外部.jar?

时,如何执行我的应用程序

我是否必须使用-cp选项添加每个命令?

有没有办法只生成一个二进制文件并执行它(如带有C程序的.exe)?

2 个答案:

答案 0 :(得分:39)

将每个jar文件参数连接到cp:

; on Windows
: on Linux or Mac

e.g。

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

在较新的JVM(6+,我认为)上你也可以使用*将所有JAR附加在一个目录中,例如。

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

要更进一步,创建一个打包的可执行文件,请参阅this question

答案 1 :(得分:3)

如果一个文件夹中有许多jar文件,并且不想手动将它们附加到classpath。你可以在windows上使用.bat或在linux上使用shell。

来自tomcat的

cpappend.bat

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

另一个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