带有外部.jar的Java命令行

我使用.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)?

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

 ; on Windows : on Linux or Mac 

例如

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

在更新的JVM(6+,我认为),你也可以使用*来追加所有JARs在一个目录例如

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

更进一步,创build一个单一的打包可执行文件看到这个问题 。

如果在一个文件夹中有许多jar文件,并且不想手动将它们追加到classpath中。 你可以在Windows上运行.bat或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 

而另一个使用“for”语句的bat文件将所有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% abcMainApp 

如果你有多个外部jar子,把所有需要的jar子复制到C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext并运行命令javac "yourfilename.java" 。 它会编译没有错误