首页 > 编程语言 >bat执行java程序的脚本解析

bat执行java程序的脚本解析

时间:2022-12-25 22:33:50浏览次数:56  
标签:bat set java CLASSPATH ECHO echo JAVA 解析

 

使用java执行带Package的class文件
java package1.package2.className 

或java -cp .  package1.package2.className

-cp将当前路径设置到classpath,windows默认情况下会搜索当前目录,有的机器有时候需要设置下-cp .,否则会找不到class

 

bat:

运行Java程序,脚本中的主要操作是设置classpath.
脚本的功能:
(1)设置path:可以找到java命令
(2)设置splash(启动画面)
(3)设置classpath:主程序运行时找到引用的class
(4)设置远程调试需要的相关参数
@echo off
if "%OS%"=="Windows_NT" @setlocal
if "%OS%"=="WINNT" @setlocal
@title RRU Hotload Patch tool
set workpath=%~dp0
set path=%path%;%workpath%\lib
set JAVA_HOME=%workpath%\jdk-windows
rem set JAVA_OPTS=%JAVA_OPTS% -splash:%workpath%\img\welcome.gif
set JAVA_OPTS=%JAVA_OPTS% -classpath %workpath%\lib\*;
rem set JAVA_OPTS=-classic -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=3999,server=y,suspend=n %JAVA_OPTS%

%JAVA_HOME%\bin\java %JAVA_OPTS% PackageName.ClassName

Analyze:
1.@echo off

(1). 作为控制批处理命令在执行时是否显示命令行自身的开关
格式:ECHO [ON|OFF]
(2). 关闭DOS命令提示符
在DOS提示符状态下键入ECHO OFF,能够关闭DOS提示符的显示使屏幕只留下光标,直至键入ECHO ON,提示符才会重新出现.

​http://network.51cto.com/art/201009/225457.htm​

2.%OS%是个系统变量

3.setlocal

setlocal /?
开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后
所做的环境改动只限于批处理文件。要还原原先的设置,必须执
行 ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个
尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。

eg:

@echo off
set test=test
echo %test%
setlocal
echo after setlocal
echo %test%
set test=newContent
echo %test%
endlocal
echo after endlocal
echo %test%

Output:

test
after setlocal
test
newContent
after endlocal
test

​http://www.jb51.net/article/36043.htm​

扩展:

启用变更延迟:
setlocal enabledelayedexpansion 

【! !】
① 当启用变量延迟时,使用!!将变量名扩起来表示对变量值的引用。

​http://baike.baidu.com/link?url=0MuBPmzZrQCNDu_-RlU4OQ4ZEfe0oIo3FcbdO-B636_38usvDXgUnjWcXYdyA2BH74453cVL6DdNxTLkSYe67K​​eg:

@echo off 
set a=4
set a=5&echo %a%
echo ==========================
setlocal enabledelayedexpansion
set a=4
set a=5&echo !a!
echo %a%
pause

Output:

4
==========================
5
5
请按任意键继续. . .

​http://www.jb51.net/article/29323.htm​

4、title

title /?
设置命令提示窗口的窗口标题。

TITLE [string]

string 指定命令提示窗口的标题。

5、%~dp0
6、-splash

java -help
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)

-splash:<imagepath>
show splash screen with specified image

7、-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=3999,server=y,suspend=n

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,address=3999,suspend=n

-XDebug 启用调试。
-Xnoagent 禁用默认sun.tools.debug调试器。
-Djava.compiler=NONE 禁止 JIT 编译器的加载。
-Xrunjdwp 加载JDWP的JPDA参考执行实例。
transport 用于在调试程序和 VM 使用的进程之间通讯。
dt_socket 套接字传输。
dt_shmem 共享内存传输,仅限于 Windows。
server=y/n VM 是否需要作为调试服务器执行。
address=3999 调试服务器的端口号,客户端用来连接服务器的端口号。
suspend=y/n 是否在调试客户端建立连接之后启动 VM 。

​http://www.blogjava.net/yongbing/articles/221179.html​

 

Extension part:

linux:

echo "Add the XXX's Lib path into the CLASSPATH..."
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
oldClsPath=$CLASSPATH
LIPPATH=/opt/system/jakarta-tomcat-5.0.28/webapps/JavaService/WEB-INF/lib/*.jar
#echo $LIPPATH
cf=.
for i in $LIPPATH
do
cf=$cf:"$i"
#echo $cf
done
echo "The XXX's Lib path have been added into the CLASSPATH..."
#echo $cf
export CLASSPATH=$CLASSPATH:$cf
echo $CLASSPATH
#ps: if you want to run a java application, you must be copy this .bat file to the class directory.
java -cp CLASSPATH PackageName.ClassName
#ok

windows:

@echo off
if "%OS%"=="Windows_NT" @setlocal
if "%OS%"=="WINNT" @setlocal

  rem 启用变量延迟时:

setlocal ENABLEDELAYEDEXPANSION
ECHO. ECHO "Set CLASSPATH begin..." set CP=.
rem 当启用变量延迟时,使用!!将变量名扩起来表示对变量值的引用
for %%k in ("D:/Program Files/apache-tomcat-6.0.16/webapps/axis/WEB-INF"/lib/*.jar) do set CP=!CP!;%%k
set CLASSPATH=%CLASSPATH%;%CP%
ECHO "Set CLASSPATH is ok..."
ECHO "Show the CLASSPATH: "
ECHO.
ECHO %CLASSPATH%
ECHO.
rem "you can add some code here."
rem ps: if you want to run a java application, you must be copy this .bat file to the class directory.
rem java -cp CLASSPATH PackageName.ClassName
rem ""
rem ""
PAUSE


标签:bat,set,java,CLASSPATH,ECHO,echo,JAVA,解析
From: https://blog.51cto.com/u_15147537/5968465

相关文章

  • Eclipse启动后一直Initializing Java Tooling (1%)
     问题症状:工作中eclipse崩溃,再次启动后cpu占用99%,状态栏一直显示Initializing JavaTooling:(1%)。 解决方案:删除\workspace\.metadata\.plugins\org.eclipse.core.reso......
  • Java 之 CAS 原理及实现是怎样的?
    面试官:今天我们来聊聊CAS吧?你对CAS了解多少?候选者:好,CAS的全称为compareandswap,比较并交换候选者:虽然翻译过来是「比较并交换」,但它是一个原子性的操作,对应到CPU指令......
  • java 学习
    javacJunior.javajavaJunior  Employee.java//importjava.io.*;//下面的命令行将会命令编译器载入java_installation/java/io路径下的所有类publicclass......
  • BFS场景样例测试--最短路径--用Java实现
    我们今天研究下最短路径用BFS来实现 首先确定数据结构/***二叉树数据结构节点*/publicclassTreeNode{intvalue;TreeNodeleft;TreeNoder......
  • Java编程思想13
    第十八章:JavaI/O系统对程序语言的设计者而言,创建一个好的输入/输出(I/O)系统是一项艰难的任务。File类既能代表一个特定文件的名称,又能代表一个目录下一组文件的名称。下......
  • BFS场景样例测试--层次遍历--用Java实现
    我们今天研究下层次便利用BFS来实现 首先确定数据结构/***二叉树数据结构节点*/publicclassTreeNode{intvalue;TreeNodeleft;TreeNoderi......
  • java技术路线
      第一阶段:Java基础学习Java基础知识,可供选择的书很多,但它们大都有着一个缺点,那就是内容庞杂,有些内容脱离实际,甚至是过时。对此,在这一阶段,我精选了Java的基础知识,核心......
  • Java注解反射
    注解与反射内置注解@Oreride:定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。@Deprecated:定义在java.lang.Depr......
  • 教你用JavaScript实现调皮的字母
    案例介绍欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,制作提高打字速度的小游戏-调皮的字母。点击与屏幕上字母相对应的按键,......
  • [Javascript] Chunk array
    Array.from()isagreatwaytochunkuparraysbecauseofthesecondaryargumentbeingamapfunction. consthugeArray=Array.from({length:76},(_,i)=>......