【问题标题】:Java command line with external .jar带有外部 .jar 的 Java 命令行
【发布时间】:2011-08-29 12:11:28
【问题描述】:

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

所以我有一个名为 TOOLS.jar 的 .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)?

【问题讨论】:

    标签: java jar classpath executable executable-jar


    【解决方案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
    

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

    【讨论】:

    • 至少对我来说,你使用“.”起初这里有点混乱。您在连接参数的不同位置使用它们,如果没有解释,可能会使读者感到困惑。这 ”。”是必要的,因为默认情况下当前目录在类路径中;但是如果我们明确指定类路径,我们必须确保明确包含当前目录。
    【解决方案2】:

    如果您在一个文件夹中有许多 jar 文件并且不想手动将它们附加到类路径中。您可以在 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文件附加到类路径

    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
    

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 1970-01-01
      • 2015-02-21
      • 2015-05-24
      • 2019-03-16
      • 2020-04-17
      • 2021-11-10
      • 2012-07-09
      • 2012-11-19
      相关资源
      最近更新 更多