bat 脚本启动class文件或jar文件,配置可remote debug

因为jar文件或class文件不能直接像exe那样运行,有时候我们需要用bat脚本的帮助来方便的完成java程序在windows上的执行

首先这台机器得有JRE环境。这个具体安装和配置环境变量不再赘述

其次,用bat脚本本质上还是调用java命令,所以可以先试着用命令行工具测试下我们脚本的核心指令,即java命令运行是否正确

步骤:

1,编写测试代码

测试代码如下,内容为不停的每隔2秒输出一个数字

package com.bbb.test.recursion;

public class RecursionTester {
    private void printStringAlways() {
        int count = 0;
        while(true) {
            System.out.println("sleep count = " + count);
            try {
                Thread.sleep(2000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            count ++;
        }
    }

    public static void main(String[] args) {
        RecursionTester tester = new RecursionTester();
        tester.printStringAlways();
    }
}

2,生成class文件或jar文件

生成目录如图所示

sh java 启动脚本编写 bat脚本启动java jar_JAVA

3,java命令启动

当前目录打开shell窗口(shift+鼠标右键)

sh java 启动脚本编写 bat脚本启动java jar_JAVA_02


输入指令 java RecursionTester

然而,并没有按照预期做的输出,而是报错了。报错信息 错误: 找不到或无法加载主类 RecursionTester

原因是我在java中定义了包名并且保存到了class文件上,所以在这里调用不到。

解决方案为:到包名最初始目录运行java命令。即com文件夹所在目录,如图:

sh java 启动脚本编写 bat脚本启动java jar_JAVA_03


运行java+空格+完整包名+类名

sh java 启动脚本编写 bat脚本启动java jar_java_04

4,编写bat脚本

把下面内容复制到一个txt中,重命名为.bat文件

@echo off
set CLASSPATH=%CLASSPATH%;  
set PATH=%PATH%  
set JAVA_HOME=%JAVA_HOME%
java com.bobo.test.recursion.RecursionTester
exit
@pause

保存,双击运行,成功
脚本解释:
@echo off 关闭回显
set CLASSPATH 好比设置运行时环境变量
exit 顾名思义就是退出
pause 玩游戏都知道,暂停。有时候安装一些软件时候有提示“”按任意键继续“”就是这玩意儿
如果在脚本中想添加注释信息可以用rem 注释内容

@echo off
rem 我这一行是注释
echo 上一行是注释,但是你看不到
@pause

5,用bat文件启动jar文件

思路同上面一样的,唯一区别就是首先把要启动的jar包先加载到classpath里,脚本如下

@echo off
set CLASSPATH=%CLASSPATH%;  
set PATH=%PATH%  
set JAVA_HOME=%JAVA_HOME%
java -classpath "TestProject-1.0-SNAPSHOT.jar;" com.bobo.test.recursion.RecursionTester
@pause

其中TestProject-1.0-SNAPSHOT.jar是我生成的jar包,包含我的带有main方法的测试类RecursionTester。
注意:classpath里面的分号;必不可少

6,工程包含多个jar包和其他配置文件

假如工程比较复杂,依赖不同地方jar的包和一些配置文件如xml,properties怎么办?那就在classPath中把他们都包含进来
java -classpath “TestProject.jar;yourLibs/;otherLib/;config/*;” com.test.Main
同样注意 "config/*;"最后面还有个分号;

7,还想进行远程调试,remote debug

那就把debug参数加进来吧。这里开启了9898断开来做监听。
-Xrunjdwp:transport=dt_socket,address=9898,server=y,suspend=n

一个加载了多个jar包和其他配置文件,并且需要对其进行remote debug的完整bat脚本

脚本如下:

@echo off
set CLASSPATH=%CLASSPATH%;  
set PATH=%PATH%  
set JAVA_HOME=%JAVA_HOME%
java -server -Xrunjdwp:transport=dt_socket,address=9898,server=y,suspend=n -classpath "yourLibs/*;otherLib/*;config/*;" com.test.Main
exit
@pause