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

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

目标

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

项目目录如下

在这里插入图片描述

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

启动脚本编写

@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

第一句:启用变量延迟;
第二句:循环将.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  

若在Linux下则

#!/bin/sh
CP=.
for i in ./lib/*.jar
do
    CP="$i:$CP"
done
java -cp "$CP" com.xxx.mengfusheng.ServerMain &

注意点

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

附注 POM配置

<build>
		<resources>
            <!--指定src/main/resources资源要过滤-->
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
	
		 <plugins>
		 	 <!-- 可执行jar插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <!--这些配置将写入到MANIFEST.MF文件中-->
                    <archive>
                        <!--指定程序入口
                        <manifest>
                            <mainClass>com.xxx.ServerMain</mainClass>
                        </manifest>
                        -->
                        <manifestEntries>
                        		<!-- (配置文件外置目录) -->
                            <Class-Path>resources/</Class-Path>
                            	<!--指定 agentmain 方法所在的类路径-->
                        	<Agent-Class>hotupdate.agent.MyAgent</Agent-Class>
								<!--是否能重定义此代理所需的类-->
                        	<Can-redefine-Classes>true</Can-redefine-Classes>
								<!--是否能重新转换此代理所需的类-->
                        	<Can-Retransform-Classes>true</Can-Retransform-Classes>
                        </manifestEntries>
                        <manifest>
                        	<addClasspath>true</addClasspath>
                    	</manifest>
							
                    </archive>
                    <!-- 过滤掉不希望包含在jar中的文件  --> 
                    <excludes>
                        <exclude>**/*.xml</exclude>
                        <exclude>**/*.txt</exclude>
                        <exclude>**/*.properties</exclude>
                        <exclude>**/*/*.json</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <!-- maven资源文件复制插件 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <executions>
                    <execution>
                        <id>copy-config</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/resources</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/resources</directory>
                                    <includes>
                                        <exclude>**/*.xml</exclude>
                        				<exclude>**/*.txt</exclude>
				                        <exclude>**/*.properties</exclude>
				                        <exclude>**/*/*.json</exclude>
                                    </includes>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                            <encoding>UTF-8</encoding>
                        </configuration>
                    </execution>
                </executions>
            </plugin>-->
		 
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.6.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>

maven打包的指令如下:

mvn dependency:copy-dependencies -DoutputDirectory=target/lib package

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...