• Maven学习总结(17)——深入理解maven灵活的构建


     一个优秀的构建系统必须足够灵活,应该能够让项目在不同的环境下都能成功构建。maven为了支持构建的灵活性,内置了三大特性,即:属性、profile和资源过滤

    1、maven属性

     maven属性分6类:
        1、内置属性:如${basedir}表示项目根目录,${version}表示项目版本
        2、POM属性:用户可以引用pom文件中对应的值。如:
             ${basedir} 项目根目录
             ${project.build.directory} 构建目录,缺省为target
             ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
             ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
             ${project.packaging} 打包类型,缺省为jar
             ${project.xxx} 当前pom文件的任意节点的内容 
        3、自定义属性:用户可以在pom的<properties>元素下自定义maven属性。
        4、setting属性:用户可以使用以settings开头的属性引用settings.xml中xml元素的值,如${settings.localRepository}指向用户本地仓库的地址。
        5、java系统属性:maven可以使用当前java系统的属性,如${user.home}指向了用户目录。
        6、环境变量属性:所有环境变量都可以使用以env.开头的属性。如:${env.JAVA_HOE}。

    2、资源过滤

         这里所谓的资源:也就就是指src/main/resources和src/test/resources文件下的所有文件,默认情况下,这些文件会被复制到classpath下面,即target/classes下面。
         所谓资源过滤,就是过滤这些文件夹下面的文件里面的内容,看里面的maven变量是否需要替换。默认情况下,只有pom.xml里面的变量才会被替换,资源文件是不会被过滤的,但是可以设置,如下:

    [html] view plain copy
     print?在CODE上查看代码片派生到我的代码片
    1. <build>  
    2.         <finalName>agentmanager</finalName>  
    3.         <sourceDirectory>src/main/java</sourceDirectory>  
    4.         <resources>  
    5.             <!-- 控制资源文件的拷贝 -->  
    6.             <resource>  
    7.                 <directory>src/main/resources</directory>  
    8.                 <excludes>  
    9.                     <exclude>**/jre.zip</exclude>  
    10.                     <exclude>**/jre.tar</exclude>  
    11.                     <exclude>agentmanager.jsmooth</exclude>  
    12.                     <exclude>assembly.xml</exclude>  
    13.                 </excludes>  
    14.                 <targetPath>${project.build.directory}</targetPath>  
    15.             </resource>  
    16.             <resource>  
    17.                 <directory>src/main/resources/conf</directory>  
    18.                 <targetPath>${basedir}/conf</targetPath>  
    19.                 <filtering>true</filtering>  
    20.             </resource>  
    21.         </resources>  
    22.     </build>  


     

    如jdbc.properties

    1. jdbc.driverClassName=${db.driver}  
    2. jdbc.url=${db.url}  
    3. jdbc.username=${db.user}  
    4. jdbc.password=${db.pwd}  

     

    profile文件

    [html] view plain copy
     print?在CODE上查看代码片派生到我的代码片
    1. <profiles>  
    2.  <profile>  
    3.   <id>dev</id>  
    4.   <properties>  
    5.    <db.driver>oracle.jdbc.driver.OracleDriver</db.driver>  
    6.    <db.url>jdbc:oracle:thin:@10.252.48.3:1521:dbname</db.url>  
    7.    <db.user>username</db.user>  
    8.    <db.pwd>userpwd</db.pwd>  
    9.   </properties>  
    10.  </profile>  
    11.  <profile>  
    12.   <id>test</id>  
    13.   <properties>  
    14.    <db.driver>oracle.jdbc.driver.OracleDriver</db.driver>  
    15.    <db.url>jdbc:oracle:thin:@10.252.48.3:1521:testdbname</db.url>  
    16.    <db.user>testusername</db.user>  
    17.    <db.pwd>testuserpwd</db.pwd>  
    18.   </properties>  
    19.  </profile>  
    20. </profiles>  



    在构建时可以使用-P参数激活一个或多个profile,多个之间用逗号分隔
    如 mvn clean install -Pdev

    3、maven profile

         上面例子应该可以看出profile是做什么的,其实就相当于定义了一系列的profile变量,在具体构建时可用使用其中的某个profile去变量替换资源文件。
          激活profile的方式有很多,如命令行激活(上面),settings文件显式激活、系统属性激活、操作系统环境激活、默认激活、文件存在与否激活等,具体可以参考官网资料


    3.1 profile的种类

         根据需要,可以在以下文件声明profile。
          1、pom.xml 针对当前项目
          2、用户 settings.xml 用户目录下的.m2/settings.xml, 对当前用户的所有项目有效。
          3、全局 settings.xml 即maven安装目录下的conf/settings.xml。对本机上的所有项目有效。

    4、web资源过滤

         在maven的web项目里面,除了上面所说的资源文件(src/main/resources)之外,还有一类叫做web资源目录,即src/main/webapp下面的js、css等等。默认情况下,这些目录是不被资源过滤的,开启的命令如下:

    [html] view plain copy
     print?在CODE上查看代码片派生到我的代码片
    1.   <plugin>  
    2.     <groupId>org.apache.maven.plugins</groupId>  
    3.     <artifactId>maven-war-plugin</artifactId>  
    4.     <version>2.1.1</version>  
    5.     <configuration>  
    6.         <webResources>  
    7.         <resource>  
    8.             <directory>src/main/webapp</directory>  
    9.             <filtering>true</filtering>  
    10.             <includes>  
    11.             <include>**/*.css</include>  
    12.             <include>**/*.js</include>  
    13.             </includes>                            
    14.         </resource>      
    15.         </webResources>  
    16.     </configuration>  
    17. </plugin>  

  • 相关阅读:
    async/await使用深入详解
    尴尬的事情又发生Newtonsoft.Json vs Protobuf.net
    在dotnet core下去中心化访问HTTP服务集群
    条件随机场CRF(一)从随机场到线性链条件随机场
    用hmmlearn学习隐马尔科夫模型HMM
    隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
    隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数
    隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率
    隐马尔科夫模型HMM(一)HMM模型
    EM算法原理总结
  • 原文地址:https://www.cnblogs.com/zhanghaiyang/p/7213174.html
Copyright © 2020-2023  润新知