zoukankan      html  css  js  c++  java
  • Maven学习笔记5:Maven属性、profile和资源过滤

    Maven的六类属性

      内置属性

        主要有两个常用内置属性:${basedir}项目的根目录(包含pom.xml文件的目录),${version}项目版本

      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.fianlName}:项目打包输出文件的名称。默认为${project.artifactId}-${project.version}

      自定义属性

        用户可以在POM的<properties>元素下自定义Maven属性

      Settings属性

        用户使用settings.开头的属性引用settings.xml文件中XML元素的值

      Java系统属性

        所有Java系统属性都可以使用Maven属性引用

      环境变量属性

        所有环境变量都可以使用以env.开头的Maven属性引用

     

    例如:

    在依赖中 使用pom变量

    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>part-a</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>part-b</artifactId>
            <version>${project-version}</version>
        </dependency>
    </dependencies>
    在插件中使用pom变量
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.5</version>
        <configuration>
            <repositoryDirectory>${project.build.directory}/test-reports</repositoryDirectory>
        </configuration>
    </plugin>
    自定义变量   需要在超级pom 中  过滤 资源文件
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <db.driver>com.mysql.jdbc.Driver</db.driver>
                <db.url>jdbc:mysql://localhost:3360/test</db.url>
                <db.username>username</db.username>
                <db.password>password></db.password>
            </properties>
        </profile>
    </profiles>

    Maven属性默认只有在POM中才会被解析,因此需要让Maven解析资源文件中的Maven属性。Maven用maven-resources-plugin处理资源文件。它默认的行为只是将项目主资源文件复制到主代码编译输出目录中,将测试资源文件复制到测试代码编译输出目录中。Maven默认的主资源目录和测试资源目录的定义是在超级POM中,要为资源目录开启过滤,只要在此基础上添加一行filtering配置即可。Filtering是maven resource插件的功能,作用是用环境变量,pom文件里定义的属性和指定文件里的属性替换属性文件的占位符。(超级pom在 apache-maven-3.3.9libmaven-model-builder-3.3.9.jarorgapachemavenmodelpom-4.0.0.xml)

    1495013624(1)

    添加内容:

    <resources>
        <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    
    <testResources>
        <testResource>
            <directory>${project.basedir}/src/test/resources</directory>
            <filtering>true</filtering>
        </testResource>
    <testResources>

    在src/main/resources目录下创建jdbc.properties文件:

    database.jdbc.driverClass = ${db.driver}

    database.jdbc.connectionURL = ${db.url}

    database.jdbc.username = ${db.username}

    database.jdbc.password = ${db.password}

    mvn clean install  -Pdev //-P参数表示在命令行激活一个profile。编译后在target目录下jdbc.properties中,在maven配置的属性就会显示在jdbc.properties文件中。

    Maven支持多种方式激活profile

      1.命令行激活

        用户可以使用mvn命令行参数-P加上profile的id来激活profile,多个id之间以逗号分割。

          mvn clean install -Pdev-x, dev-y

      2.settings文件显式激活

        用户希望某个profile默认一直处于激活的状态,可以配置settings.xml文件的activeProfiles元素

    <settings>
    
        <activeProfiles>
            <activeProfile>dev-x</activeProfile>
        </activeProfiles>
    
    </settings>

     3.系统属性激活

        用户可以配置档某系统属性存在的时候,自动激活profile

    <profiles> 
        <profile>
            <activation>
                <property>
                    <name>test</name> 
              <value>x</value> //当值为x的时候激活profile
                </property>
            </activation>
        </profile>
    </profiles>

      mvn clean install -Dtest = x

      4.操作系统环境激活

        Profile可以自动根据操作系统环境激活,如果构建在不同的操作系统有差异,用户完全可以将这些差异写进profile,然后配置它们自动基于操作系统环境激活。  

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

     5.文件存在与否激活

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

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

     

     6.默认激活

        用户可以在定义profile的时候指定其默认激活

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profiles>
    </profiles>

    查看当前激活的profile  mvn help:active-profiles

    列出当前所有的profile      mvn help:all-profiles

    profile的种类

      根据具体的需要,可以在以下位置声明profile

      pox.xml:只对当前项目有效

      用户settings.xml:用户目录下.m2/settings.xml中的profile对本机上该用户所有的Maven项目有效

      全局settings.xml:Mavem安装目录下conf/settings.xml中的profile对本机上所有的Maven项目有效

      profiles.xml:还可以在项目根目录下使用一个额外的profiles.xml文件来声明profile,不过该特性已经在Maven3中被移除。建议用户将这类profile移到settings.xml中。

    POM中profile可使用的元素

    <project>

      <repositories></repositories>  //修改或添加仓库

      <pluginRepositories></pluginRepositories>  //修改或添加插件仓库

      <distributionManagement></distributionManagement>  //修改或添加仓库部署地址

      <dependencies></dependencies>  //修改或添加项目依赖

      <dependencyManagement></dependencyMangement>  //修改或添加项目依赖

      <modules></modules>  //修改聚合项目的聚合配置

      <properties></properties>  //自由添加或修改Maven属性

      <reporting></reporting>  //添加或修改项目报告配置

      <build>

        <plugins><plugins>  

        <defaultGoal></defaultGoal>

        <resources></resources>

        <testResources></testResources>

        <finalName></finalName>

      </build>

    </project>

    Web资源过滤

      在Web项目中,资源文件位于src/main/resources/目录下,他们经处理后会位于WAR包的WEB-INF/classes目录下,即这类资源文件在打包过后位于应用程序的classpath中。Web项目中位于src/main/webapp目录,经打包后位于WAR包的根目录。这一类资源文件称作web资源文件,他们在打包过后不位于应用程序的classpath中。web资源默认不会被过滤,因此开启一般资源文件的过滤也不会影响到web资源文件。

    <profiles>
        <profile>
            <id>client-a</id>
            <properties>
                <client.logo>a.jpg</client.logo>
                <client.theme>red</client.theme>
            </properties>
        </profile>
        <profile>
            <id>client-b</id>
            <properties>
                <client.logo>b.jpg</client.logo>
                <client.theme>blue</client.theme>
            </properties>
        </profile>
    </profiles>
    

    需要配置maven-war-plugin对src/main/webapp这一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>
  • 相关阅读:
    【流量劫持】SSLStrip 终极版 —— location 瞒天过海
    【流量劫持】沉默中的狂怒 —— Cookie 大喷发
    【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持
    Web 前端攻防(2014版)
    流量劫持 —— 浮层登录框的隐患
    流量劫持能有多大危害?
    流量劫持是如何产生的?
    XSS 前端防火墙 —— 整装待发
    XSS 前端防火墙 —— 天衣无缝的防护
    XSS 前端防火墙 —— 无懈可击的钩子
  • 原文地址:https://www.cnblogs.com/ljp-sun/p/6868537.html
Copyright © 2011-2022 走看看