`
leonzhx
  • 浏览: 794035 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

第十四章 灵活的构建

阅读更多

1.   通过 <properties> 元素用户可以自定义一个或多个属性,然后在 POM 的其他地方使用 ${ 属性名称 } 的方式引用属性,这种做法的最大意义在于消除重复。

 

2.   Maven 共有六类属性:

  1) 内置属性: ${basedir} 表示项目根目录,即 pom.xml 文件的目录。 ${version} 表示项目版本。

  2) POM 属性:用户可以使用该类属性引用 POM 文件中对应元素的值:

    a)  ${project.build.sourceDirectory} :项目的主源码目录,默认为 src/main/java

    b)  ${project.build.testSourceDirectory} :项目的测试源码目录,默认为 src/test/java

    c)  ${project.build.directory} :项目构建输出目录,默认为 target/

    d)  ${project.outputDirectory} :项目主代码编译输出目录,默认为 target/classes

    e)  ${project.testOutputDirector} :项目测试代码编译输出目录,默认为 target/test-classes/

    f)   ${project.groupId} :项目的 groupId

    g)  ${project.artifactId} :项目的 artifactId

    h)  ${project.version} :项目的 version ,与 ${version} 等价

    i)   ${project.build.finalName} :项目打包输出文件的名称,默认为 ${project.artifactId}-${project.version}

它们的默认值是在超级 POM 中定义的。

 

  3) 自定义属性:用户可以在 POM <properties> 元素下自定义 Maven 属性。

  4) Settings 属性:与 POM 属性同理,用户以 settings. 开头的属性引用 settings.xml 文件中 XML 元素的值。如 ${settings.localRepository} 指向本地仓库的位置

  5) Java 系统属性:所有 Java 系统属性都可以使用 Maven 属性引用。如 ${user.home} 指向用户目录。可以用 mvn help:system 查看所有 Java 系统属性 ( 包含 -D 参数设置的属性 )

  6) 环境变量属性:所有环境变量都可以使用 env. 开头的 Maven 属性引用。如 {env.JAVA_HOME} 。可以用 mvn help:system 查看所有环境变量属性。

 

3.   POM <build> 元素下可以使用 <resources> <testResources> 定义多个资源目录和测试资源目录。在 <resource> <testResource> 下定义 <filtering> 元素来告诉 Maven 是否要解析资源文件中的 Maven 属性,如:

<resources>

  <resource>

    <directory>${project.basedir}/src/main/resources</directory>

    <filtering>true</filtering>

  </resource>

</resources> 
 

4.   mvn -P 参数表示在命令行激活一个 profile 。如:

mvn clean install –Pdev

表示激活 ID dev profile 。我们可以在 id dev profile 中定义 dev 环境下的数据库连接等配置的 Maven 属性,从而用上述命令构建一个 dev 环境下的构件。

 

5.   Maven profile 能够在构建的时候修改 POM 的一个子集,或者添加额外的配置元素。用户可以使用很多方式激活 profile ,以实现构建在不同环境下的移植。

 

6.   Maven 激活 profile 的方式有 :

  1)   命令行激活:通过 mvn 命令行的 –P 参数可以激活一个或多个 profile ,多个 id 之间用逗号分隔。如: mvn clean install –Pdev-x,dev-y

  2)   settings 文件显示激活: settings.xml 文件的 activeProfiles 元素可以配置一个或多个 profile 对于所有项目都是处于激活状态,如:

<settings>

  …

  <activeProfiles>

    <activeProfile>dev-x</activeProfile>

    <activeProfile>dev-y</activeProfile>

  </activeProfiles>

  …

</settings> 
 

  3)   系统属性激活:用户可以配置当某系统属性存在的时候激活 profile (不配置 <value> 属性),进而可以设置当某系统属性存在并等某值的时候激活。如 :

<profiles>

  <profile>

     <activation>

      <property>

        <name>test</name>

        <value>x</value>

      </property>

    </activation>

  </profile>

</profiles>

 

  4) 作系统环境激活:

 

 

<profiles>

  <profile>

    <activation>

      <os>

        <name>Windows XP</name>

        <family>Windows</family>

        <arch>x86</arch>

         <version>5.1.2600</version>

      </os>

    </activation>

  </profile>

</profiles> 

 这里 family 的值包括 Windows UNIX Mac 等。 name arch version 可以通过查看环境中的系统属性 os.name os.arch os.version 获得。

 

 

  5 文件存在与否激活:

 

<profiles>

  <profile>

    <activation>

      <file>

        <missing>x.properties</missing>

        <exists>y.properties</exists>

      </file>

    </activation>

  </profile>

</profiles> 
 

  6) 默认激活:

<profiles>

  <profile>

    <activation>

      <activeByDefault>true</activeByDefault>

    </activation>

  </profile>

</profiles>
 

但如果 POM 中有任何一个 profile 通过以上其他任意一种方式被激活了,所有的默认激活配置都会失效。

 

激活的多个 profile 中的冲突属性如何解决?

 

7.   可以用 mvn help:active-profiles 查看当前项目所有被激活的 profile 。可以用 mvn help:all-profiles 查看当前项目目的所有的 profile

 

8.   profile 可以在如下位置声明:

  1)p om.xml :只对当前项目有效

  2) ~/.m2/settings.xml :对该用户所有 Maven 项目有效

  3) M2_HOME/conf/settings.xml :对本机上所有 Maven 项目有效

  4) profiles.xml :可以在项目根目录下使用一个额外的 profiles.xml 文件,只对项目有效。该文件默认不会被安装和部署。 Maven 3 已经不支持这种形式。

POM 中定义的 profile 可以修改以下项目属性:

<profile>

  <repositories/>

  <pluginRepositories/>

  <distributionManagement/>

  <dependencies/>

  <dependencyManagement/>

  <modules/>

  <properties/>

  <reporting/>

  <build>

    <plugins/>

    <defaultGoal/>

    <resources/>

    <testResources/>

    <finalName/>

  </build>

</profile>
 

但在其他地方定义的 profile 由于无法保证它们能随着特定的 pom.xml 一起被分发,因此只允许修改以下属性:

 

<profile>

  <repositories/>

  <pluginRepositories/>

  <properties/>

</profile> 

 

9.   Web 资源文件默认位于 src/main/webapp/ 目录,打包后位于 WAR 包的根目录。开启一般资源文件的过滤(替换 Maven 属性)也不会影响到 web 资源文件。可以在 POM 中配置 maven-war-plugin 配置 web 资源目录及是否过滤:

 

<plugin>

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

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

  <version>2.1-beta-1</version>

  <configuration>

    <webResources>

      <resource>

        <filtering>true</filtering>

        <directory>src/main/webapp</directory>

        <includes>

          <include>**/*.css</include>

          <include>**/*.js</include>

        </includes>

      </resource>

    </webResources>

  </configuration>

</plugin> 
 

10.   可以用标注将 Unit Test Integration Test 进行分组,从而可以在 profile 中配置 maven-surefire-Plugin 定义执行不同的 Test

<configuration>
  <groups>group-name</groups>
</configuration>
 

 

   

分享到:
评论

相关推荐

    数据库工程第14章

    总结起来,数据库工程第14章的学习涵盖了数据集结构的理解,SQL编程的掌握,以及应用数据库技术的完整流程。这些知识不仅适用于传统的数据库管理,也在大数据处理、数据分析等领域发挥着重要作用。在实践中不断探索...

    使用Java理解程序逻辑第14章.zip

    在本资源包“使用Java理解程序逻辑第14章.zip”中,重点是通过Java语言来深入理解程序逻辑。这通常意味着我们将探讨控制流程、循环、条件语句、函数以及可能涉及的数据结构等核心概念。JavaSE(Java Standard ...

    北大青鸟 ACCP 之 asp.net 8 - 14 章

    **第十四章:ASP.NET MVC** ASP.NET MVC是一种模型-视图-控制器架构模式,为Web开发提供了更灵活的方式。会讲解MVC架构的原理,以及如何创建和路由控制器、视图和模型。 通过北大青鸟ACCP的这些章节,学生将全面...

    ann14-神经网络-第十四章-神经计算机

    - **灵活性**: 可以根据需要选择使用光学还是电子信号处理。 - **多功能性**: 支持多种信号处理方式,适应不同应用场景。 #### 7. 分子神经计算机 - **定义**: 利用分子生物学原理构建的人工神经网络系统,通常...

    java语言程序设计基础篇第十版第十四章练习答案.pdf

    "Java语言程序设计基础篇第十四章练习答案.pdf" 本资源是一个Java语言程序设计基础篇第十四章的练习答案PDF文件,主要涉及JavaFX应用程序设计和图形用户界面开发。下面是从给定文件中生成的相关知识点: 一、...

    形式语言与自动机理论清华大学蒋宗礼-第四章参考答案.doc

    在第四章的参考答案中,涉及了多个关于正则表达式构建的问题,这是理解正则语言的关键。正则表达式是一种简洁而强大的工具,用于描述一类字符串的共同特征。 1. 正则表达式`(0+1)*`表示所有由0和1组成的任意长度...

    Android2.0游戏开发实战宝典源代码(第14章-第16章).rar

    该压缩包文件“Android2.0游戏开发实战宝典源代码(第14章-第16章).rar”包含了Android游戏开发中的关键章节源代码,涵盖了从第14章到第16章的内容。这通常意味着我们将深入探讨Android游戏编程的一些核心概念和技术...

    精通JSF-基于EJB Hibernate Spring整合开发与项目实践-第14章代码

    在"精通JSF-基于EJB Hibernate Spring整合开发与项目实践-第14章代码"中,你将看到如何将这些技术结合在一起,以构建一个完整的应用。可能的实践内容包括: 1. **JSF与Spring的集成**:学习如何在JSF页面中使用...

    第十四章分布式人工智能81.ppt

    《第十四章 分布式人工智能81》 分布式人工智能(Distributed Artificial Intelligence,DAI)是一门研究在逻辑上或物理上分散的智能系统如何协同工作以解决复杂问题的学科。这一领域起源于20世纪70年代末,主要...

    第十四章:其他咨询工具.rar

    "第十四章:其他咨询工具"这个主题可能涵盖了多种不同类型的工具,这些工具在信息技术咨询领域中发挥着重要作用。以下是根据标题和描述可能涉及的一些关键知识点: 1. **项目管理工具**:在咨询工作中,项目管理...

    maven window下安装包

    maven window下安装包 易学笔记-maven教程目录 第1章:Maven概述/1.1 Maven的概念 第1章:Maven概述/1.2 Maven的功能 第1章:Maven概述/1.3 与...第14章:灵活的构建/14.4 profile文件的种类/14.4.2 setting.xml中

    HTML第4章 课堂练习 PPT及答案 CSS.ACCP6.0

    本资料包"HTML第4章 课堂练习 PPT及答案 CSS.ACCP6.0"与"HTML第13章 课堂练习 PPT及答案 CSS.ACCP6.0"显然包含了HTML学习的两个重要阶段,分别是第四章和第十三章的内容,同时结合了CSS的学习,这通常是课程或培训的...

    ASP.NET开发实战1200例(第II卷)第十四章 part1.rar

    《ASP.NET开发实战1200例(第II卷)第十四章 part1.rar》是针对ASP.NET技术的一份综合教程资源,包含了丰富的代码实例和配套视频教程,旨在帮助开发者深入理解和掌握ASP.NET的实战应用。这个压缩包分为多个部分,如...

    Struts2.1权威指南光盘源代码第14章

    "Struts2.1权威指南光盘源代码第14章"很可能是对这个版本的Struts2框架进行深入学习的辅助资料,包含了实际应用中的示例代码和教程。 在第14章中,我们可能探讨的是更高级的主题,如自定义拦截器、结果类型、插件和...

    第14章 CSS颜色与度量单位

    同时,结合CSS的其他特性,如盒模型、布局模式(如Flexbox和Grid)、动画和过渡,我们可以构建出丰富多彩、交互性强的网页设计。对于开发者来说,熟练掌握这些知识是提升网站用户体验和专业性的关键。

    COMSOL Multiphysics实例-有限元法多物理场建模与分析第十四章

    在这个“COMSOL Multiphysics实例-有限元法多物理场建模与分析第十四章”中,我们将会深入探讨如何使用COMSOL 3.5a版本来解决实际问题,特别是通过实例来学习和理解多物理场的建模和分析。 在COMSOL中,用户可以...

    ASP.NET 2.0全程指南第14章

    第14章可能是关于特定主题的深入探讨,虽然具体的章节内容没有直接给出,但我们可以根据ASP.NET 2.0的核心特性来讨论一些可能涵盖的知识点。 1. **网站项目与Web应用项目**:ASP.NET 2.0引入了两种类型的项目模式...

    Delphi7 程序设计与开发技术大全-第十四章

    ### Delphi7 程序设计与开发技术大全:第十四章 多线程编程 在深入探讨Delphi7中的多线程编程之前,我们首先理解线程与进程的关系,以及多线程技术的重要性。 #### 进程与线程关系 进程是应用程序的执行实例,...

Global site tag (gtag.js) - Google Analytics