今天测试说要有一个本地运行的服务器项目,这样测试器游戏来可以随意修改,无需通知服务器。那简单啊,直接打包丢给他即可。
目标
- 本地无需配置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 &
注意点
- 项目中的配置都放在主jar包外面
- 第三方的jar包也放在主jar包外面
- 主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