繁体   English   中英

如何编写批处理文件来设置类路径并执行java程序

[英]How to write a batch file to set classpath and execute java programs

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

正如杰克在评论中所写的那样,不需要批处理文件在命令行上指定 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的批处理文件, 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相同。

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

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

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

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

mainClass.bat 包含设置的类路径

@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

用于远程调试的Java 命令行选项

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

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

调用 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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM