• BAT批处理命令启动Java打包的Jar没有指定启动类且第三方lib包在主jar外的项目


    今天测试说要有一个本地运行的服务器项目,这样测试器游戏来可以随意修改,无需通知服务器。那简单啊,直接打包丢给他即可。

    目标

    • 本地无需配置java环境
    • 点击批处理文件即可启动

    项目目录如下

    在这里插入图片描述

    config:项目配置文件
    res:项目的json文件
    lib:项目的jar包
    log:启动日志
    startUp.bat: 启动脚本
    
    • 1
    • 2
    • 3
    • 4
    • 5

    启动脚本编写

    @echo off
    SetLocal EnableDelayedExpansion  
    FOR %%i IN (".\lib\*.jar") DO SET CLASSPATH=!CLASSPATH!;%%~fsi  
    echo %CLASSPATH%   
    .\jre1.8.0_212\bin\java com.xxx.mengfusheng.ServerMain
    EndLocal
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    第一句:启用变量延迟;
    第二句:循环将.jar文件加入,并以短路径的形式加入;
    比如:C:\Program Files\lib\XXX.jar
    变为:C:\Progra~1\lib\XXX.jar
    第三句:显示设置后的CLASSPATH值;
    第四句:还原系统环境设置

    注意:第二句的!CLASSPATH! 与 %%~fsi 的写法,特别是!CLASSPATH!而不是%CLASSPATH%

    如果是想以相对径的加入到CLASSPATH的话,就直接用

    代码如下

    FOR %%i IN ("./lib/*.jar") DO SET CLASSPATH=!CLASSPATH!;%%i  
    
    • 1

    若在Linux下则

    #!/bin/sh
    CP=.
    for i in ./lib/*.jar
    do
        CP="$i:$CP"
    done
    java -cp "$CP" com.xxx.mengfusheng.ServerMain &
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意点

    1. 项目中的配置都放在主jar包外面
    2. 第三方的jar包也放在主jar包外面
    3. 主jar包没有包含启动类,需要在启动的时候指定启动的jar类

    附注 POM配置

    <build>
    		<resources>
                
                <resource>
                    <directory>src/main/resourcesdirectory>
                    <filtering>truefiltering>
                resource>
            resources>
    	
    		 <plugins>
    		 	 
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-jar-pluginartifactId>
                    <configuration>
                        
                        <archive>
                            
                            <manifestEntries>
                            		
                                <Class-Path>resources/Class-Path>
                                	
                            	<Agent-Class>hotupdate.agent.MyAgentAgent-Class>
    								
                            	<Can-Redefine-Classes>trueCan-Redefine-Classes>
    								
                            	<Can-Retransform-Classes>trueCan-Retransform-Classes>
                            manifestEntries>
                            <manifest>
                            	<addClasspath>trueaddClasspath>
                        	manifest>
    							
                        archive>
                         
                        <excludes>
                            <exclude>**/*.xmlexclude>
                            <exclude>**/*.txtexclude>
                            <exclude>**/*.propertiesexclude>
                            <exclude>**/*/*.jsonexclude>
                        excludes>
                    configuration>
                plugin>
                
    		 
    			<plugin>
    				<groupId>org.apache.maven.pluginsgroupId>
    				<artifactId>maven-compiler-pluginartifactId>
    				<version>3.6.1version>
    				<configuration>
    					<source>1.8source>
    					<target>1.8target>
    					<encoding>UTF-8encoding>
    				configuration>
    			plugin>
    		plugins>
    	build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90

    maven打包的指令如下:

    mvn dependency:copy-dependencies -DoutputDirectory=target/lib package
    
    • 1
  • 相关阅读:
    路由的hash模式和history模式(适用于3.x版本的vue-router)
    自学Python 53 多线程开发(三)使用Condition 对象
    CleanMyMac X版本4.14.2中文版新功能介绍
    Spring Cloud Consul
    [Python] OSError: [E050] Can‘t find model ‘en_core_web_sm‘.
    数据库管理工具Navicat16版本,功能优化全新详解
    postman——集合——执行集合——测试脚本——pm对象简单示例02
    吴军《格局》读书笔记
    Qt 国际化翻译
    统计内核代码运行时间
  • 原文地址:https://blog.csdn.net/huanghailiang_ws/article/details/126501894