lasspath
可以使用 classpath 指定类加载的路径,但 classpath 的生效是有条件的:
命令 | classpath 生效 | 说明 |
---|---|---|
java -cp .;lib/x.jar Test | ✔ | 运行 class |
java -cp lib/x.jar -jar app.jar | ✖ | 运行 jar |
Loader.path
Spring Boot 程序大多是打成 jar 包,使用 java -jar boot.jar
的方式启动 (此时 -cp 无效),可以使用 loader.path 指定类加载路径加载其他 jar,但 loader.path 生效是有条件的:
命令 | MANIFEST.MF 的 Main-Class | loader.path 生效 | 打包配置 |
---|---|---|---|
java -Dloader.path=./lib -jar app.jar | JarLauncher | ✖ | 默认配置 |
java -Dloader.path=./lib -jar app.jar | PropertiesLauncher | ✔ | 额外配置 |
loader.path 实现了 classpath 的功能。
spring boot 我们只需要把常用的依赖包单独抽取出来即可。
我们只需要在pom.xml文件配置一下即可。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- 此处省略多余信息.....--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 关键点:指定layout = ZIP;打包的时候就不会把依赖的jar一起当进去 --> <layout>ZIP</layout> <!-- 如果打包时需要指定保留某些依赖,可以使用includes --> <includes> <!-- 例如本次打包我希望保留alya-common这个依赖 --> <include> <groupId>com.alya</groupId> <artifactId>alya-common</artifactId> </include> </includes> </configuration> </plugin> </plugins> </build> </project>
这里的lib指依赖所在的路径,这里我就不给图了,项目正常启动就是成功!
java -jar -Dloader.path=lib web.jar
如果lib分散存放在不同路径,可以用逗号隔开,例如:
java –Dloader.path=/v1/lib,/v2/lib -jar handover-demo.jar
关于lib包。我们可以手动解压最初的包得到
找到生成的jar包解压出lib部分并保存
BOOT-INF\lib
或者使用maven插件生成:
此插件用于将依赖包抽出-->
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--项目的启动类--> <mainClass>com.xxx.WebApplication</mainClass> <!--解决windows命令行窗口中文乱码--> <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments> <layout>ZIP</layout> <!--配置需要打包进项目的jar--> <includes> <!--这里是填写需要包含进去的jar, 必须项目中的某些模块,会经常变动,那么就应该将其坐标写进来 如果没有则non-exists ,表示不打包依赖 --> <include> <groupId>non-exists</groupId> <artifactId>non-exists</artifactId> </include> </includes> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <!--此插件用于将依赖包抽出--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <excludeTransitive>false</excludeTransitive> <stripVersion>false</stripVersion> <includeScope>runtime</includeScope> </configuration> </execution> </executions> </plugin>
#!/bin/sh #应用名称 APP_NAME=web.jar #当前执行的profiles PROFILES=pro #基础地址 BASE_NAME=`pwd` #web执行地址 WEB_NAME=$BASE_NAME/$APP_NAME # lib地址 LIB_NAME=$BASE_NAME/lib # log日志地址 LOG_PATH=../logs/xx.log if [ "$1" = "" ]; then echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m" exit 1 fi #启动项目 function start() { PID=`ps -ef |grep java|grep $WEB_NAME|grep -v grep|awk '{print $2}'` if [ x"$PID" != x"" ]; then echo "$WEB_NAME is running..." else nohup java -Dloader.path=$LIB_NAME -jar $WEB_NAME --spring.profiles.active=$PROFILES >/dev/null 2>&1 & sleep 3 status fi } # 停止项目 function stop() { echo "Stop $WEB_NAME" PID="" query(){ PID=`ps -ef |grep java|grep $WEB_NAME|grep -v grep|awk '{print $2}'` } query if [ x"$PID" != x"" ]; then kill -9 $PID echo "$WEB_NAME (pid:$PID) exiting..." while [ x"$PID" != x"" ] do sleep 1 query done echo "$WEB_NAME exited." else echo "$WEB_NAME already stopped." fi } #重起项目 function restart() { stop echo "$WEB_NAME is starting..." sleep 3 start } #查看项目状态 function status() { PID=`ps -ef |grep java|grep $WEB_NAME|grep -v grep|wc -l` if [ $PID != 0 ];then echo "$WEB_NAME is running..." else echo "$WEB_NAME is not running..." fi } #实施监控日志 function log() { tail -n 20 -f $LOG_PATH } #查看日志 less命令 function less() { less -i -N $LOG_PATH } case $1 in start) start;; stop) stop;; restart) restart;; status) status;; log) log;; less) less;; *) esac
标签:WEB,grep,NAME,lib,Spring,jar,loader,Boot,path From: https://www.cnblogs.com/youxin/p/17380438.html