【问题标题】:How to write a batch file to set classpath and execute java programs如何编写批处理文件来设置类路径和执行java程序
【发布时间】:2014-09-30 07:39:48
【问题描述】:

我的一些 java 程序需要很多 jar 文件才能执行。为了执行此操作,我可能必须将所有这些 jar 文件添加到环境变量的类路径变量中,否则每次打开新的 cmd 提示符时都必须在命令提示符下手动设置类路径。我不想在环境变量中的类路径变量中添加所有 jar 文件,并且每次打开新的 cmd 提示符时都手动设置。我想在批处理文件中编写一个脚本来设置类路径,并且它自己需要运行 java 程序。因此,当我想运行我的程序时,我只会运行批处理文件并一个接一个地运行我的程序。我写了一个批处理文件来设置类路径。但是,当我运行这个批处理文件时,它会自动关闭。所以,我无法利用我通过批处理文件设置的类路径。我再次打开新的 cmd 提示符,设置类路径并运行我的 java 程序。要使用批处理文件来实现这一点,我该如何继续。感谢任何帮助。谢谢。

【问题讨论】:

  • 您可以通过调用 java 可执行文件直接添加带有-cp 参数的类路径。

标签: java batch-file classpath batch-processing


【解决方案1】:

Jack 在他的评论中写道,不需要批处理文件在命令行上为 Java 指定类路径。

查看版本 7 Java 文档页面:

-cp 或对人类可读性更好的-classpath 可以在命令行上使用来定义类路径

可以使用分号作为分隔符来指定多个类的路径。

如果一个路径包含空格字符,则必须在所有路径周围使用双引号。

例子:

"%JAVA_HOME%\bin\java.exe" -classpath "C:\Java\My First Class;C:\Java\MySecondClass" MyJavaApp

这种方法主要适用于使用 Java 应用程序的快捷方式 (*.lnk),该应用程序需要的类与系统范围的环境变量 CLASSPATH 中通常使用和定义的类不同。

但是,如果要在控制台窗口中使用与定义的系统范围不同的类列表来开发和测试 Java 应用程序,最好有一个批处理文件,例如名称为 JavaDevEnv.bat 的代码如下

@echo off
title Java Development Environment
cd /D "Path to\Preferred Working Directory\For\Java\Development"
set "CLASSPATH=C:\Java\My First Class;C:\Java\MySecondClass"

并使用命令行在 Windows 桌面或 Windows 开始菜单中创建快捷方式

%SystemRoot%\System32\cmd.exe /K "Path to\Batch File\JavaDevEnv.bat"

在快捷方式文件 (*.lnk) 的属性中定义。

工作目录也可以通过快捷方式文件属性中的Start in来定义,而不是使用更改目录命令在批处理文件中设置。

还应在快捷方式文件的属性中写入适当的注释,例如与在命令title 上使用的相同,该命令将控制台窗口的标题设置为使用目的的提示这个快捷方式。

双击此快捷方式会打开一个新的控制台窗口,执行批处理文件,该批处理文件设置窗口标题、工作目录和环境变量 CLASSPATH 使用的 Java 在此控制台窗口中执行,然后保持打开状态供用户输入。

【讨论】:

    【解决方案2】:

    批处理文件:为了运行使用一些jar文件的类和同一应用程序的类的类文件。

    从 Eclipse IDE 开始 将所有构建路径条目设置为类路径。当我们通过批处理文件运行它时,我们也需要设置目标应用程序类文件。如下图。

    REM MyApplication\mainClass.bat
    REM MyApplication\target\classes - %~dp0target\classes;
    

    mainClass.bat 包含set class path

    @echo off
    REM Maven local repository path
    SET REPO=%USERPROFILE%\.m2\repository
    
    REM Setting the class path
    SET CLASSPATH=%REPO%\junit\junit\4.11\junit-4.11.jar;%REPO%\com\oracle\ojdbc5\11.1.0.7.0\ojdbc5-11.1.0.7.0.jar;%~dp0target\classes;%~dp0target\test-classes
    
    
    java -Xmx256m com.github.yash777.MainClass
    

    debug remotely 的 Java 命令行选项

    java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 <YourAppName>
    

    【讨论】:

      【解决方案3】:

      也许这不能回答你关于在执行后关闭批处理的问题,但我使用这样的文件来设置我的CLASSPATH 环境变量:

      call-java-class.bat

      ::
      :: %1 directory where all jars are located
      :: %2 main class
      :: %* program parameters
      ::
      :: JAVA_OPTS ... parameter before main class
      ::
      @echo off
      
      set libdir=%1
      shift
      set main=%1
      shift
      
      set JARS=
      set CLASSPATH=
      
      pushd %libdir%
      for %%i in (*.jar) do call cpappend.bat %libdir%\%%i
      set CLASSPATH=.%JARS%
      popd
      
      :: debug
      echo %CLASSPATH%
      echo %JAVA_HOME%\bin\java %main% %1 %2 %3 %4 %5 %6 %7 %8 %9
      
      %JAVA_HOME%\bin\java %JAVA_OPTS% %main% %1 %2 %3 %4 %5 %6 %7 %8 %9
      

      cpappend.bat

      @echo off
      set JARS=%JARS%;%1
      

      脚本需要在一个目录中的所有依赖项,并且必须设置 JAVA_HOME。然后调用你的java程序:

      call-java-class.bat path-to-lib-dir com.foo.bar.Main -help

      大部分代码取自https://alvinalexander.com/blog/post/page-1/thu-mar-9-2006-dynamically-build-environment-variables-in-dos-c/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-02
        • 2011-10-13
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-27
        • 1970-01-01
        相关资源
        最近更新 更多