Java command line with external .jar
我使用.jar开发一个项目来重用代码。
所以我在.jar上命名为TOOLS.jar,我在文件HelloWorld.java中开发了一个简单的应用程序,它从TOOLS.jar引用我的包TOOLS
我用这个命令行编译:
1 | javac -g -d C:\MyApp -cp TOOLS.jar HelloWorld.java |
它很成功,当我想执行我的应用程序时,我使用这个命令(我在C: MyApp文件夹中):
1 | java -cp <path>\TOOLS.jar;. HelloWorld |
它很成功,但我的问题是:
当我有多个外部.jar时,如何执行我的应用程序?
我是否必须使用-cp选项在命令中添加每个?
有没有办法只生成一个二进制文件并执行它(与C程序一样的.exe)?
将每个jar文件参数连接到cp:
1 2 | ; on Windows : on Linux or Mac |
例如
1 | java -cp <path>\TOOLS.jar;.;<path>\jar2.jar;<path>\jar3.jar HelloWorld |
在较新的JVM(6+,我认为)上,您还可以使用*将所有JAR附加到目录中,例如
1 | java -cp .;<path>\*; HelloWorld |
要更进一步并创建单个打包的可执行文件,请参阅此问题。
如果一个文件夹中有许多jar文件,并且不想手动将它们附加到classpath。 你可以在windows上使用.bat或在linux上使用shell。
来自tomcat的cpappend.bat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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
1 2 3 4 | 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 |