博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用maven-war-plugin 对Maven项目进行动态打包
阅读量:4071 次
发布时间:2019-05-25

本文共 3393 字,大约阅读时间需要 11 分钟。

插件官方地址:   

在进行项目发布的时候,可能会碰到这样的情况, 希望在保持项目源代码不变的前提下,希望能够针对不同的运行环境获得相应的运行包.(比如war包)

那么使用配置文件是可以解决这个问题的.可以将项目中和运行环境相关的一些参数放到配置文件中, 每个环境一份,这样,在打包前只要指定这次打包我需要指定这次打包需要哪个配置文件即可,于是就可以使运行包与环境相对应了.但是这样的做法有个不好的是, 配置文件的选择需要人为干涉——如果碰到这样的情况:某某,你给我**环境的包. 这个时候, 采用平时的做法就是马上回忆我要去改下哪个地方, 让项目知道我要用什么配置了.

现在有另一个做法, 使用maven-war-plugin这个插件可以在执行打包命令的时候指定我要打哪个环境的包, 而不需要去关注我现在要用什么配置文件了.当然只适用于Maven项目.

例如: maven package –P  youEnvName   这样你就可以打出一个youEnvName环境的的运行包了.

第1步 还是要为不同环境准备不同的运行参数: 这里在src/main/resources 目录下建两个文件,分别用来配置两个环境的一些不同参数.注意,配置文件需要是一个合法的properties文件:如:

src/main/resources/IProject-test.properties   src/main/resources/IProject-real.properties

分别对应测试和正式两个环境. 里面的内容当然就是两个key一个value不一个的key-value对了.

src/main/resources/IProject-test.properties 中的内容通常是这样(仅仅是样例)

system.envid=real  method.version=1.0.0. release   ………

第 2 步 ,在src/main下面新建一个目录,例如:src/main/packageFilter

然后将你要用到这个几个参数的那一个或多个配置文件文件找出来(通常这些配置文件是在WEB-INF目录中的),将他们移动到src/main/packageFilter目录中去.(这个时候你可能会问:配置文件换地方了,项目懂吗? 先不着急.)df 

这些配置到src/main/packageFilter目录中后,要对其中的使用上面配置的那几个参数作一下修改(仅仅是样例)

${ system.envid }

这里看到了吧, 参数已经用一个${key} 的占位符. 

第3步 ,在pom文件添加打包插件的依赖:

src/main/resources/IProject-test.properties
org.apache.maven.plugins
maven-war-plugin
src/main/packageFilter
true
WEB-INF
这里就可以解决刚才提到的那个问题了,配置文件看上去已经移动了,但是并不需要告诉你的项目,其实在项目加载配置文件的时候,我们已经将一个完整的,不包含任何占位符的配置放在了项目本应该放的位置 ,这里由下面这段配置实现的:

src/main/packageFilter
true
WEB-INF

这段配置的意思是: 在打包的时候,要将<directory>src/main/packageFilter</directory>中的文件全部搬到

  <targetPath>WEB-INF</targetPath>

目录中去,并且这个过程是覆盖的.   同时<filtering>true</filtering>指定了在这个”搬运”过程中,需要进行过滤.

另外,这里还有个标签: <filters>….</filters> 先不讲

好了,新的问题出来了,什么是过滤.现在进入最后一个步骤. 

第4步 , 还是在pom.xml文件中, 配置如下信息:

profile for bulid
test
src/main/resources/IProject-test.properties
real
src/main/resources/IProject-real.properties

好了,现在知道了吧, 根据单词filter可以猜到这个配置是干嘛了.他的工作过程就是在打包的时候,

使用命令

mvn package –P real.

那么他就会找到<id>real</id>对应的那个参数信息src/main/resources/IProject- real.properties, 然后用其中的key-value对来过滤<directory>src/main/packageFilter< /directory>中的文件,并将填充完整后的配置文件全部搬运到<targetPath>WEB-INF</targetPath>中去.另外,由于配置<plugin>的时候留下一个标签

src/main/resources/IProject-test.properties
……..

这个就是所谓的默认参数,也就是当你执行 mvn package,他默认使用这个文件中的参数来过滤,相当于执行 

mvn package –P test. 

如何调试.

     从这里介绍的方法可以看出, 配置文件中的参数是在打包的时候才会被真正填充进去的, 那么对于那种希望在Eclipse中调试的项目怎么办.(例如用Jetty插件来调试Maven项目的时候, 并不会将项目打包后来执行, 而是直接运行src/main/webapp作为项目root路径.) 

    上面已经提到了,maven-war-plugin 在工作过程中是把 <directory>src/main/packageFilter</directory> 中的文件全部搬到 <targetPath>WEB-INF</targetPath>下,并且是覆盖.

所以可以这样处理,在开发 调试的时候,可以在配置文件的目录中放上完整的配置文件,里面的填充需要的参数,这位就可以顺利进行调试了, 并且不影响打包. 

注意事项

     现在可以调试了,但是要注意, 在开发调试过程中,如果对这个配置文件有改动,一定要反映到模板文件中去,所以建议在这个需要被填充的配置中添加上一些注释,可以提醒自己:

转载地址:http://yhmji.baihongyu.com/

你可能感兴趣的文章
程序猿应该了解的密码技术
查看>>
关于安卓端okhttp框架请求后端服务丢失Authorization请求头的问题
查看>>
RocketMQ 消费消息过程分析
查看>>
Dubbo源码分析之三:服务引用
查看>>
Spring的重要拓展点BeanPostProcessor
查看>>
RocketMQ 事务消息使用与分析
查看>>
Spring-Bean后置处理器之CommonAnnotationBeanPostProcessor
查看>>
Dubbo源码分析之二:服务暴露
查看>>
Spring-Bean后置处理器之AnnotationAwareAspectJAutoProxyCreator
查看>>
Dubbo源码分析之一:前置知识
查看>>
Dubbo源码分析之五:服务端响应客户端请求过程
查看>>
RocketMQ 延迟消息的使用与分析
查看>>
RocketMQ-延迟消息的使用与原理分析
查看>>
RocketMQ Reliablity
查看>>
Dubbo源码学习之一:前置准备
查看>>
matlab中的sparse和full以及ground truth matrix
查看>>
用最小二乘做为线性回归的代价函数的一些解释
查看>>
Deep Learning课程作业中深度网络的习题备忘
查看>>
dwz中可编辑行中使用“查找带回”的一个小BUG
查看>>
深度学习中卷积和池化的一些总结
查看>>