• Maven 构建配置文件


    目录

    构建配置文件的类型

    配置文件激活

    配置文件激活实例

    1、配置文件激活

    2、通过Maven设置激活配置文件

    3、通过环境变量激活配置文件

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

    5、通过文件的存在或者缺失激活配置文件


    构建配置文件是一系列的配置项的值,可以用来设置或者覆盖 Maven 构建默认值。

    使用构建配置文件,你可以为不同的环境,比如说生产环境(Production)和开发(Development)环境,定制构建方式。

    配置文件在 pom.xml 文件中使用 activeProfiles 或者 profiles 元素指定,并且可以通过各种方式触发。配置文件在构建时修改 POM,并且用来给参数设定不同的目标环境(比如说,开发(Development)、测试(Testing)和生产环境(Production)中数据库服务器的地址)。

    构建配置文件的类型

    构建配置文件大体上有三种类型:

    类型

    在哪定义

    项目级(Per Project)

    定义在项目的POM文件pom.xml中

    用户级 (Per User)

    定义在Maven的设置xml文件中 (%USER_HOME%/.m2/settings.xml)

    全局(Global)

    定义在 Maven 全局的设置 xml 文件中 (%M2_HOME%/conf/settings.xml)

    配置文件激活

    Maven的构建配置文件可以通过多种方式激活。

    • 使用命令控制台输入显式激活。
    • 通过 maven 设置。
    • 基于环境变量(用户或者系统变量)。
    • 操作系统设置(比如说,Windows系列)。
    • 文件的存在或者缺失。

    配置文件激活实例

    假定项目结构如下:

    https://www.runoob.com/wp-content/uploads/2018/09/1536129535-6460-structure.jpg

    其中在src/main/resources文件夹下有三个用于测试文件:

    文件名

    描述

    env.properties

    如果未指定配置文件时默认使用的配置。

    env.test.properties

    当测试配置文件使用时的测试配置。

    env.prod.properties

    当生产配置文件使用时的生产配置。

    注意:这三个配置文件并不是代表构建配置文件的功能,而是用于本次测试的目的;比如,我指定了构建配置文件为 prod 时,项目就使用 env.prod.properties文件。

    注意:下面的例子仍然是使用 AntRun 插件,因为此插件能绑定 Maven 生命周期阶段,并通过 Ant 的标签不用编写一点代码即可输出信息、复制文件等,经此而已。其余的与本次构建配置文件无关。

    1、配置文件激活

    profile 可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个 profile,然后每个 profile 对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。

    以下实例,我们将 maven-antrun-plugin:run 目标添加到测试阶段中。这样我们可以在不同的 profile 中输出文本信息。我们将使用 pom.xml 来定义不同的 profile,并在命令控制台中使用 maven 命令激活 profile。

    pom.xml 文件如下:

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    3. <modelVersion>4.0.0</modelVersion>
    4. <groupId>com.jsoft.test</groupId>
    5. <artifactId>testproject</artifactId>
    6. <packaging>jar</packaging>
    7. <version>0.1-SNAPSHOT</version>
    8. <name>testproject</name>
    9. <url>http://maven.apache.org</url>
    10. <dependencies>
    11. <dependency>
    12. <groupId>junit</groupId>
    13. <artifactId>junit</artifactId>
    14. <version>3.8.1</version>
    15. <scope>test</scope>
    16. </dependency>
    17. </dependencies>
    18. <profiles>
    19. <profile>
    20. <id>test</id>
    21. <build>
    22. <plugins>
    23. <plugin>
    24. <groupId>org.apache.maven.plugins</groupId>
    25. <artifactId>maven-antrun-plugin</artifactId>
    26. <version>1.8</version>
    27. <executions>
    28. <execution>
    29. <phase>test</phase>
    30. <goals>
    31. <goal>run</goal>
    32. </goals>
    33. <configuration>
    34. <tasks>
    35. <echo>Using env.test.properties</echo>
    36. <copy file="src/main/resources/env.test.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
    37. </tasks>
    38. </configuration>
    39. </execution>
    40. </executions>
    41. </plugin>
    42. </plugins>
    43. </build>
    44. </profile>
    45. <profile>
    46. <id>normal</id>
    47. <build>
    48. <plugins>
    49. <plugin>
    50. <groupId>org.apache.maven.plugins</groupId>
    51. <artifactId>maven-antrun-plugin</artifactId>
    52. <version>1.8</version>
    53. <executions>
    54. <execution>
    55. <phase>test</phase>
    56. <goals>
    57. <goal>run</goal>
    58. </goals>
    59. <configuration>
    60. <tasks>
    61. <echo>Using env.properties</echo>
    62. <copy file="src/main/resources/env.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
    63. </tasks>
    64. </configuration>
    65. </execution>
    66. </executions>
    67. </plugin>
    68. </plugins>
    69. </build>
    70. </profile>
    71. <profile>
    72. <id>prod</id>
    73. <build>
    74. <plugins>
    75. <plugin>
    76. <groupId>org.apache.maven.plugins</groupId>
    77. <artifactId>maven-antrun-plugin</artifactId>
    78. <version>1.8</version>
    79. <executions>
    80. <execution>
    81. <phase>test</phase>
    82. <goals>
    83. <goal>run</goal>
    84. </goals>
    85. <configuration>
    86. <tasks>
    87. <echo>Using env.prod.properties</echo>
    88. <copy file="src/main/resources/env.prod.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
    89. </tasks>
    90. </configuration>
    91. </execution>
    92. </executions>
    93. </plugin>
    94. </plugins>
    95. </build>
    96. </profile>
    97. </profiles>
    98. </project>

    注意:构建配置文件采用的是 节点。

    说明:上面新建了三个 ,其中 区分了不同的 执行不同的 AntRun 任务;而 AntRun 的任务可以这么理解,AntRun 监听 test 的 Maven 生命周期阶段,当 Maven 执行 test 时,就触发了 AntRun 的任务,任务里面为输出文本并复制文件到指定的位置;而至于要执行哪个 AntRun 任务,此时构建配置文件起到了传输指定的作用,比如,通过命令行参数输入指定的

    执行命令:

    mvn test -Ptest

    提示:第一个 test 为 Maven 生命周期阶段,第 2 个 test 为构建配置文件指定的 参数,这个参数通过 -P 来传输,当然,它可以是 prod 或者 normal 这些由你定义的

    运行的结果如下:

    https://www.runoob.com/wp-content/uploads/2018/09/417876-20170509045108972-905096973.png

    可以看出成功的触发了AntRun的任务。并且是对应构建配置文件下的 为 test 的任务。

    再测试其余两个命令,结果如下:

    https://www.runoob.com/wp-content/uploads/2018/09/417876-20170509045310191-1036132016.png

    https://www.runoob.com/wp-content/uploads/2018/09/417876-20170509045353941-271428179.png

    2、通过Maven设置激活配置文件

    打开 %USER_HOME%/.m2 目录下的 settings.xml 文件,其中 %USER_HOME% 代表用户主目录。如果 setting.xml 文件不存在就直接拷贝 %M2_HOME%/conf/settings.xml 到 .m2 目录,其中 %M2_HOME% 代表 Maven 的安装目录。

    配置 setting.xml 文件,增加 属性:

    1. <settings xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    4. http://maven.apache.org/xsd/settings-1.0.0.xsd">
    5. ...
    6. <activeProfiles>
    7. <activeProfile>test</activeProfile>
    8. </activeProfiles>
    9. </settings>

    执行命令:

    mvn test

    提示 1此时不需要使用 -Ptest 来输入参数了,上面的 setting.xml 文件的 已经指定了 test 参数代替了。

    提示 2同样可以使用在 %M2_HOME%/conf/settings.xml 的文件进行配置,效果一致。

    执行结果:

    https://www.runoob.com/wp-content/uploads/2018/09/417876-20170509050428441-2007100718.png

    3、通过环境变量激活配置文件

    先把上一步测试的 setting.xml 值全部去掉。

    然后在 pom.xml 里面的 为 test 的 节点,加入 节点:

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    3. <modelVersion>4.0.0</modelVersion>
    4. <groupId>com.jsoft.test</groupId>
    5. <artifactId>testproject</artifactId>
    6. <packaging>jar</packaging>
    7. <version>0.1-SNAPSHOT</version>
    8. <name>testproject</name>
    9. <url>http://maven.apache.org</url>
    10. <dependencies>
    11. <dependency>
    12. <groupId>junit</groupId>
    13. <artifactId>junit</artifactId>
    14. <version>3.8.1</version>
    15. <scope>test</scope>
    16. </dependency>
    17. </dependencies>
    18. <profiles>
    19. <profile>
    20. <id>test</id>
    21. <activation>
    22. <property>
    23. <name>env</name>
    24. <value>test</value>
    25. </property>
    26. </activation>
    27. <build>
    28. <plugins>
    29. <plugin>
    30. <groupId>org.apache.maven.plugins</groupId>
    31. <artifactId>maven-antrun-plugin</artifactId>
    32. <version>1.8</version>
    33. <executions>
    34. <execution>
    35. <phase>test</phase>
    36. <goals>
    37. <goal>run</goal>
    38. </goals>
    39. <configuration>
    40. <tasks>
    41. <echo>Using env.test.properties</echo>
    42. <copy file="src/main/resources/env.test.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
    43. </tasks>
    44. </configuration>
    45. </execution>
    46. </executions>
    47. </plugin>
    48. </plugins>
    49. </build>
    50. </profile>
    51. <profile>
    52. <id>normal</id>
    53. <build>
    54. <plugins>
    55. <plugin>
    56. <groupId>org.apache.maven.plugins</groupId>
    57. <artifactId>maven-antrun-plugin</artifactId>
    58. <version>1.8</version>
    59. <executions>
    60. <execution>
    61. <phase>test</phase>
    62. <goals>
    63. <goal>run</goal>
    64. </goals>
    65. <configuration>
    66. <tasks>
    67. <echo>Using env.properties</echo>
    68. <copy file="src/main/resources/env.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
    69. </tasks>
    70. </configuration>
    71. </execution>
    72. </executions>
    73. </plugin>
    74. </plugins>
    75. </build>
    76. </profile>
    77. <profile>
    78. <id>prod</id>
    79. <build>
    80. <plugins>
    81. <plugin>
    82. <groupId>org.apache.maven.plugins</groupId>
    83. <artifactId>maven-antrun-plugin</artifactId>
    84. <version>1.8</version>
    85. <executions>
    86. <execution>
    87. <phase>test</phase>
    88. <goals>
    89. <goal>run</goal>
    90. </goals>
    91. <configuration>
    92. <tasks>
    93. <echo>Using env.prod.properties</echo>
    94. <copy file="src/main/resources/env.prod.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
    95. </tasks>
    96. </configuration>
    97. </execution>
    98. </executions>
    99. </plugin>
    100. </plugins>
    101. </build>
    102. </profile>
    103. </profiles>
    104. </project>

    执行命令:

    mvn test -Denv=test

    提示 1上面使用 -D 传递环境变量,其中 env 对应刚才设置的 值,test 对应

    提示 2在 Windows 10 上测试了系统的环境变量,但是不生效,所以,只能通过 -D 传递。

    执行结果:

    https://www.runoob.com/wp-content/uploads/2018/09/417876-20170509051102519-322573915.png

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

    activation 元素包含下面的操作系统信息。当系统为 windows XP 时,test Profile 将会被触发。

    1. <profile>
    2. <id>test</id>
    3. <activation>
    4. <os>
    5. <name>Windows XP</name>
    6. <family>Windows</family>
    7. <arch>x86</arch>
    8. <version>5.1.2600</version>
    9. </os>
    10. </activation>
    11. </profile>

    现在打开命令控制台,跳转到 pom.xml 所在目录,并执行下面的 mvn 命令。不要使用 -P 选项指定 Profile 的名称。Maven 将显示被激活的 test Profile 的结果。

    mvn test

    5、通过文件的存在或者缺失激活配置文件

    现在使用 activation 元素包含下面的操作系统信息。当 target/generated-sources/axistools/wsdl2java/com/companyname/group 缺失时,test Profile 将会被触发。

    1. <profile>
    2. <id>test</id>
    3. <activation>
    4. <file>
    5. <missing>target/generated-sources/axistools/wsdl2java/
    6. com/companyname/group</missing>
    7. </file>
    8. </activation>
    9. </profile>

    现在打开命令控制台,跳转到 pom.xml 所在目录,并执行下面的 mvn 命令。不要使用 -P 选项指定 Profile 的名称。Maven 将显示被激活的 test Profile 的结果。

    mvn test

  • 相关阅读:
    探索分销小程序商城开发和搭建
    信息化发展53
    【前端源码解析】指令和生命周期
    Vue_Bug NPM下载速度过慢
    git 提交代码
    Web开发 前端介绍 HTML CSS
    详解Unity中的Nav Mesh新特性|导航寻路系统 (二)
    【实用技巧】Latex写算法伪代码(格式篇)
    Vue3 配置全局 scss 变量
    陇剑杯2023线上wp
  • 原文地址:https://blog.csdn.net/h4241778/article/details/133703905