21)pom 中的缺省值(default properties)
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>}
- 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
- 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)的更多相关文章
- Query Designer中的特征限制(Characteristic Restrictions)、缺省值(Default Values)、自由特性(Free Characteristics)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- pandas学习(常用数学统计方法总结、读取或保存数据、缺省值和异常值处理)
pandas学习(常用数学统计方法总结.读取或保存数据.缺省值和异常值处理) 目录 常用数学统计方法总结 读取或保存数据 缺省值和异常值处理 常用数学统计方法总结 count 计算非NA值的数量 de ...
- protobuf中的枚举缺省值应该为UNKNOWN
protobuf中的枚举缺省值应该为UNKNOWN(金庆的专栏)proto3中的枚举值为了与proto2兼容,要求缺省值固定为第1个,值为0.proto2中并没有规定对范围之外的枚举值的处理,而pro ...
- 为 map 中不存在的 key 提供缺省值
需求 需要往一个复杂的 map 中写入数据,或为 map 中不存在 key 提供 default value java standard library Map<K, List<V> ...
- scala 学习笔记(03) 参数缺省值、不定个数参数、类的属性(Property)、泛型初步
继续学习,这一篇主要是通过scala来吐槽java的,同样是jvm上的语言,差距咋就这么大呢? 作为一个有.NET开发经验的程序员,当初刚接触java时,相信很多人对java语言有以下不爽(只列了极小 ...
- 修改表增加字段默认值default
对个生产库的表增加1个字段.字段类型是INT型, 表数据有2千万条, alter table table_name add xxoo number(4) default 0 ; 因此 不仅要修改字典 ...
- maven 仓库配置 pom中repositories属性
文章转自http://blog.csdn.net/zlgydx/article/details/51130627 什么是Maven仓库在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- C++ 函数重载和参数的缺省值
一.函数重载 1.1 重载的起源 自然语言中,一个词可以有许多不同的含义,即该词被重载了.人们可以通过上下文来判断该词到底是哪种含义."词的重载"可以使语言更加简练.例如" ...
随机推荐
- .Net字符串替换
在.Net中,有些地方需要进行字符的替换才能实现一些相关功能,这里是一个简单的字符串替换的方法 //如下,变量strWhere中是通过一些方法获取的sql拼接的条件语句,但在数据库中是多表查询,有同名 ...
- eclipse中outline中图标的含义
outline: 实心的代表方法 空心的代表属性 绿色的圆表示公有public 黄色的菱形表示保护protect 红色的方形表示私有private 蓝色的三角表示default 图形后加字母S代表该属 ...
- 获取项目中文件,存放到Debug中。
说起这个,还真是费了一般功夫. 说个最简单的方法: 第一步:把需要生成到Debug中的文件放到项目中(注意:当前文件夹目录是什么样的,存放到Debug中也是什么样) 第二部:设置文件属性中 复制到输出 ...
- LeetCode OJ 116. Populating Next Right Pointers in Each Node
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
- 自适应UITableView的Cell高度问题
1.自己计算Cell的高度返回: 1>model中计算: // // InfoModel.h // OCDemo // // Created by 思 彭 on 16/12/27. // Cop ...
- [转载]Matlab之静态文本多行输出
转载文章,原文链接:Matlab中的静态文本框中显示多行内容 有时候,我们在GUI中利用静态文本框显示程序的结果,但是结果很长,一行未必可以显示的开,而静态文本框不像edit或listbox那样通过滚 ...
- 安装YouCompleteMe
1. from software center 1 $ apt-get install vim vim-youcompleteme vim-addon-manager 2 $ vam install ...
- 你不知道的函数节流,提高你的JS性能!
浏览器的DOM计算处理非常耗费CPU时间,霸占内存,这对我们的开发来说是非常不友好的,,比如IE浏览器的onresize事件就可能在用户稍微拖动一下窗口时计算上千次,甚至更高频率直接让浏览器崩溃... ...
- JS编写背景图切换
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- MVC4 本地正常运行,发布到IIS7->403 - 禁止访问: 访问被拒绝。
代码编写完成,计划发布一个版本测试,没想到发布到IIS7 竟然报错“403-禁止访问”.还真第一次遇到这种问题..... 折腾了半天,终于解决. 1.提示报错403: 禁止访问: 访问被拒绝.您无权使 ...