精华内容
下载资源
问答
  • 开发项目时会遇到这个问题:开发环境,测试...下面介绍一种方法,利用Maven插件来打包不同环境配置文件。我们用到的是maven-war-plugin这个插件。 首先贴出整个pom文件: <project xmlns="http://maven.apa...

    开发项目时会遇到这个问题:开发环境,测试环境,生产环境的配置文件不同,打包时经常要手动更改配置文件,更改的少还可以接受,但是如果需要更多个配置文件,手动的方法就显得非常笨重了。

    下面介绍一种方法,利用Maven插件来打包不同环境的配置文件。我们用到的是maven-war-plugin这个插件。

    首先贴出整个pom文件:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>CMS</groupId>
      <artifactId>CMS</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>Cms</name>
      <url>http://maven.apache.org</url>
      <properties>
        <spring.version>4.1.6.RELEASE</spring.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      <dependencies>   
       <!-- 依赖省略-->
      </dependencies>
     <profiles>
        <profile>
          <!-- 本地开发环境 -->
          <id>dev</id>
          <properties>
            <package.environment>dev</package.environment>
          </properties>
          <activation>
            <activeByDefault>true</activeByDefault>
          </activation>
        </profile>
        <profile>
          <!-- 测试环境 -->
          <id>test</id>
          <properties>
            <package.environment>test</package.environment>
          </properties>
        </profile>
        <profile>
          <!-- 生产环境 -->
          <id>prod</id>
          <properties>
            <package.environment>prod</package.environment>
          </properties>
        </profile>
      </profiles>
      <build>
        <finalName>Cms</finalName>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
              <source>1.7</source>
              <target>1.7</target>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
              <webXml>WebRoot\WEB-INF\web.xml</webXml>
              <warSourceDirectory>WebRoot</warSourceDirectory>
              <archive>
                <addMavenDescriptor>false</addMavenDescriptor>
              </archive>
              <warName>Cms</warName>
              <webResources>
                <resource>
                  <directory>src/main/resoreces/${package.environment}</directory>
                  <targetPath>WEB-INF/classes</targetPath>
                  <filtering>true</filtering>
                </resource>
              </webResources>
            </configuration>
          </plugin>
        </plugins>
        <resources>
          <resource>
            <directory>src</directory>
            <filtering>true</filtering>
            <includes>
              <include>**/*.properties</include>
              <include>**/*.xml</include>
            </includes>
          </resource>
        </resources>
      </build>
    </project>

    简单说明几个地方:

    <profiles>
      <profile>
        <!-- 本地开发环境 -->
        <id>dev</id>
        <properties>
          <package.environment>dev</package.environment>
        </properties>
        <activation>
          <activeByDefault>true</activeByDefault>
        </activation>
      </profile>
      <profile>
        <!-- 测试环境 -->
        <id>test</id>
        <properties>
          <package.environment>test</package.environment>
        </properties>
      </profile>
      <profile>
        <!-- 生产环境 -->
        <id>prod</id>
        <properties>
          <package.environment>prod</package.environment>
        </properties>
      </profile>
    </profiles>

    此处借助profiles定义几个不同的环境文件夹,相同的需要在项目里面创建同id的文件夹,用来存放特定环境的配置文件。

    我之前的resource目录:

     

    我的目录结构是相对复杂的一种有2层目录,只有一层目录的也一样更简单。外层xml文件,还有一个properties文件夹。这里我针对不同环境需要更改的配置文件有4个,标红的。

     

    再看一下改造后resource的目录结构:

     

    随便展开一个dev文件夹是这样:

     

    可见需要更改的配置文件,需要copy到各个环境的文件夹当中去,而不需要更改的文件,则不需要复制一份。

    此处需要说明的是,如果我指定的是dev,则maven会将dev下的所有文件拿出来,db.xml覆盖掉外面的db.xml,dev.properties文件夹中的配置文件会拿出来放到外面的properties文件夹中。所以说这里是非常灵活的,你需要哪些文件定制,完全由自己来控制。

    再来看pom文件

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>2.1.1</version>
      <configuration>
        <webXml>WebRoot\WEB-INF\web.xml</webXml>
        <warSourceDirectory>WebRoot</warSourceDirectory>
        <archive>
          <addMavenDescriptor>false</addMavenDescriptor>
        </archive>
        <warName>test</warName>
        <webResources>
          <resource>
            <directory>src/main/resources/${package.environment}</directory>
            <targetPath>WEB-INF/classes</targetPath>
            <filtering>true</filtering>
          </resource>
        </webResources>
      </configuration>
    </plugin>

    这里使用的是

    maven-war-plugin

    这个插件,此插件的功能是很强大的,想深入了解,可以到官网去看。

    ${package.environment}

    动态指定目录,接收参数。

    targetPath

    目标路径。

    另外说2点,这两个标签

    <webXml>WebRoot\WEB-INF\web.xml</webXml>
    <warSourceDirectory>WebRoot</warSourceDirectory>

    1.如果maven打包错误说找不到web.xml,说明你得项目结构不是标准的,用webxml标签指定一下就可以了

    2.如果jsp打包没有的话,同样的问题,指定一下目录,我的项目结构就不是maven标准结构,所以需要指定一下。

    改造完毕,接下来就是利用maven打包了。

    mvn clean ; mvn compile;

    mvn -P test package; 传相应环境参数就ok了

    展开全文
  • 当前案例中包含一整套的代码和word文档,非常适合新手... 主要是通过maven打包加载不同环境的properties文件 然后将对于的属性绑定到指定的实体对象中;然后通过调用接口可以看到加载不同环境控制台打印的内容是不一样的
  • 公司在使用jenkins部署测试环境代码,直接发布war包的话配置文件得修改,很影响开发,于是 使用maven的profiles来配置多环境配置文件,方便部署 1、在pom文件中添加profiles节点 每一个profile子节点代表一个环境,...

    公司在使用jenkins部署测试环境代码,直接发布war包的话配置文件得修改,很影响开发,于是 使用maven的profiles来配置多环境配置文件,方便部署
    1、在pom文件中添加profiles节点

    在这里插入图片描述
    每一个profile子节点代表一个环境,id代表maven部署打包时指定的环境参数,profiles.active节点指定当前环境的配置文件所在目录,该目录是相对于src/main/resources目录而言的,其中activeByDefault节点指定当前环境是否是默认环境
    2、配置pom文件的build节点,设置资源排除
    在这里插入图片描述
    将配置的环境目录在打包时配置排除,只打包当前指定的开发环境的资源文件
    3、maven编译打包
    使用maven命令
    mvn clean package -Ptest 进行打包

    展开全文
  • 背景: 开发时是一个环境,机器ip地址和端口和测试机器都不一样,每次打包完都需要手动修改...maven打包时,会将对应环境文件夹中的配置文件复制到resources下 然后修改项目pom.xml文件, 添加如下代码: 在plugin...

    背景:
    开发时是一个环境,机器ip地址和端口和测试机器都不一样,每次打包完都需要手动修改配置文件,很麻烦。

    实现:

    首相在resource文件夹下建三个文件夹:dev, test, product,这三个文件夹分别放开发,测试,生产的配置文件。
    如下图:
    在这里插入图片描述
    maven在打包时,会将对应环境文件夹中的配置文件复制到resources下

    然后修改项目pom.xml文件, 添加如下代码:

    在plugins标签节点下添加:

    		<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-resources-plugin</artifactId>
    				<version>2.6</version>
    				<executions>
    					<execution>
    						<id>copy-resources</id>
    						<phase>compile</phase>
    						<goals>
    							<goal>copy-resources</goal>
    						</goals>
    						<configuration>
    							<!-- 覆盖原有文件 -->
    							<overwrite>true</overwrite>
    							<outputDirectory>${project.build.outputDirectory}</outputDirectory>
    							<!-- 也可以用下面这样的方式(指定相对url的方式指定outputDirectory) <outputDirectory>target/classes</outputDirectory> -->
    							<!-- 待处理的资源定义 -->
    							<resources>
    								<resource>
    									<!-- 指定resources插件处理哪个目录下的资源文件 -->
    									<directory>src/main/resources/${package.environment}</directory>
    									<filtering>false</filtering>
    								</resource>
    							</resources>
    						</configuration>
    						<inherited></inherited>
    					</execution>
    				</executions>
    			</plugin>
    

    在project节点下添加:

    <profiles>
    		<profile>
    			<id>dev</id>
    			<activation>
    				<!-- 默认激活 -->
    				<activeByDefault>true</activeByDefault>
    			</activation>
    			<properties>
    				<!-- 开发 -->
    				<package.environment>dev</package.environment>
    			</properties>
    		</profile>
    		<profile>
    			<id>test</id>
    			<properties>
    				<!-- 测试 -->
    				<package.environment>test</package.environment>
    			</properties>
    		</profile>
    		<profile>
    			<id>product</id>
    			<properties>
    				<!-- 生产 -->
    				<package.environment>product</package.environment>
    			</properties>
    		</profile>
    	</profiles>
    

    打包:
    在打包时运行:
    测试环境打包:mvn package -Ptest -DskipTests
    生产环境打包:mvn package -Pproduct -DskipTests

    展开全文
  • 在开发的时候一般会有三个环境:开发dev、测试qas、生产prd,三个环境的配置不一样,手动修改容易出错,并且配置多的时候手动修改产生的工作量巨大,所以需要根据不同的环境用不同的配置文件 SpringBoot天然支持多...

    前言

    在开发的时候一般会有三个环境:开发dev、测试qas、生产prd,三个环境的配置不一样,手动修改容易出错,并且配置多的时候手动修改产生的工作量巨大,所以需要根据不同的环境用不同的配置文件
    SpringBoot天然支持多环境配置:
    application.yml存放公共的配置
    application-dev.yml、application-qas.yml、application.prd.yml分布存放三个环境的配置
    application.yml 中配置spring.profiles.active=prd(或者dev、qas)指定使用的配置文件
    这种方法不在本次讨论范围内,下面开始进入正题

    SpringBoot版本:2.0.4.RELEASE
    开发工具:IDEA
    JDK:1.8

    关键文件目录及配置:

    关键文件目录及配置

    占位符

    <properties>
      <resource.delimiter>#</resource.delimiter>
    </properties>
    

    L2 表示被替换的配置占位符需要以#开头和结尾,你也可以用其他的(如果使用默认${} ,实测不会生效,据说:SpringBoot 用的也是${} 会有冲突)

    例如:application.yml

    #port#将被替换为具体的值

    server: 
      port: #port#
    

    profile配置

    <profiles>
      <profile>
        <id>dev</id>
        <properties>
          <package.environment>dev</package.environment>
        </properties>
        <activation>
          <activeByDefault>true</activeByDefault>
        </activation>
      </profile>
      <profile>
        <id>qas</id>
        <properties>
          <package.environment>qas</package.environment>
        </properties>
      </profile>
      <profile>
        <id>prd</id>
        <properties>
          <package.environment>prd</package.environment>
        </properties>
      </profile>
    </profiles>
    

    profiles中三组profile 分别定义了dev开发、qas测试、prd生产 三个环境的标志

    L5:在dev中定义<activeByDefault>true</activeByDefault>表示默认激活的环境为dev

    替换文件目录

    <build>
      <finalName>${project.artifactId}-${project.version}</finalName>
      
      <filters>
        <filter>env/${package.environment}/filter.properties</filter>
      </filters>
      
      <resources>
        
        <resource>
          <directory>src/main/resources</directory>
          <filtering>true</filtering>
          <excludes>
    				<exclude>application-exclude.yml</exclude>
    			</excludes>
        </resource>
        
        <!--src/main/java目录及所有子目录下的properties,xml类型文件不替换-->
        <resource>
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
          </includes>
          <filtering>false</filtering>
        </resource>
        
      </resources>
      
      <plugins>
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
      </plugins>
    </build>
    

    编译时指定profile
    编译指定profile

    实际效果

    实际效果

    project.build关键配置:

    • build.filters.filter
    • resources.resource

    build.filters.filter:表示存实际值的配置文件 例如env/dev/filter.properties

    ${package.environment} 对应当前使用的profile的id对应的 profile.properties

    resources.resource:一组resource对应一组规则

    filtering:true\false 替换或不替换

    directory:指定目录

    Includes/excludes :配置过滤规则外的文件

    resources.resource.excludes.定义了需要排除的配置文件,实际测试效果是:该文件不会编译到target对应的目录中(并非预想的只是不替换值
    源文件编译结果

    build.filters.filter可以放到profiles下面,原build.filters可以省略,用哪种方式就萝卜白菜了,例如:

    <profiles>
      <profile>
        <id>dev</id>
        <properties>
          <profiles.active>dev</profiles.active>
        </properties>
        <activation>
          <activeByDefault>true</activeByDefault>
        </activation>
        <build>
          <filters>
            <filter>env/dev/filter.properties</filter>
          </filters>
        </build>
      </profile>
      <profile>
        <id>qas</id>
        <properties>
          <profiles.active>qas</profiles.active>
        </properties>
        <build>
          <filters>
            <filter>env/qas/filter.properties</filter>
          </filters>
        </build>
      </profile>
    </profiles>
    

    Maven根据Profile读取不同配置环境配置文件

    展开全文
  • 1 首先在顶层工程中配置pom文件添加如下配置 &amp;lt;!--定义打包命令指定的环境对应的profileActive变量值--&amp;gt; &amp;lt;profiles&amp;gt; &amp;lt;profile&amp;gt; &amp;lt;...
  • 这样我们就可以定义多个 profile,然后每个 profile 对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。 以下实例,我们将 maven-antrun-plugin:run 目标添加到测试阶段中。这样我们可以在...
  • 开发项目时会遇到这个问题:开发环境,测试环境,生产环境配置文件不同,... 下面介绍一种方法,利用Maven插件来打包不同环境配置文件。我们用到的是maven-war-plugin这个插件。 首先贴出整个pom文件: <...
  • maven—profiles区分环境配置文件

    千次阅读 2017-08-03 09:35:06
    在我们的开发过程中一般会有 本地--测试--预发布--生产 几个环境,相对应的数据库连接配置等的一些配置信息都...使用maven 的profiles 可以很方便的来区分这些配置文件 在项目的pom文件中定义 test true
  • 1、创建springboot项目,然后创建对应文件 2、在pom.xml中定义全局配置信息 <profiles> <profile> <id>test</id> <!--为env起一个名字--> <properties> <env>...
  • Maven区分环境打包

    千次阅读 2019-08-17 17:28:18
    Maven 区分环境打包 方法一:使用juvenxu.portable-config-maven-plugin 使用方法 pom文件中引入插件 <plugin> <groupId>com.juvenxu.portable-config-maven-plugin</groupId> <...
  • 1.新建不同环境配置 2.pom 配置profile &lt;!--id 与文件夹的名称对应--&gt; &lt;profiles&gt; &lt;profile&gt; &lt;id&gt;dev&lt;/id&gt; &lt;!--开发...
  • 例如,测试环境的数据源在打包发布到生产环境时则需要更改相关数据源配置,当拥有多套环境时这种方式非常不灵活,可以使用参数化配置解决,以maven项目为例,解决记录如下: 1、修改.properties配置文件的value,...
  • 项目开发过程中,如果一个项目经常发布,那么在打包之前会不断的修改配置文件,这无疑是很麻烦的一件事情。今天我介绍下这个问题怎么解决。  注意:本配置的前提是项目必须是MAVEN项目。 方法一:(过滤方式) 目录...
  • 配置文件目录:项目有dev、dev2、dev3、test等环境下的多套配置文件。在pom文件中添加如下配置切换:&lt;build&gt; &lt;resources&gt; &lt;resource&gt; &lt;!-- directory加载...
  • 适用于jekins配置打包环境。线下我们使用的dev环境,线上,测试环境就有不同的配置...但是还需要在maven配置文件<project>节点里面加入 <profiles> <!-- 开发 --> <profile> <!-...
  • 在主pom 添加 profiles 执行不同环境配置文件 在 主pom 的根节点添加: <!-- 参数文件 --> <profiles> <profile> <id>dev</id> <activation> <activeByDefault>...
  • src/main/resources/uat 目录下properties是验证环境配置文件 src/main/resources/prd目录下properties是生产环境配置文件 2、pom.xml内配置profiles <profiles> <!-- <profile> &...
  • 在开发中我们经常会根据不同的发布环境建立对应的配置文件,然后在打包的时候指定哪个文件生效。但是通常的做法是在application.yml中通过spring.profiles.active指定哪个文件激活,但是这样会把所有相关的配置文件...
  • Maven 区分开发环境和测试环境配置两种方式方法一:(过滤方式)第一步、创建配置文件第二步:配置需要读取的配置文件第三步:配置MAVEN 的 pom.xml文件第四 步:打包方法二:(选择打包方式) == 作者:sunxiakun ...
  • maven打包的时候,就需要根据不同的环境,修改配置文件的属性。导致效率很地下,而且很容易出错! 那么有没有可能在打包的时候,根据命令不同,自动的切换到目标环境的配置呢? 答案当然是有的! 2.效果什么样? ...
  • 使用maven的profile区分本地环境和线上环境环境开发,使用maven-profile,就可以在打包的时候通过参数的调整,最终打的包也不同。 以区分本地数据库和线上数据库为例 比如测试环境,用的是本地测试数据库;生产...
  • 【资源文件拆分不同环境】 【pom.xml】配置 test test production production development development          src/ma
  • maven命令-P 参数配置assembly.xmlpom.xml配置如下&lt;build&gt; .................  &lt;plugins&gt;  &lt;!-- 指定JDK的编译版本 --&gt;  ................. &lt;plugin&gt; ...
  • maven环境打包方案

    千次阅读 2016-10-25 19:34:26
    前言目前大多数互联网公司内部...本文着重介绍的就是如何通过 Maven 来管理不同环境配置文件,通过profile来实现分环境打包。正文以web开发为例,大部分web开发项目整体结构如下图: 目录 描述 resources 存放公
  • 项目分为开发环境和生产环境,配有不同的yml,此时需要利用到maven的profiles分环境打包 项目配置文件路径: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RduyPEkI-1616587979413)(C:\...
  • 为了开发环境配置与生产环境配置区分 1.2、maven 配置 1.2.1、配置profiles <profiles> <profile> <id>dev</id> <properties> <env>dev</env> <versionCode>...
  • Maven实现多环境打包

    2019-01-03 10:37:57
    Maven实现多环境打包 撸起袖子便是干: 目录如下: 不同目录自己写入文件及内容加以区分。 pom.xml如下: &amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&...
  • maven 不同环境打包

    千次阅读 2019-02-19 10:26:45
    此时给项目打包,就会很麻烦,因为配置文件不同比如数据库链接,文件地址等,所以打包的时候需要修改配置文件maven这里提供了很便利的操作,通过配置文件和命令就可以分别打出来不同的war包,在不同的环境中使用;...
  • 环境打包核心点:spring.profiles.active pom.xml中添加: <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeB...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,015
精华内容 2,806
关键字:

maven打包区分环境配置文件