在前后端分离的项目中,最后前后端项目开发完毕都需要进行打包部署发布到服务器上面运行,所以需要对前端开发的项目进行打包,然后将打包后的文件放在spring boot项目中的resource/static目录下面
前端项目
点击edit configuration进入run/debug configuration页面,点击+号,选择npm,name随便起,这里我们就用build好了,见名之意,在执行脚本中选择build命令,也就是在scripts中选择build,之后点击运行即可进行项目打包
打包完成如下图所示
此时再目录中就会生成一个dist文件
这里面就是存放的是我们打包后的文件,打开来看看里面都有啥
就是我们的css、js、img等文件,这些文件都是压缩过后的,内容格式发生了变化,内容是一样的,还有就是我们的首页,以及title的图标
我们将此dist文件复制到后端spring boot项目中的resources/static目录下
这里面的静态资源都会被spring security拦截,所以需要到我们的securityconfig配置类中,告诉spring security不要拦截这些静态资源,在configure(WebSecurity web)方法中,指定放过的路径
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/login","/phone/food/**","index.html","favicon.ico","/static/**");
}
然后再对spring boot项目进行打包,打成jar包,直接将jar包放到linux上面去运行,能打成jar包就是因为在我们的spring boot项目中多了一个依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
五个功能分别是:
build-info:生成项目的构建信息文件 build-info.properties
repackage:这个是默认 goal,在 mvn package 执行之后,这个命令再次打包生成可执行的 jar,同时将 mvn package 生成的 jar 重命名为 *.origin
run:这个可以用来运行 Spring Boot 应用
start:这个在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理
stop:这个在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理
在target中有两个jar,来看看
第一个baiwei-0.0.1-SNAPSHOT.jar表示打包成的可执行 jar ,第二个baiwei-0.0.1-SNAPSHOT.jar.original则是在打包过程中 ,被重命名的 jar,这是一个不可执行 jar,但是可以被其他项目依赖的 jar。通过对这两个文件的解压,我们可以看出这两者之间的差异。都先改成zip的后缀,解压看看目录结构
先打包我们的可执行jar,我们的代码在boot-inf/classes目录下,还有一个 META-INF 的目录,该目录下有一个 MANIFEST.MF 文件,打开该文件,内容如下:
文件内容
Manifest-Version: 1.0
Implementation-Title: baiwei
Implementation-Version: 0.0.1-SNAPSHOT
Start-Class: com.zhouym.baiwei.BaiweiApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.1.7.RELEASE
Created-By: Maven Archiver 3.4.0
Main-Class: org.springframework.boot.loader.JarLauncher
可以看到,这里定义了一个 Start-Class,这就是可执行 jar 的入口类,Spring-Boot-Classes 表示我们自己代码编译后的位置,Spring-Boot-Lib 则表示项目依赖的 jar 的位置。
换句话说,如果自己要打一个可执行 jar 包的话,除了添加相关依赖之外,还需要配置 META-INF/MANIFEST.MF 文件。
再来看看不可执行jar的目录结构
直接就是我们的代码部分,不可执行 jar 根目录就相当于我们的 classpath,解压之后,直接就能看到我们的代码,它也有 META-INF/MANIFEST.MF 文件,但是文件中没有定义启动类等。
Manifest-Version: 1.0
Implementation-Title: baiwei
Implementation-Version: 0.0.1-SNAPSHOT
Build-Jdk-Spec: 1.8
Created-By: Maven Archiver 3.4.0
这个不可以执行 jar 也没有将项目的依赖打包进来。
从这里我们就可以看出,两个 jar ,虽然都是 jar 包,但是内部结构是完全不同的,因此一个可以直接执行,另一个则可以被其他项目依赖。
下面就将jar包部署到linux上面去
nohup表示当终端窗口关闭时,不要把spring boot项目停掉,还是要继续运行,&表示在后台运行
网友评论