「这是我参与2022首次更文挑战的第39天,活动详情查看:2022首次更文挑战」
本文项目代码gitee地址:gitee.com/wei_rong_xjvm原理i…
本篇文章,我们来研究下如何将你的项目打包,通过启动脚本,直接启动执行的方式。相信无论是你在使用nacos,使用skywalking等等一系列的组件时,都是通过脚java编译器本直接启动的,java模拟器无需在启动时候,手动敲命令,指定jvm参数等。当然了,我们自己的项目,也想要有这样的效果。对于运维人员来讲,部署时能够提供极大地便利。
一、开始搭建
下面我将详细展示每个步骤,以工程rob-necehttp 302ssities-gateway
为例jvm性能调优。
1.1 准备package.xml
package.xml是干什么用的呢?
-
它指定了我们最终打包的格式,通常是
zip
。 -
将变量值项目必要文件windows10打包进zip包中。
- readme.md等等的说java环境变量配置明性文件
- *.bat、 *.sh 等启动脚本
- jar包
完整的package.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>bin</id>
<!-- 最终打包成一个用于发布的zip文件 -->
<formats>
<format>zip</format>
</formats>
<fileSets>
<!-- 把项目相关的说明文件,打包进zip文件的根目录 -->
<fileSet>
<directory>${project.basedir}</directory>
<outputDirectory>${file.separator}</outputDirectory>
<includes>
<include>README*</include>
<include>CHANGELOG*</include>
<include>LICENSE*</include>
<include>NOTICE*</include>
</includes>
</fileSet>
<!-- 把项目目录中的windows环境启动脚本文件,打包进zip文件的根目录 -->
<fileSet>
<directory>./src/main/resources/package</directory>
<outputDirectory>${file.separator}</outputDirectory>
<lineEnding>windows</lineEnding>
<includes>
<include>*.bat</include>
</includes>
</fileSet>
<!-- 把项目目录中的linux环境启动脚本文件,打包进zip文件的根目录 -->
<fileSet>
<directory>./src/main/resources/package</directory>
<outputDirectory>${file.separator}</outputDirectory>
<lineEnding>unix</lineEnding>
<fileMode>0755</fileMode>
<includes>
<include>*.sh</include>
</includes>
</fileSet>
<!-- 把项目工程本身的jar文件,打包进zip文件的lib目录 -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>${file.separator}lib</outputDirectory>
<includes>
<include>${project.artifactId}-${project.version}.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>
我们创建变量的定义一个packagejvm性能调优
文件夹,用来存在打包相关的文件信息,package.xml也放在其中javaee。

1.2 编写start.sh脚本
因为我绝大多数部署在linux服务器,所以本文变量英文只提供.sh
脚jvm原理本,需要windows的http 302.bat
文件,请自行搜索吧。
start.sh做了什么?
- 获取java环境变量
- 指定了jvm参java环境变量配置数
- 组装启动命令
- 执行组装好的命令
完整的start.sh如下所示:
#!/bin/bash error_exit () { echo "ERROR: $1 !!" exit 1 } [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java [ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME if [ -z "$JAVA_HOME" ]; then if $darwin; then if [ -x '/usr/libexec/java_home' ] ; then export JAVA_HOME=`/usr/libexec/java_home` elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" fi else JAVA_PATH=`dirname $(readlink -f $(which javac))` if [ "x$JAVA_PATH" != "x" ]; then export JAVA_HOME=`dirname $JAVA_PATH 2>/dev/null` fi fi if [ -z "$JAVA_HOME" ]; then error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!" fi fi export SERVER="rob-necessities-gateway" export JAVA_HOME export JAVA="$JAVA_HOME/bin/java" export BASE_DIR=`cd $(dirname $0)/..; pwd`/${SERVER} #=========================================================================================== # JVM Configuration #=========================================================================================== JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m" JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p') if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/gc.log:time,tags:filecount=10,filesize=102400" else JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext" JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M" fi JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/lib/${SERVER}.jar" JAVA_OPT="${JAVA_OPT} --server.max-http-header-size=524288" echo "$JAVA ${JAVA_OPT}" # start nohup $JAVA ${JAVA_OPT} >> /dev/null 2>&1 & echo "server is starting"
至此为止,准备工作就基本完成了,下面我们开始处理pom.xml
文件。
1.3 编辑pom.xml
在pom文件的<build>
标签下的<pwindows无法连接到打印机lugins>jvm调优面试题;
标签当中,添加http 404如下打包插件内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<descriptors>
<descriptor>./src/main/resources/package/package.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
二、打包验证
经过前面的准备过程,我们直接进行打包验证,直接使jvm调优面试题用命令mvn install
即可,我这里使用idea的界面来操作,选择instjava环境变量配置all:

打包后的文件,windows许可证即将过期怎么办在项目的jvm性能调优target目录下,如下图所示:

其中这个zip
文件是我们需要的,其内容如下所示是:

lib中是jar包。
三、部署验证
3.1 环境准java培训备
我们将zip
文件上传到服windows键是哪个务器,解压后进行启动测试,解压命令如下:
[root@hecs-402944 opt]# unzip rob-necessities-gateway-0.0.1-SNAPSHOT-bin.zip Archive: rob-necessities-gateway-0.0.1-SNAPSHOT-bin.zip creating: rob-necessities-gateway-0.0.1-SNAPSHOT/ creating: rob-necessities-gateway-0.0.1-SNAPSHOT/lib/ inflating: rob-necessities-gateway-0.0.1-SNAPSHOT/startup.sh inflating: rob-necessities-gateway-0.0.1-SNAPSHOT/lib/rob-necessities-gateway-0.0.1-SNAPSHOT.jar
注意: 此处必须说明一个问题,如果你装的是oracle的jdk,那么直接启动就没有问题了,但是如果你装的是openjdk,需要注意两点:
-
opewindows10njdk安装是否正确,通常需要两步安装过程
安装jre:windows是什么意思
sudo yum install java-1.8.0-openjdk -y
安装jdk:
sudo yum install java-1.8.0-openjdk-devel -y
-
环境变量配置是够正确
vi /etc/profile
在其windows许可证即将过期怎么办中添加环境变量
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
不httpwatch知道java的路径可以使用下面的命http代理令和步骤查找:
[root@hecs-402944 rob-necessities-gateway-0.0.1-SNAPSHOT]# which java /usr/bin/java [root@hecs-402944 rob-necessities-gateway-0.0.1-SNAPSHOT]# ls -lrt /usr/bin/java lrwxrwxrwx 1 root root 22 2月 25 11:04 /usr/bin/java -> /etc/alternatives/java [root@hecs-402944 rob-necessities-gateway-0.0.1-SNAPSHOT]# ls -lrt /etc/alternatives/java lrwxrwxrwx 1 root root 73 2月 25 11:04 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/bin/java
其中的
/usr/lihttp 302b/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
即是安装路径。
3.2 启动
进入解压后的项目文件夹中,执行脚本命令变量4:
[root@hecs-402944 rob-necessities-gateway-0.0.1-SNAPSHOT]# ./startup.sh /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/bin/java -Xms512m -Xmx512m -Xmn256m -Djava.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/lib/ext -Xloggc:/opt/rob-necessities-gateway/logs/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -jar /opt/rob-necessities-gateway/lib/rob-necessities-gateway.jar --server.max-http-header-size=524288 server is starting
注意,如windows更新有必要吗果发现没有任何变化,可以将输出的命令行直接执行,看看报错内http://192.168.1.1登录容,如下所示:windows更新有必要吗
[root@hecs-402944 rob-necessities-gateway-0.0.1-SNAPSHOT]# /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/bin/java -Xms512m -Xmx512m -Xmn256m -Djava.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/lib/ext -Xloggc:/opt/rob-necessities-gateway/logs/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -jar /opt/rob-necessities-gateway/lib/rob-necessities-gateway.jar --server.max-http-header-size=524288 Error: Unable to access jarfile /opt/rob-necessities-gateway/lib/rob-necessities-gateway.jar
报错内容是没有找到此jar包rob-necessities-gateway.jar
,原因一目了然了windows7旗舰版,我们的jar包是带有版本号的:

如何修改?
注意我们前面提到得package.xml
文件,如下所示位置:

红色框内的两部分其实分别是pom.xml的项目名和项目版本,两部分组合生成最终jar包的名称。
所以java编译器我们在startup.sh
当中的配置要和这个保持一致,即
export SERVER="rob-necessities-gateway-0.0.1-SNAPSHOT"
前面的startup.sh
之所以放错,是为了增加大家的印象,不要拿过去直接用,导致后面遇到问题不知如何下手。
经过上面全部过程,就能够成功启动了httpwatch,成功后项目文件夹会生成其日志文件:


本文到此全部结束!希望对java语言您有所帮助。
本文项目代码gitee地址:gitee.com/wei_rong_xi…
评论(0)