今天来说说
- pom文件和properties文件配置
- maven环境勾选之后,怎么识别到?
- 在IDEA里面怎么进行Maven打包项目脚本设置,做到一键打包呢?
现在的项目一般都有开发线、测试线、生产线三个服务。
开发线就是自己本地的服务,很简单,直接tomcat或者spingboot点击Run就好了。
测试线一般为了模拟客户操作环境而存在,一般功能开发完成,先在测试线部署,测试一切通过,再直接部署生产线,这里需要使用Maven打包。
生产线则正式投产了,当然要是正常普通部署,依旧需要打包。
一、pom文件和properties文件配置
1.1 properties文件配置
首先找到application.properties文件,没有的话需要创建一个,并且在里面进行环境的定义
spring.profiles.active = @environment@
自定义。写自己名字都无所谓
注意格式:@***@
1.2 定义所需环境的properties文件
在每一个文件里面再次进行环境的相应
spring.profiles.active=dev
这里注意,spring.profiles.active不变
写在这里的文件名称后缀名,就是文件里面active指代的数据
1.3 pom文件的对应设置
pom文件里面需要同步做一下配置
配置在位置在dependencies同级,完整代码如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>&</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>application.properties</include>
<include>application-${environment}.properties</include>
<include>**/*.xml</include>
<include>**/*.html</include>
<include>**/*.css</include>
<include>**/*.js</include>
<include>**/*.png</include>
</includes>
</resource>
</resources>
</build>
主要分为三大部分,下面分部做解释分析
- plugins --- plugin --- org.springframework.boot --- org.springframework.boot
- plugins --- plugin --- org.springframework.boot --- org.apache.maven.plugins
- resources --- resource --- path
1.3.1 第一部分解释
关于spring-boot-maven-plugin的信息,有一篇博客写的比较好
1.3.2 第二部分解释
另一个plugin里面配置了maven-resources-plugin。
其中有:
<delimiter>@</delimiter>
注意看,这块的意思是:使用@符号将spring.profiles.active 中的名称进行分隔,由于在xml文件里面,所以这块如果定义的符号比较特殊,需要转义。
举例:& —> &
spring.profiles.active = &environment&
对应了
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>&</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
1.3.3 第三部分解释
打包过程中,怎么告诉编译,我的配置文件在哪里,就看resource
请注意里面的
<include>application.properties</include>
<include>application-${environment}.properties</include>
前一句告诉编译,我还需要application.properties的打包
第二句告诉编译,另一个环境的打包地址。
${ }这种格式在sql注入的时候比较常见,这块用法一致。就是说取到的maven状态,替换了这块的environment位置,生成的文件路径。
1.3.4 maven中pom文件的影响
配置好之后,重新加载maven信息,就会发现旁边的maven工具里面已经可以看到三个不同的环境:
写好了properties,pom文件里面也相应的配置了,发现服务可以启动。
如果这时候变化properties中定义好的数据或者pom文件里面的对应节点名称,会发现服务依旧可以启动。
这是为什么?
因为pom文件里面定义的信息是由maven控制的,修改名称但是maven没有重新加载,里面存储的数据依旧没变,那么重启服务的时候,会发现其实名字是对应的,没有变化。
二、负责管理的jar包【只为看部署步骤可跳过此节】
properties,pom文件配置名称不一致的时候
启动报错,原因是什么?
怎么识别到的properties文件?
来吧,展示
2.1 获取启动类配置
待补
2.2 获取meven勾选项
待补
2.3 组合打包
待补
三、打包方式
3.1 借助maven工具
在maven工具栏中Profiles选择需要的环境
点击Lifecycle中点击package进行打包
这时候会先进行清理,Target文件删除,重新打包。
3.2 命令行打包
命令行打包可以错过单元测试直接进行,适用场景比较广
mvn clean package -Ptest -DskipTests --- 测试线
mvn clean package -Pdev -DskipTests --- 正式线
mvn clean package -Pprod -DskipTests --- 开发线
需要在 Terminal 控制台进行,一般情况下,已经进入到文件目录中,直接输入命令:
如果没有,那么就 cd 一路进去再输呗。
3.3 本地预测
一般对于测试线和正式线这种大家共用的系统来说,发版失败,大家都得等,为了避免这种尴尬,我一般会在打包完成之后,使用命令在本地执行一下jar包,探探虚实。
首先进入target目录,毕竟要找的jar包在人家目录下,得经过人家允许,是吧!
使用命令,开始模拟启动。
java -jar jar名.jar