Maven之属性

来源:互联网 发布:底盘装甲 知乎 编辑:程序博客网 时间:2024/06/14 13:12

1.内置属性

${basedir}表示项目根目录,即包含pom.xml文件的目录;
${version}表示项目版本;
${project.basedir}同${basedir};
${project.baseUri}表示项目文件地址;
${maven.build.timestamp}表示项目构件开始时间;
${maven.build.timestamp.format}表示属性${maven.build.timestamp}的展示格式,默认值为yyyyMMdd-HHmm,可自定义其格式,其类型可参考java.text.SimpleDateFormat。用法如下:
<properties>
  <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
</properties>

2.pom属性

${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/.
${project.build.testSourceDirectory}:项目的测试源码目录,默认为/src/test/java/.
${project.build.sourceEncoding}表示主源码的编码格式;
${project.build.directory}:项目构建输出目录,默认为target/.
${project.outputDirectory}:项目主代码编译输出目录,默认为target/classes/.
${project.testOutputDirectory}:项目测试代码编译输出目录,默认为target/testclasses/.
${project.groupId}:项目的groupId.
${project.artifactId}:项目的artifactId.
${project.version}:项目的version,于${version}等价
${project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}${project.version}

3.自定义属性

在pom.xml文件的<properties>标签下定义的Maven属性
<project>
  <properties>
    <my.pro>abc</my.pro>
  </properties>
</project>
在其他地方使用${my.pro}使用该属性值。

4.settings.xml文件属性

与pom属性同理,用户使用以settings.开头的属性引用settings.xml文件中的XML元素值

${settings.localRepository}表示本地仓库的地址;

5.Java系统属性

所有的Java系统属性都可以使用Maven属性引用
使用mvn help:system命令可查看所有的Java系统属性;
System.getProperties()可得到所有的Java属性;
${user.home}表示用户目录;

6.环境变量属性

所有的环境变量都可以用以env.开头的Maven属性引用;
使用mvn help:system命令可查看所有环境变量;
${env.JAVA_HOME}表示JAVA_HOME环境变量的值;

7.build中resources资源过滤

资源往往不是代码,无需编译,而是一些properties或XML配置文件,构建过程中会往往会将资源文件从源路径复制到指定的目标路径。

<build>  ...  <resources><resource>  <filtering>true</filtering>  <directory>src/main/resources</directory>  <includes><include>*.yml</include><include>*.properties</include><include>*.xml</include><include>*.bat</include><include>config/dev/*.yml</include>  </includes></resource><resource><filtering>false</filtering><directory>src/main/resources</directory>  <includes><include>mybatis-config.xml</include><include>mybatis/**</include><include>spring/*.xml</include><include>i18n/*.properties</include><include>public/**</include><include>static/**</include><include>templates/**</include><include>redis/**</include>  </includes></resource>  </resources>    <testResources>  <testResource>    <directory>${project.basedir}/src/test/resources</directory>    <filtering>true</filtering>  </testResource>    </testResources>  </build>
说明:
resources,build过程中涉及的资源文件
targetPath,资源文件的目标路径
filtering,构建过程中是否对资源进行过滤,默认false;属性文件中定义若干键值对。在构建过程中,对于资源文件中出现的变量(键),将使用属性文件中该键对应的值替换。
directory,资源文件的路径,默认位于${basedir}/src/main/resources/目录下
includes,一组文件名的匹配模式,被匹配的资源文件将被构建过程处理
excludes,一组文件名的匹配模式,被匹配的资源文件将被构建过程忽略。同时被includes和excludes匹配的资源文件,将被忽略。
testResources,test过程中涉及的资源文件,默认位于${basedir}/src/test/resources/目录下。这里的资源文件不会被构建到目标构件中

resources额外功能:可将指定目录的文件作为资源文件打包;里面还有讲到如何配置多个源文件夹。(参考:http://casheen.iteye.com/blog/540385):

当 Maven 规约的默认配置不能够满足我们的需求时,我们就要动手修改项目的 Maven 配置,让我们的项目能够与 Maven 很好地协同工作。这里讨论的需求有:
配置多个源文件夹来管理我们项目的模块
配置多个资源文件夹来管理我们项目模块的资源文件
有些遗留代码的一些资源文件是放在源文件夹下的,为了不改变原有项目结构,我希望 Maven 能够从源文件夹下读取资源文件
我想将项目模块的源文件和资源文件放置在同一个文件夹下,以方便开发与维护

8.properties

在<dependency></dependency>中指定引用jar包版本,如果多个jar包需要保持一致,为了简洁,引入properties属性。

在pom.xml文件的<properties>标签下定义的Maven属性
<project>
  <properties>
    <my.pro>abc</my.pro>
  </properties>
</project>
在其他地方使用${my.pro}使用该属性值。

例如:properties中指定了spring相关jar包的统一版本,引入的各spring包不需要各自声明jar包版本,方便jar包版本管理;

<project>    ...    <properties>      <springframework.version>4.3.4.RELEASE</springframework.version>    </properties>        <!-- 它们自动从项目定义的仓库(本地仓库、中央仓库、远程仓库)中下载项目配置的依赖jar包。-->    <dependencies>      ...      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-core</artifactId>        <version>${springframework.version}</version>      </dependency>            <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-beans</artifactId>        <version>${springframework.version}</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>        <version>${springframework.version}</version>      </dependency>              <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-orm</artifactId>        <version>${springframework.version}</version>      </dependency>              <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-aop</artifactId>        <version>${springframework.version}</version>      </dependency>    </dependencies>  </project>  
9.dependencyManagement和dependency

参考:http://blog.csdn.net/liutengteng130/article/details/46991829

当项目分多个模块时,抽象一层parent项目用来管理子项目的公共依赖,使各子项目依赖项保持一致,项目才能正常运行。在子项目parent属性中引用父项目,只需修改parent项目的依赖配置,就可对所有子项目的公共依赖项进行统一修改。
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

10.pluginManagement和plugin


11.modules


12.profiles



原创粉丝点击