`

八. 灵活的构建

 
阅读更多

Maven为了支持构建的灵活性,适应开发环境、测试环境和生产环境内置了三大特性,即属性、Profile和资源过滤

 

1.Maven的属性 <properties>

 

Maven有6类属性

(1)内置属性:主要有两个常用内置属性

    ${basedir}:表示项目根目录,即包含pom.xml文件的目录;

    ${version}:表示项目版本

(2)POM属性:该类属性引用POM文件中对应元素的值,它们中的一些属性的默认值都是定义在超级POM中,常用的POM属性包括:

    ${project.build.sourceDirectory}:项目的主源码路径,默认为 src/main/java/ ;

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

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

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

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

    ${project.groupId}:项目的groupId ;

    ${project.artifactId}:项目的artifactId ;

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

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

(3)自定义属性

<project>  
    <properties>  
        <my.prop>hello</my.prop>  
    </properties>  
</project>

然后在POM中其它地方使用${my.prop}的时候会被替换成hello

 

(4)Setting属性:与POM属性同理,用户使用settings,开头的属性引用settings.xml文件中XML元素的值。常用的有:${settings.localRepository}指向用户本地仓库的地址。

(5)Java系统属性:所有Java系统属性都可以使用Maven属性引用,例如${user.home}指向了用户目录。可以通过命令行mvn help:system查看所有的Java系统属性。

(6)环境变量属性:所有环境变量都可以使用以env.开头的Maven属性引用。例如${env.JAVA_HOME}指代了JAVA_HOME环境变量的值。也可以通过命令行mvn help:system查看所有环境变量。

 

2.资源过滤

 

(1)Maven属性默认情况下只有在pom.xml文件中才能使用。如果想根据不同的环境自动配置properties文件中也使用Maven的属性(即,将Maven Profile中配置替换到资源中${xxx}上)。首先需要开启资源过滤

开启资源过滤的方法如下(通过maven-resources-plugin实现):

 

<build>  
    <resources>  
        <resource>  
            <directory>src/main/resources</directory>  
            <filtering>true</filtering>  
        </resource>  
    </resources>  
    <testResources>  
        <testResource>  
            <directory>src/test/resources</directory>  
            <filtering>true</filtering>  
        </testResource>  
    </testResources>  
</build>  

    filtering的值true/false对应开启/关闭

 

 

(2)还可以开启web项目的资源过滤,方法如下:

 

<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-war-plugin</artifactId>  
    <version>2.3</version>  
    <configuration>  
        <webResources>  
            <resource>  
                <filtering>true</filtering>  
                <directory>src/main/webapp</directory>  
                <includes>  
                    <include>**/*.css</include>  
                    <include>**/*.js</include>  
                </includes>  
            </resource>  
        </webResources>  
    </configuration>  
</plugin> 

 

 

(3)自定义基于Maven Profile的属性

为了替换开启资源过滤的目录下进行替换,需要自定义Profile的属性

Profile属性与properties标签定义属性类似,但是需要一个id,定义样式如下:

 

<project>
	<profiles>
		<profile>
			<id>myId</id>
			<properties>
				<my.property>myPropertyValue</my.property>
			</properties>
		</profile>
	</profiles>
</project>

 

 

(4)运行命令

通过-P参数表示在命令行激活一个profile,可用逗号分隔激活多个运行命令如下:

mvn clean compile -PmyId,myId2

 

3.Maven Profile

 

为了能够构建在各个环境下方便移植,Maven引入了profile的概念。

首先需要开启资源过滤

profile能够在构建的时候修改POM的一个子集,或者添加额外的配置元素。注意的一点是,profile在pom.xml中可声明的元素在settings.xml中可声明的元素是不一样的:

 

profile在pom.xml中可声明的元素

<project>  
    <repositories></repositories>  
    <pluginRepositories></pluginRepositories>  
    <distributionManagement></distributionManagement>  
    <dependencies></dependencies>  
    <dependencyManagement></dependencyManagement>  
    <modules></modules>  
    <properties></properties>  
    <reporting></reporting>  
    <build>  
        <plugins></plugins>  
        <defaultGoal></defaultGoal>  
        <resources></resources>  
        <testResources></testResources>  
        <finalName></finalName>  
    </build>  
</project>  

 

profile在settings.xml中可声明的元素:

<project>  
    <repositories></repositories>  
    <pluginRepositories></pluginRepositories>  
    <properties></properties>  
</project>  

 

激活profile

 

(1)命令行激活

使用mvn命令行参数-P加上profile的id来激活profile,多个id直接以逗号分隔

mvn clean install  -Pdevx,devy  

 

(2)settings文件显式激活

如果用户希望某个profile默认一直处于激活状态,就可以配置setting.xml文件的activeProfiles元素,表示配置的profile对于所有项目都是处于激活状态

<settings>  
    ...  
    <activeProfiles>  
        <activeProfile>devx</activeProfile>  
        <activeProfile>devy</activeProfile>  
    </activeProfiles>  
    ...  
</settings>  

 

(3)系统属性激活,用户可以配置当某系统属性存在或其值等于期望值时激活profile

<profiles>  
    <profile>  
        <activation>  
            <property>  
                <name>actProp</name>  
                <!-- 当存在value时,表示某系统属性存在且其值等于期望值时激活 -->
                <value>x</value>  
            </property>  
        </activation>  
    </profile>  
</profiles>  

 不要忘了,可以在命令行声明系统属性。如:

mvn clean install -DactProp=x 

 这其实也是一种从命令行激活profile的方法,而且多个profile完全可以使用同一个系统属性来激活。别忘了,系统属性可以通过mvn help:system来查看

 

(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值包括Window、UNIX和Mac等,而其他几项对应系统属性的os.name、os.arch、os.version

 

(5)文件存在与否激活,Maven能根据项目中某个文件存在与否来决定是否激活profile

<profiles>  
    <profile>  
        <activation>  
            <file>  
                <missing>x.properties</missing>  
                <exists>y.properties</exists>  
            </file>  
        </activation>  
    </profile>  
</profiles>  

 

(6)默认激活

<!--默认启用的是dev环境配置-->
<profile>
   <id>dev</id>
   <properties>
	  <env>dev</env>
   </properties>
   <activation>
	  <activeByDefault>true</activeByDefault>
   </activation>
</profile>

    使用activeByDefault元素用户可以指定profile自动激活。

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

 

查看当前激活的profile

mvn help:active-profiles

 

列出当前所有的profile:

mvn help:all-profiles  

 

4.profile的种类

 

(1)pom.xml:只对当前项目有效

(2)用户setting.xml:本机上该用户所有的Maven项目有效

(3)全局setting.xml:本机上所有用户的Maven项目有效

 

 

 

分享到:
评论

相关推荐

    VB ADODB的小程序(代码)八.rar

    这个名为“VB ADODB的小程序(代码)八.rar”的压缩包包含了一系列与VB ADODB相关的代码示例,主要涉及以下几个方面: 1. **VB ADODB 二次打开数据库**: 当需要在同一个VB程序中多次访问数据库时,可以使用ADODB...

    Jenkins参数化构建部署手册.docx

    这种方式能够提高构建的灵活性和可定制性。 - **应用场景**: 当需要根据不同环境(如开发环境、测试环境、生产环境)进行构建时,或者需要根据特定条件(如构建版本、构建时间等)执行不同的构建策略时,参数化构建...

    gameoflife-vuejs:Conway用Vue.js构建的生命游戏

    作者努瓦曼·塔西在2020年创建了这个项目,向我们展示了如何结合Vue.js的灵活性和康威生命游戏的趣味性,创造出一个互动的、引人入胜的Web应用。在解压名为“gameoflife-vuejs-master”的压缩包后,我们可以查看到...

    农村供水工程设计图集数据库的构建.docx

    在农村供水工程设计图集数据库的构建过程中,还需要注意以下细节与实践经验:对于设计图集的编制,应注重统一性和多样性相结合,既要遵循国家或地方的技术标准和质量要求,又要根据实际情况和特殊条件进行灵活调整和...

    冷阴极材料行业(2021-2026)企业市场突围战略分析与建议.docx

    市场需求波动,价格压力大..........................................297.4 应对策略:灵活调整生产计划,优化成本控制...........................30第八章 法规政策环境分析.......................................

    广发证券_0410_FOF系列专题之八:利用指数量化基金构建FOF组合.pdf

    - **指数ETF**:采用改进的马科维茨模型,结合灵活调仓策略。 - **行业ETF**:通过PCA(主成分分析)去除行业相关性,再应用风险平价模型构建组合。 - **指数增强型基金**:重点考虑沪深300和中证500指数增强基金...

    Openstack构建企业私有云 vhaoxue.com

    ### OpenStack构建企业私有云 ...#### 八、Q&A 对于任何关于OpenStack构建私有云的问题,我们都欢迎游戏运维和研发工程师加入我们,共同探讨和解决问题。如果您有任何疑问或建议,请随时联系我们。

    天龙八部php后台

    管理员可以创建、删除、修改用户信息,根据需求设置不同级别的权限,如普通玩家、VIP用户、管理员等,确保了后台管理的灵活性和安全性。 2. 数据管理:后台系统能够实时记录和分析游戏内的各种数据,如角色等级、...

    构建有竞争力的供应链网络.pptx

    供应链网络构建是指根据企业的战略目标和需求,设计和实施一个高效、灵活、可靠的供应链系统,以满足客户需求,提高竞争力和市场份额。本文档将详细介绍供应链网络构建的基础理论和方法。 一、供应链环境、经营主体...

    民营建筑企业如何构建薪酬管理体系.doc

    总的来说,民营建筑企业构建薪酬管理体系需兼顾公平、透明、行业规范和灵活性,通过科学的薪酬设计,既能吸引和留住人才,又能推动企业健康发展。同时,良好的薪酬体系还有助于塑造企业文化,提升员工满意度,从而...

    Vue 项目构建与开发入门.zip

    Vue.js 是由尤雨溪创建的轻量级前端框架,以其易学易用、灵活性高和性能优秀等特点受到开发者们的广泛欢迎。Vue采用MVVM(Model-View-ViewModel)架构模式,使开发者能够轻松地处理数据和视图之间的绑定。 二、环境...

    ApacheSpark系列技术直播第八讲微软Azure平台利用IntelAnalyticsZoo构建AI客服支持实践.pdf

    ### Apache Spark 系列技术直播第八讲:微软 Azure 平台利用 Intel Analytics Zoo 构建 AI 客服支持实践 #### 关于 Intel Analytics Zoo 的介绍 Intel Analytics Zoo 是一个统一的分析与人工智能平台,旨在为...

    工业清洁剂行业(2021-2026)企业市场突围战略分析与建议.docx

    面对政策环境的变化,企业应灵活应对,如遵循环保法规,适应贸易政策调整,以及及时跟进技术标准。数字化转型是现代企业发展的重要方向,包括数字化生产、数据分析、电商平台建设和工业互联网平台的应用,以提高效率...

    个人知识管理系统构建.ppt

    第八,软件需要具有维护管理简便功能,能够简便地维护和更新个人数字图书馆。 一些常见的个人知识管理软件包括个人知识王、超级文档管理器、文档资源管理软件—Mybase、个人数字图书馆—清华同方等。 个人知识王是...

    频率分析仪行业(2021-2026)企业市场突围战略分析与建议.docx

    针对特定市场群体实施精准营销..............................224.4 定价策略差异化:根据产品价值和市场竞争状况灵活定价..................23第五章 频率分析仪行业企业合作与联盟战略..............................

    跌落试验机行业(2021-2026)企业市场突围战略分析与建议.docx

    强调创新精神,营造积极工作氛围......................337.4 激励机制:制定公平的薪酬福利体系,激发员工潜能...............34第八章 风险评估与应对措施.........................................................

    springboot+vue基于Java 语言的茶叶销售系统的前端设计与实现论文.docx

    它提供了一个灵活的方式来构建 web 应用程序,支持自动配置、生产就绪和高效开发。 SpringBoot 的主要特点包括自动配置、 starters、actuator 等。 二、Vue.js 简介 Vue.js 是一个 Progressive 和 flexible 的 ...

    51单片机实时操作系统的构建.pdf

    本文将基于《51单片机实时操作系统的构建.pdf》这一资料,详细探讨如何构建一个适用于51单片机的实时操作系统,并重点分析51单片机的基本架构、时钟管理、中断处理、I/O端口配置以及定时器功能等内容。 #### 二、51...

Global site tag (gtag.js) - Google Analytics