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

时间:2014-08-07 07:04:50

标签: java batch-file classpath batch-processing

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

3 个答案:

答案 0 :(得分:1)

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

查看版本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)的属性中定义。

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

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

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

答案 1 :(得分:0)

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

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

def get(self, request):
    request_tag = [6, 7, 8]
    activity_items = Activity.objects.filter()
    for request_tag_item in request_tag:
        activity_items = activity_items.filter(preference=request_tag_item)
    data = activity_items
    serializer = ActivitySerializer(data, many=True)

mainClass.bat,其中包含set class path

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

debug remotely的Java命令行选项

@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

答案 2 :(得分:0)

也许这不能回答您有关在执行批处理后关闭批处理的问题,但是我使用类似这样的文件来设置我的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/