Maven 构建配置文件

Maven 构建配置文件

什么是构建配置文件?

生成配置文件是一组可以用来设置或覆盖 Maven 构建配置值的默认值。使用生成配置文件,你可以针对不同的环境,如:生产V/S开发环境自定义构建。

配置文件中指定 pom.xml 文件使用其配置文件/配置文件元素和多种方式来触发。配置文件修改 POM 后,在编译的时候是用来给不同的目标环境参数(例如,开发,测试和生产环境的数据库服务器的路径)。

生成配置文件的类型

创建配置文件的文件主要有三种类型:

类型 定义位置
Per Project 在项目中定义的POM文件, pom.xml
Per User 定义在 Maven 中的设置 XML 文件(%USER_HOME%/.m2/settings.xml)
Global 定义在 Maven 中的全局设置 xml 文件 (%M2_HOME%/conf/settings.xml)

配置文件激活

Maven 构建配置文件的文件,可以使用以下几种方式来激活。

  • 明确使用命令从控制台输入。
  • 通过 Maven 设置。
  • 基于环境变量(用户/系统变量)。
  • OS设置(例如,Windows系列)。
  • 呈现/丢失的文件。

配置文件的文件激活的例子

我们假设你的项目如下的目录结构:

现在下src/main/resources 有三个特定的文件:

文件名称 描述
env.properties 如果没有配置文件关联则使用默认配置
env.test.properties 当测试配置文件用于测试配置
env.prod.properties 生产配置时,prod信息被使用

显式配置文件激活

在下面的例子中,我们会附加上maven-antrun-plugin:run 插件:运行测试阶段目标。这将使我们能够为不同的配置文件调用文本消息。将在 pom.xml 中定义不同的配置文件,并在命令控制台使用 maven 命令将配置文件启动。

假设,我们建立如下的 pom.xml 在 C:\MVN\project 文件夹。

<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>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <profiles>
      <profile>
      <id>test</id>
      <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <phase>test</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                  <tasks>
                     <echo>Using env.test.properties</echo>
            <copy file="src/main/resources/env.test.properties" tofile
            ="${project.build.outputDirectory}/env.properties"/>
                  </tasks>
                  </configuration>
               </execution>
            </executions>
         </plugin>
      </plugins>
      </build>
      </profile>
   </profiles>
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>

env.properties

environment=debug

env.test.properties

environment=test

env.prod.properties

environment=prod

现在,打开命令控制台,进入到包含 pom.xml 的文件夹并执行以下 mvn 命令。通过配置文件名作为参数可使用 -P 选项。

C:\MVN\project>mvn test -P test

Maven会开始处理并显示构建配置文件的

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [test]
[INFO] ------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNprojectsrc  est
esources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:MVNproject  argetsurefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
There are no tests to run.

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
     [echo] Using env.test.properties
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Sun Jul 08 14:55:41 IST 2012
[INFO] Final Memory: 8M/64M
[INFO] ------------------------------------------------------------------

现在,作为一个练习,可以做以下步骤:

  • 在另一个配置文件pom.xml 添加元素(复制现有的配置文件元素 profiles,并将其粘贴轮廓元素结束)。
  • 更新在此档案中元素的 ID 并测试正常。
  • 更新任务部分使用 env.properties 并将 env.properties 复制到目标目录
  • 再次重复上述三个步骤,更新 ID 和 env.prod.properties
  • 现在准备建立配置文件文件(正常/测试/产品)。

现在,打开命令控制台,进入到该文件夹包含的 pom.xml 并执行以下 mvn 命令。通过配置文件名作为参数使用 -P 选项。

C:\MVN\project>mvn test -Pnormal
C:\MVN\project>mvn test -Pprod

建立检查输出看到它们的差别了

配置文件通过Maven设置激活

打开 Maven 的 settings.xml 文件,可在 %USER_HOME%/.m2 目录,%USER_HOME% 表示用户的主目录。 settings.xml 文件如果不存在,那么就创建一个新的。

添加测试配置文件作为使用activeProfiles节点主动配置文件,示例如下所示:

<settings 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/settings-1.0.0.xsd">
   <mirrors>
      <mirror>
         <id>maven.dev.snaponglobal.com</id>
         <name>Internal Artifactory Maven repository</name>
         <url>http://repo1.maven.org/maven2/</url>
         <mirrorOf>*</mirrorOf>
      </mirror>
   </mirrors>
   <activeProfiles>
      <activeProfile>test</activeProfile>
   </activeProfiles>
</settings>

现在,打开命令控制台,进入到该文件夹包含 pom.xml 并执行以下 mvn 命令。不要通过使用 -P 选项。Maven会显示结果,测试配置文件是一个活跃的配置文件。

C:\MVN\project>mvn test

通过系统环境变量配置文件

现在从 Maven 的 settings.xml 配置文件删除和更新 pom.xml 中提到的测试配置文件。 profile 元素添加 activation 元素,如下所示。

当系统属性 “env” 的值设置为 “test” 时指定的测试配置文件将被触发。
创建一个环境变量 “env”,并设置其值为 “test” 。

<profile>
   <id>test</id>
   <activation>
      <property>
         <name>env</name>
         <value>test</value>
      </property>
   </activation>
</profile>

打开命令控制台,进入到包含 pom.xml 文件的文件夹下并执行以下 mvn 命令。

C:\MVN\project>mvn test

通过操作系统激活配置文件

activation 元素包括 os 细节,如下所示。测试配置文件文件时,将触发的系统是 windows XP。

<profile>
   <id>test</id>
   <activation>
      <os>
         <name>Windows XP</name>
         <family>Windows</family>
         <arch>x86</arch>
         <version>5.1.2600</version>
      </os>
   </activation>
</profile>

现在,打开命令控制台,进入到文件夹包含 pom.xml 并执行以下 mvn 命令。不要通过使用选项 -P 配置文件名称。 Maven 会显示结果:

C:\MVN\project>mvn test

配置文件激活通过现状/丢失文件

载入 activation 元件包括 os 的细节,如下所示。test配置文件将因 target/generated-sources/axistools/wsdl2java/com/companyname/group 缺少触发。

<profile>
   <id>test</id>
   <activation>
      <file>
         <missing>target/generated-sources/axistools/wsdl2java/
         com/companyname/group</missing>
      </file>
   </activation>
</profile>

现在,打开命令控制台,进入到包含 pom.xml 的文件夹并执行以下 mvn 命令。不要使用选项 -P传递配置文件名称 。 Maven 会显示结果,test 配置文件是一个 活动配置文件。

C:\MVN\project>mvn test
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 配置文件用于以不同的方式构建项目。比如,你可能需要在本地环境构建,用于开发和测试,你也可能需要构建后用于开发环境。...
    欧余山南阅读 805评论 0 1
  • Maven 笔记 https://www.yiibai.com/maven/enable-proxy-settin...
    点点渔火阅读 889评论 0 3
  • 一、配置分级 首先需要了解的是Maven配置文件以及配置方式的分级,才能做到我们自己在日常开发配置中灵活使用。根据...
    老猫烧须阅读 14,792评论 1 12
  • maven常用命令介绍 这里主要是在eclipse中使用maven,因此只使用到了一部分命令,整理下来方便以后查阅...
    菜凯阅读 1,068评论 0 2
  • 简介 Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从一个...
    我为峰2014阅读 1,989评论 0 1