当前位置: 首页 > Linux

Windows10Linux子系统“Node、Gradle项目”一键构建打包脚本

时间:2023-04-06 18:27:58 Linux

目前正在开发一个Java&Vue.js全栈项目,由以下部分组成:Java后端服务器,基于Vue.js单页应用,基于JavaFX的GUI客户端,以及其他辅助工具。Java服务端和客户端都依赖公共Jar包,基于Vue.js生成的静态文件也必须转移到后端模块的相关目录下,由后端挂载的web服务器管理模块。如果修改了项目中的子模块,需要手动编译移动,再编译父模块。操作繁琐。本文讨论如何通过Windows10的Linux子系统运行Shell脚本来简化和扩展上述操作。之前的一篇文章已经讨论了Linux子系统的使用和Java、Node.js、Gradle等工具在该系统下的配置系统,本文不再赘述。在这篇文章的开头,我们首先优化了Linux子系统“WindowsSubsystemforLinux(WSL)”的用户体验。1、使用wsl-terminal提升WSL的用户体验wsl-terminal是专门为WSL准备的终端模拟器。主体是薄荷味的。它有一些非常友好的特性,使用起来非常方便,也是目前最好的用户体验。推荐使用。感觉自从使用了wsl-terminal之后,既获得了Windows10优秀的界面效果和娱乐性,又同时获得了Linux的专业和高效,而且两者可以完美的融合在一起,完全可以得到更好的用户体验不如macOS。“这就是YY,我还没深入使用macOS,就等着被打脸。”wsl-terminal主要有以下特点:兼容性好(中文显示/输入、24位色、命令输出等都正常)体积小,压缩包只有1.7M多,而且还比较小解压后不到10M,配置简单,直接在标题栏配置mintty即可,wsl-terminal的配置文件也很简单,资源管理器右键直接打开终端模拟器,导航到当前目录。可以链接.sh/.py/.pl脚本以使用wsl-terminal运行。可以链接文本文件以在wsl-terminal中使用vim运行。支持tmux,可以在tmux中打开新的目录,恢复已有的tmux会话等。支持直接在WSL中运行Windows程序。注:本节摘录了本博客的部分内容。2.全栈工程整体结构工程整体结构如下图所示:3.具体脚本指令及含义3.1获取当前Shell脚本所在的绝对路径dirnamefile#获取相对路径pathofthefileecho$0#获取当前执行的脚本文件名pwd#显示当前工作目录从上面的命令中,获取当前shell脚本的绝对路径的命令如下:SH_PATH=$(cd`dirname$0`;pwd)3.2Web静态文件Gradle/Spring项目,静态文件可以存放在./src/main/resources/static目录下。服务器程序在运行时,可以获取该目录下的静态文件,所以需要将编译构建Webpack生成的静态文件存放在该目录下。cp-r./dist/*$SERVER_PATH/src/main/resources/static#复制静态文件到指定位置3.3获取Gradlebuild生成的目标Jar文件的文件名运行gradlebuild后可以找到在$PROJECT/build/libs下生成目标Jar文件,并获取该文件的文件名,以备后面生成Jar运行脚本时使用:NAME=`ls$PROJECT/build/libs`#获取目标文件名onlyfileinthecurrentdirectory3.4获取脚本执行时间每个工程模块编译构建完成后,需要存放在同一个目录下。各时期产生的目录以时间命名区分。BUILD_TIME=`date"+%Y-%m-%d_%H-%M"`#获取脚本执行的时间4.工程一键构建打包Shell脚本4.1脚本具体执行流程清理每个项目的历史构建缓存编译Web项目生成静态文件,并移动到后端项目的相应目录中。编译公共依赖Jar包,并移动到后端工程和客户端工程的对应目录下。编译后端项目和客户端项目。将后端工程和客户端工程编译后生成的Jar文件移入打包目录,以脚本运行时间区分。脚本的具体执行流程如下图所示,具体步骤如下:4.2一键构建打包脚本本文已经详细介绍了脚本的要点和流程,现在具体内容脚本部分贴出,如下:#!/bin/bash#集群设备管理系统项目的web端、模拟客户端、服务器端的整体清理、构建、打包、发布PROJECT_PATH=/mnt/d/项目/ClusterDevicePlatform;#主工程所在目录WEB_PATH=/mnt/d/project/cluster-device-platform-web;#Web模块所在目录SH_PATH=$(cd`dirname$0`;pwd)#脚本所在目录BUILD_TIME=`date"+%Y-%m-%d_%H-%M"`#脚本运行时间UTIL_JAR_PATH=$PROJECT_PATH/messageUtils;#公共Jar模块目录SERVER_PATH=$PROJECT_PATH/ClusterDevicePlatform-server;#服务器模块目录CLIENT_PATH=$PROJECT_PATH/ClusterDevicePlatform-client;#硬件模拟客户端终端模块所在目录#清理工程编译历史文件cd$UTIL_JAR_PATH;rm-rf./build;cd$CLIENT_PATH;rm-rf./build;cd$SERVER_PATH;rm-rf./build;rm-rf./src/main/resources/static;cd$WEB_PATH;rm-rf./dist;#编译Web并将静态页面文件移动到服务器项目中npmrunbuildif[!$?-eq0]thenecho"ErrorinWebcompilation"exit1fiechoWebcompiledmkdir$SERVER_PATH/src/main/resources/staticcp-r./dist/*$SERVER_PATH/src/main/resources/static#Client和Server的编译cd$UTIL_JAR_PATH;gradlebuildcd$CLIENT_PATH;gradlebuildcd$SERVER_PATH;gradlebuild#整理编译要发布的文件mkdir-p$PROJECT_PATH/publish/release/serverRelease_$BUILD_TIMEcd$PROJECT_PATH/publish/release/serverRelease_$BUILD_TIMEcp$CLIENT_PATH/build/libs/*.cp$SERVER_PATH/build/libs/*.cp$SH_PATH/template/*.#组装Client和Server的运行脚本CLIENT_NAME=`ls$CLIENT_PATH/build/libs`SERVER_NAME=`ls$SERVER_PATH/build/libs`echochcp65001>>run-client.ps1echojava-jar-\'Dfile.encoding\'=UTF-8.\\$CLIENT_NAMEcdg-pc100>>run-client.ps1echo'$x=$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")'>>run-client.ps1echochcp65001>>run-server.ps1echojava-jar-\'Dfile.encoding\'=UTF-8.\\$SERVER_NAME>>run-server.ps1echo'$x=$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")'>>run-server.ps1参考链接Shell获取当前工作目录的绝对路径淘宝NPM镜像进入WSL环境的多种方法比较更好用WSL终端环境wsl-terminal官方GitHub仓库