您的位置:首页 > 编程语言 > Java开发

maven集成eclipse根据resources profiles filtering进行不同环境打包部署

2017-09-19 17:56 597 查看
本篇文章适合初学者

因为小弟也是一个初学者,可能很多地方都理解不对,所以只能讲解一些个人在实际操作种遇到的问题,以及是如何解决的;放到博客中,第一是给自己一个标记,下次遇到相同问题知道如何处理,另外还可以帮助很多初学者在找到纷杂的问题的时候无法找到正确的答案而浪费大量的时间;如果文中说得不对的地方希望如果有人看到这篇文章的时候能给予指正。

maven是一个强大的项目管理工具,在这里我们就不再讲它的具体功能了;因为我也讲不清楚。哈哈…

当我们在开发,测试,上线部署的时候每次打包都需要修改大量的配置文件,这个文件修改的时候实在是痛苦无比,因为小弟从一个开发变为负责人的时候,发现自己有很多的不足,因为项目初期代码管理是无序的,所以每次部署的时候我都无比的痛苦,每次发布,打包,修改各种java开发中的配置,模块杂乱无比,代码量也很大,这个时候我在想有没有什么工具可以将我每次打包部署修改配置文件的事情抽离出来,直接通过预先的配置,在我上线的时候修改一下某一个配置就可以完成所有配置的切换呢,因为我以前在某大公司做过一段时间,记忆中有过他们在配置文件中有dev,sit,uat,pro这样的配置,而且当时用的项目管理框架是maven,所以我觉得我是时候改变一下思路了,换框架,把所有代码重构一下,用maven来管理我们的各种依赖和打包部署的部分工作,将无序的代码整理得有序;

花了一天时间把nexus私服搭建完成,把代码框架搭建完成,这时候我发现我无法做到根据不通环境进行打包;这是一个坑爹的得事情;

后来通过不断找资料找到一个根据profile来打包的方式,这时候我各种尝试,发现我能成功的分片打包了,但是我发觉我在src/mian/resources目录下的spring目录和mapper目录没有被打包成功,同时同级别的其他配置文件没有被打包成功;这时候某大神发给我一段代码



根据大神的指导我修改了我的配置,然后执行maven install ,ok完美;

下面我就详细介绍一下我的代码结构;



我的目录就想上面这张图片一样,dev和st、pro分别放置了db配置文件redis配置文件对应本地环境,测试环境,开发环境;但是我打包的时候如何做到将我想要的对应环境的配置文件打出来呢?

这时候profiles出来了,你可以将你想要打包的文件对应配置到这个地方;

<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
<!--这个是你想要打包对应的文件名称,可以查看上图我的目录结构中就存在这个目录-->
</properties>
<activation>
<activeByDefault>true</activeByDefault>
<!-- 这个配置如果配置为true,则默认执行打包操作的时候会把这个配置下的文件打入你的war包中-->
</activation>
</prifile>
<!--下面的就不作介绍,可以参考dev的描述-->
<profile>
<id>st</id>
<properties>
<env>st</env>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</prifile>
<profile>
<id>st</id>
<properties>
<env>st</env>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</prifile>
</profiles>


下面介绍如何打包,我们构建打包的配置都是放到build中的,所以我们自动切换环境打包需要过滤的文件资源也是要放到build中;我是这么做的

<build>
<finalName>task</finalName><!-- 最终生产war包的名称,这里就不讲它了-->
<resources>
<resource>
<directory>src/main/resources/${env}</directory>
<!-- 这是什么意思呢,directory 从字面上来说它就是目录的意思,我们可以理解为我讲要把这个目录下的文件拿出来,待会儿打包的时候要放到我想放的地方去,${env}什么意思呢,我相信用过jsp的都不陌生,这就是一个变量接收的声明方式,接收什么变量呢,就是前面我们配置的profile中默认激活的变量,所以一会儿打包的时候就会将该目录下的文件打包的时候放到我们的classes目录下去-->
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>mapper/*.xml</include>
<include>spring/*.xml</include>
<include>*.conf</include>
<include>*.properties</include>
</includes>
<!--上面的配置的意思是,在src/mian/resources目录下的mapper下的所有xml文件,spring目录下xml文件,所有后缀为.conf的文件,所有后缀为.properties的文件将会在这个替换变量的过程中不回被处理,下面的filtering配置为false表明我上面的配置不会在打包的时候被覆盖-->
<filtering>false</filtering>
<resource>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>dev/*</exclude>
<exclude>st/*</exclude>
<exclude>pro/*</exclude>
</excludes>
<!-- 这是什么意思呢,从字面来理解就是例外的,意思说我上面配置那个不被覆盖部分不包含我上面这个配置哟,这个就是我想要作为变量的部分,我在打包的时候这部分是不会展示出来的哟,我只是在第一个配置的地方将这个配置对应的变量中文件打包到classes中 -->
<filtering>true</filtering>
<resource>

</resources>
</build>


上面的配置文件不是全部的,比如打包插件什么的就不说了。

接下来说如何打包了:

<!--开发环境,直接在项目上右键 Run as --- maven clean ==> maven install-->
或者你打开项目目录文件 cmd打开dos窗口输入:mvn clean package -Pdev
如何是测试环境可以通过deploy打包到你想要发包的nexus上或者在本地打包:mvn clean package -Pst
生产环境:mvn clean package -Ppro
看到这个代码应该自己就能明白,我就不介绍了


好,那就看一下我本地的代码生产的结构吧

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: