2011-05-20 99 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"。它会编译没有错误