Maven 结合 Spring profile对不同的部署环境打包部署

这是一个草鸡鸡冻人心的时刻,搞了2天终于搞定了,麻麻再也不用担心我部署出错了!!!!!!!

所有profile,spring和maven的,定义均要一致,否则,自己运行看看。

首先,先来讲下spring的profile功能,这个是方便项目的各种环境分离(开发、测试、生产),简单介绍下如何使用。

  1. 在beans中定义环境代码,项目中,我在beans.xml里定义


    1

    <beans profile="develop,test,product"></beans>

  2. 在数据库配置文件中,加入三种profile的各自定义连接,我这里的配置是把test,develop配置设为一样,当然也可以区别开来,看实际环境,这里每个profile里面的配置都要对称,否则会出错哦~

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    <beans profile="test,develop">

            <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

                <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>

                <property name="url" value="jdbc:oracle:thin:@localhost:1521:ora10g"></property>

                <property name="username" value="username"></property>

                <property name="password" value="password"></property>

            </bean>

            <bean id="dataSourceHR"

                class="org.springframework.jdbc.datasource.DriverManagerDataSource">

                <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>

                <property name="url" value="jdbc:oracle:thin:@localhost:1521:ora10g"></property>

                <property name="username" value="username"></property>

                <property name="password" value="password"></property>

            </bean>

        </beans>

        <beans profile="product">

            <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

                <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>

                <property name="url" value="jdbc:oracle:thin:@localhost:1521:ora11g"></property>

                <property name="username" value="username"></property>

                <property name="password" value="password"></property>

            </bean>

            <bean id="dataSourceHR"

                class="org.springframework.jdbc.datasource.DriverManagerDataSource">

                <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>

                <property name="url" value="jdbc:oracle:thin:@localhost:1521:ora10g"></property>

                <property name="username" value="username"></property>

                <property name="password" value="passwd"></property>

            </bean>

        </beans>

  3. 然后就是修改web.xml啦,添加以下代码即可

    1

    2

    3

    4

    <context-param>

        <param-name>spring.profiles.active</param-name>

        <param-value>develop</param-value>

    </context-param>

这样修改后,切换web.xml里的param-value值就可以实现环境切换。

但是呢,这样子就出现一种情况,每次用maven打包都不得不修改web.xml,万一忘记修改web.xml就发布出去,会引起不可想象的情况,所以就想到了用maven集成spring profile,网上搜罗了很多,总结了下并且实际操作演练后,发现是可行滴,以下就是整合maven profile的具体步骤

在pom.xml最下面 build下添加profile

id:spring中配置的profile名称

profiles.activation中配置的要和id一致

build中配置的是项目部署路径,用户名密码等信息


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

<profiles>

       <profile>

           <id>test</id>

           <properties>

               <profiles.activation>test</profiles.activation>

           </properties>

           <build> 

                <plugins> 

                    <plugin> 

                        <groupId>org.codehaus.mojo</groupId> 

                        <artifactId>tomcat-maven-plugin</artifactId> 

                        <version>1.1</version> 

                        <configuration> 

                            <!-- 配置项目自动发布服务器 --> 

                           <url>http://intimeit222:8080/manager</url> 

                            <server>admin</server> 

                        </configuration> 

                    </plugin> 

                </plugins> 

            </build> 

       </profile>

       <profile>

           <id>develop</id>

           <properties>

               <profiles.activation>develop</profiles.activation>

           </properties>

           <activation>

                <activeByDefault>true</activeByDefault>

            </activation>

           <build> 

                <plugins> 

                    <plugin> 

                        <groupId>org.codehaus.mojo</groupId> 

                        <artifactId>tomcat-maven-plugin</artifactId> 

                        <version>1.1</version> 

                        <configuration> 

                            <!-- 配置项目自动发布服务器 --> 

                            <url>http://intimeit111:8080/manager</url> 

                            <server>admin</server> 

                        </configuration> 

                    </plugin> 

                </plugins> 

            </build> 

       </profile>

       <profile>

           <id>product</id>

           <properties>

               <profiles.activation>product</profiles.activation>

           </properties>

           <build> 

                <plugins> 

                    <plugin> 

                        <groupId>org.codehaus.mojo</groupId> 

                        <artifactId>tomcat-maven-plugin</artifactId> 

                        <version>1.1</version> 

                        <configuration> 

                            <!-- 配置项目自动发布服务器 --> 

                            <url>http://intimeit000:8080/manager</url>

                            <server>admin</server> 

                        </configuration> 

                    </plugin> 

                </plugins> 

            </build> 

       </profile>

   </profiles>

修改build

finalName可以不定义,但是如果定义了,要和下面要修改的warName一致,否则打包部署会出现无法找到文件错误

添加resources,将需要编译的都放入对应的路径下


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<finalName>custom-${profiles.activation}</finalName>

    <sourceDirectory>${basedir}/src</sourceDirectory>

    <outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory>

    <resources>

      <resource>

        <directory>${basedir}/src</directory>

        <excludes>

          <exclude>**/*.java</exclude>

        </excludes>

      </resource>

      <resource>

        <directory>${basedir}/config</directory>

        <targetPath>${basedir}/WebRoot/WEB-INF/classes</targetPath>

        <includes>

          <include>*</include>

          <include>*/*</include>

        </includes>

        <excludes>

          <exclude>web.xml</exclude>

        </excludes>

      </resource>

    </resources>

然后修改pom.xml的build 的plugins里面的插件maven-war-plugin,修改为如下

warname要和上面的finalname一致。

下面指定web.xml路径,打包时会根据占位符自动修改里面的内容。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-war-plugin</artifactId>

        <configuration>

          <warName>custom-${profiles.activation}</warName>

          <webResources>

              <resource>

                  <filtering>true</filtering>

                  <directory>${basedir}/src</directory>

                    <targetPath>WEB-INF/classes</targetPath> 

              </resource>

          </webResources>

          <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>

          <webXml>${basedir}/WebRoot/WEB-INF/web.xml</webXml>

        </configuration>

      </plugin>

注意一个参数<filtering>true</filtering>,一定要设置成true这样才会用对应environment目录下的配置文件覆盖原来的。

修改web.xml


1

2

3

4

<context-param> 

        <param-name>spring.profiles.active</param-name> 

        <param-value>${profiles.activation}</param-value> 

</context-param>

这样,基本上就ok啦,打包的时候命令为 clean package -P develop ,profiles选择对应的比如develop,我这里用的是酱紫的

酱紫,就可以完成打包部署到不同环境啦,定义不同的run configurations即可,run的时候选择对应的就ok了。

但是,这样会出现一个很大的问题,我们平时都是本机测试的。。。

这样直接部署到tomcat去会出现报错滴,需要做以下修改

首先,把web.xml复制到config(source folder),你也可以放入其他路径下,这里值得注意的是,webinfo下面的web.xml其他配置修改时你要注意同步修改到这个web.xml下去。。否则。。你白改了

然后恢复web.xml里面的占位符为你要的开发环境,如develop。。

然后修改plugin为以下代码,这样,打包部署时,会自动将config下的web.xml替换到web-inf下去~~


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-war-plugin</artifactId>

        <configuration>

          <warName>custom-${profiles.activation}</warName>

          <!--<webappDirectory>${basedir}/WebRoot</webappDirectory> -->

          <webResources>

              <resource>

                  <filtering>true</filtering>

                  <directory>${basedir}/config</directory>

                  <targetPath>WEB-INF</targetPath>

                  <includes>

                      <include>web.xml</include>

                  </includes>

              </resource>

          </webResources>

          <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>

          <webXml>${basedir}/WebRoot/WEB-INF/web.xml</webXml>

        </configuration>

      </plugin>

?

然后,就ok了。。。。。

Maven 结合 Spring profile对不同的部署环境打包部署

时间: 2024-10-07 05:55:43

Maven 结合 Spring profile对不同的部署环境打包部署的相关文章

Eclipse使用Maven创建Spring MVC项目(包含实例)以及部署到tomcat服务器

1.安装Maven并配置环境变量 2.eclipse中配置Maven 3.eclipse创建Maven项目 选择项目路径,next 选择maven项目类别[maven-archetype-webapp],next 输入Group Id(顶级包名),Artifact Id(项目名),Package根据两者自动生成,finish 生成的项目如上图所示. 报错原因是缺失Server Runtime Library,添加即可,同时jre替换为System Library. 替换后项目目录如下: src文

基于Maven的Spring/SpringMVC/Mybatis/Mybatis-plus/Apache-Shiro基础环境配置

记录一下,以便不时之需. pom.xml 1 <properties> 2 <servlet-api.version>2.5</servlet-api.version> 3 <spring.version>4.2.5.RELEASE</spring.version> 4 <aspectjweaver.version>1.8.9</aspectjweaver.version> 5 6 <mybatis.version&

vue项目打包部署生产环境

vue项目打包部署生产环境 打包部署生产环境之前需要修改配置文件: 修改一:build > utils.js  (修改publicPath:"../../" , 这样写是处理打包后找不到静态文件的问题) 修改二:config > index.js (修改assetsPublicPath:'./' ,修改目的是为了解决js找不到的问题) 两个文件修改完成之后,运行命令:npm run build 打包直接访问dist文件夹中的index.html即可. 原文地址:https:

Spring Mvc + Maven + yuicompressor 使用 profile 来压缩 javascript ,css 文件; (十)

profile相关知识点: 在开发项目时,设想有以下场景: 你的Maven项目存放在一个远程代码库中(比如github),该项目需要访问数据库,你有两台电脑,一台是Linux,一台是Mac OS X,你希望在两台电脑上都能做项目开发.但是,安装Linux的电脑上安装的是MySQL数据库,而Mac OS X的电脑安装的是PostgreSQL数据库.此时你需要找到一种简单的方法在两种数据库连接中进行切换,你会怎么做? 此外,你的项目需要部署.为了调试,在开发时我们在Java编译结果中加入了调试信息(

Maven利用Profile构建不同环境的部署包

项目开发好以后,通常要在多个环境部署,像我曾经呆过的公司最多达5种环境:本机环境(local).(开发小组内自测的)开发环境(dev).(提供给测试团队的)测试环境(sit).预发布环境(pre).正式生产环境(prod),每种环境都有各自的配置参数,比如:数据库连接.远程调用的ws地址等等.如果每个环境build前手动修改这些参数,显然太不fashion. maven早就考虑到了这些问题,看下面的pom片段: <profiles> <profile> <!-- 本地环境 -

maven学习利用Profile构建不同环境的部署包

项目开发好以后,通常要在多个环境部署,象我们公司多达5种环境:本机环境(local).(开发小组内自测的)开发环境(dev).(提供给测试团队的)测试环境(test).预发布环境(pre).正式生产环境(prod),每种环境都有各自的配置参数,比如:数据库连接.远程调用的ws地址等等.如果每个环境build前手动修改这些参数,显然太不fashion. maven早就考虑到了这些问题,看下面的pom片段: 1 <profiles> 2 <profile> 3 <!-- 本地环境

集成maven和Spring boot的profile 专题

maven中配置profile节点: <project> .... <profiles> <profile> <!-- 生产环境 --> <id>prod</id> <properties> <profiles.active>prod</profiles.active> </properties> </profile> <profile> <!-- 本地开发

基于maven的spring boot项目 部署到tomcat出现js文件失效处理思路总结

不久前遇到了这样一个问题:在eclipse上运行的很好的项目,在部署到tomcat上后js就不能正常运行了. 在网上找了很多文章,都没有很好的解决这个问题,最终只能一步步来排查. 确人部署环境的问题还是tomcat导致的问题:在本机上用tomcat的方式部署,启动,发现js任然无效-->确定是tomcat导致的问题. 通过浏览器查看页面源代码发现所有的js文件都正常导入,同时查看class/static,下面的所有资源都存在. 删除所有js,写入alert(1),能够真确显示.在每条js导入语句

Spring boot(4)-应用打包部署

摘自: http://blog.csdn.net/hguisu/article/details/51072683 1.Spring Boot内置web spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动.其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat).当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat.weblogic等等),当然在此之前你要对程序入口做简单调整. 对server的几个常用的配