1 引言

项目中build 时用到了maven-jar-plugin ,其中有一个 ${project.build.directory}

            <plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<outputDirectory>${project.build.directory}/pdt/lib</outputDirectory>
</configuration>
</plugin>

正常理解是:在这个pom中或者父pom中通过 <properties> 定义这个属性

但是找了许久没有找到,通过查找各种资料才知道这是一个缺省值(dafault-value)

是项目的 target/

理所当然便引出了"究竟有多少缺省值?" 这个问题

2 如何获取属性

http://maven.apache.org/guides/getting-started/

Sometimes a resource file will need to contain a value that can only be supplied at build time. To accomplish this in Maven, put a reference to the property that will contain the value into your resource file using the syntax ${<property name>}. The property can be one of the values defined in your pom.xml, a value defined in the user's settings.xml, a property defined in an external properties file, or a system property.

2.1 语法 ${<property name>}

  1. one of the values defined in your pom.xml
  2. a value defined in the user's settings.xml
  3. a property defined in an external properties file
  4. a system property

2.2 在 pom.xml 中定义property ,请参考pom.xml 的语法

    <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

?

2.3 在 settings.xml 中定义 property ,请参考 MAVEN_HOME/conf/settings.xml 的语法

    <profile>
<properties>
<tomcatPath>/path/to/tomcat/instance</tomcatPath>
</properties>
</profile>

2.4 在 .properties 文件中定义 property

some.properties 位于CLASS_PATH 下

svn.password=test

2.5 在 system property

启动jdk时 通过 -D 指定(还有其他的已有的不具体分析System.getProperties();)

2.6 Java EL表达式

http://docs.oracle.com/javaee/6/tutorial/doc/gjddd.html

3 缺省值列表

3.1 一些资料中的

As you can see, the project created from the archetype has a POM, a source tree for your application's sources and a source tree for your test sources. This is the standard layout for Maven projects (the application sources reside in ${basedir}/src/main/java and test sources reside in ${basedir}/src/test/java, where ${basedir} represents the directory containing pom.xml).

${basedir}

3.2 父 pom 中的

父pom位置:

%MAVEN_HOME%\lib\maven-model-builder-3.2.5.jar\org\apache\maven\model\pom-4.0.0.xml

<build>
  <directory>${project.basedir}/target</directory>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<finalName>${project.artifactId}-${project.version}</finalName>
<testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<scriptSourceDirectory>${project.basedir}/src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>

例如:project.build.directory

3.3 为什么可以用 project.name

Maven 源码

https://github.com/apache/maven

http://maven.apache.org/ref/3.2.3/apidocs/org/apache/maven/project/MavenProject.html

DefaultProjectBuilder.java 构建 一个 MavenProject

而MavenProject 所对应就是pom.xml

既然是${project} 那就应该存在一个 getProject()

上面这个类具体怎么执行没有深入调查,或许是这个类或许是其他类,但一定会有getProject() 这个方法来对应EL表达式

这个对象中有这些 setter 和 getter

${project.name} 一定是这个

那么这个project 中的 build 呢

http://maven.apache.org/ref/3.2.3/apidocs/overview-summary.html

org.apache.maven.model
Maven POM (Project Object Model) classes, generated from maven.mdo model.

这个包中的类是由 maven.mdo 生成的,也就是说下载Maven源码之后,需要执行安装,才能生成。

org.apache.maven.model.Build 也是如此(Build 继承 BuildBase)

结论

${project.build.directory}

等价于

String projectBuildDirectory = getProject().getBuild().getDirectory();

最后一个问题:basedir 在哪呢?

在 project 中

这就可以理解为什么是 ${basedir}了

在哪里设置的呢?

MavenProject 中没有setBasedir() 方法, 根据观察有下面这个方法

    public void setFile( File file )
{
this.file = file;
this.basedir = file != null ? file.getParentFile() : null;
}

这个file 指的是当前项目的 pom.xml  (不是父pom)

basedir 指的是包含 pom.xml 的文件夹

4 总结

这就是喜闻乐见的 target 为什么会和pom.xml 同级

classes 为什么会在target下

test-classes 为什么会在target下 的原因了

这些属性是可以在各种plugin 中指定为自己的路径

21)pom 中的缺省值(default properties)的更多相关文章

  1. Query Designer中的特征限制(Characteristic Restrictions)、缺省值(Default Values)、自由特性(Free Characteristics)

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. pandas学习(常用数学统计方法总结、读取或保存数据、缺省值和异常值处理)

    pandas学习(常用数学统计方法总结.读取或保存数据.缺省值和异常值处理) 目录 常用数学统计方法总结 读取或保存数据 缺省值和异常值处理 常用数学统计方法总结 count 计算非NA值的数量 de ...

  3. protobuf中的枚举缺省值应该为UNKNOWN

    protobuf中的枚举缺省值应该为UNKNOWN(金庆的专栏)proto3中的枚举值为了与proto2兼容,要求缺省值固定为第1个,值为0.proto2中并没有规定对范围之外的枚举值的处理,而pro ...

  4. 为 map 中不存在的 key 提供缺省值

    需求 需要往一个复杂的 map 中写入数据,或为 map 中不存在 key 提供 default value java standard library Map<K, List<V> ...

  5. scala 学习笔记(03) 参数缺省值、不定个数参数、类的属性(Property)、泛型初步

    继续学习,这一篇主要是通过scala来吐槽java的,同样是jvm上的语言,差距咋就这么大呢? 作为一个有.NET开发经验的程序员,当初刚接触java时,相信很多人对java语言有以下不爽(只列了极小 ...

  6. 修改表增加字段默认值default

    对个生产库的表增加1个字段.字段类型是INT型, 表数据有2千万条, alter table table_name add xxoo number(4) default  0 ; 因此 不仅要修改字典 ...

  7. maven 仓库配置 pom中repositories属性

    文章转自http://blog.csdn.net/zlgydx/article/details/51130627 什么是Maven仓库在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录 ...

  8. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  9. C++ 函数重载和参数的缺省值

    一.函数重载 1.1 重载的起源 自然语言中,一个词可以有许多不同的含义,即该词被重载了.人们可以通过上下文来判断该词到底是哪种含义."词的重载"可以使语言更加简练.例如" ...

随机推荐

  1. 反射——Java反射机制

    反射概述 什么是反射? ①   反射的概念是由Smith在1982年首次提出的,主要指程序可以访问.检测和修改它本身状态或行为的一种能力. ②   JAVA反射机制是在运行状态中,对应任意一个类,都能 ...

  2. lucene写索引出现锁文件的原因之一

    lucene正常情况目录下的文件 有三个文件. segments.gen segments_a08, 还有一个类似 _uw.cfs名字的东西. 当然,不一定都一样, 但肯定是这三个. 如果出现了很多文 ...

  3. Ueditor1.4.3.3+springMvc+maven 实现图片上传

    前记:由于项目中需要有一个新增数据并且要能支持表格图片上传的功能.使用了ueditor控件.为实现这个功能,从一开始什么都看不懂,到一直连着弄了5天,总算是有了眉目.在此记录一下以便能帮到可以和我一样 ...

  4. SVN服务器与测试服务器代码同步

    在本地做测试项目的时候,想svn提交和服务器上的代码一步到位,不想再手动更新一次了,所以就研究了下同步, 要实现svn提交后自动更新到测试服务器,在你的版本库下的hooks文件夹下添加post-com ...

  5. 获取IMap上绘制的Element的区域范围

    运行环境:开发环境:Windows7旗舰版64bit.VisualStudio2008 With SP1.ArcEngine10.0.NetFrameWork4.0.IIS7和C#开发语言. 问题描述 ...

  6. php 中遍历数组时使用引用出现的问题

    今天在使用foreach遍历数组时发现,当使用&时会出现问题: $arr = array( array('id' => 100, 'error'=> 'aa'), array('i ...

  7. 延迟对象$q和供应商配置config

    1.angular总的$q和jquery中的延迟对象很类似,用法也差不多 m1.controller('meng',['$scope','$q',function($scope,$q){ var df ...

  8. SikuliLibrary 库关键字注释

    在  https://github.com/rainmanwy/robotframework-SikuliLibrary 看到rainmanwy 整理的SikuliLibrary库,非常适合工作需要, ...

  9. SQL Server 2008 r2 中 SQL语句提示“对象名无效”,但可执行

    [问题描述]在使用 SQL Server 2008 r2 时,有时在完成SQL书写后,会提示“对象名无效”,而SQL语句可正常执行. [原因]缓存相关. [解决方法]ctrl+shift+R 刷新下, ...

  10. 激活神器 KMSAuto Net 2015 v1.3.8

    KMSAuto Net – Windows 操作系统 KMS 自动激活工具!支持 Windows Vista,7,8,8.1,10, Server 2008,2008 R2,2012,2012 R2, ...