具有外部.jar的 Java 命令行

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

因此,我在名为 TOOLS.jar.jar,并在文件 HelloWorld 中开发了一个简单的应用程序.java该应用程序引用了 TOOLS 中的软件包 TOOLS.jar

我用这个命令行编译:

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

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

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

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

当我有多个外部.jar文件时,如何执行我的应用程序?

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

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


答案 1

将每个 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

要更进一步并创建单个打包的可执行文件,请参阅此问题


答案 2

如果一个文件夹中有许多 jar 文件,并且不想手动将它们追加到类路径。你可以在Windows上.bat,也可以在linux上做shell。

cpappend.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

还有另一个 bat 文件,它使用 “for” 语句将所有 jar 文件附加到类路径

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

推荐