maven的配置文件看似很复杂,其实只须要根据项目的实际背景,设置个别的几个配置项而已。maven有本身的一套默认配置,使用者除非必要,并不须要去修改那些约定内容。这就是所谓的“约定优于配置”。java
maven默认的文件存放结构以下: 算法
compile
任务就知道从
src/main/java
下编译全部的
java
文件,并把它的输出
class
文件存放到
target/classes
中。
对maven来讲,采用"约定优于配置"的策略能够减小修改配置的工做量,也能够下降学习成本,更重要的是,给项目引入了统一的规范。maven
maven有本身的版本规范,通常是以下定义: <majorversion>.<minor version>.<incremental version>-<qualifier>
好比1.2.3-beta-01。要说明的是,maven本身判断版本的算法是major
,minor
,incremental
部分用数字比较,qualifier部分用字符串比较,因此要当心 alpha-2和alpha-15的比较关系,最好用 alpha-02的格式。学习
maven在版本管理时候可使用几个特殊的字符串 SNAPSHOT
,LATEST
,RELEASE
。好比1.0-SNAPSHOT
。各个部分的含义和处理逻辑以下说明:ui
l SNAPSHOT 若是一个版本包含字符串"SNAPSHOT",Maven就会在安装或发布这个组件的时候将该符号展开为一个日期和时间值,转换为UTC时间。例如,"1.0-SNAPSHOT"会在2010年5月5日下午2点10分发布时候变成1.0-20100505-141000-1。编码
这个词只能用于开发过程当中,由于通常来讲,项目组都会频繁发布一些版本,最后实际发布的时候,会在这些snapshot版本中寻找一个稳定的,用于正式发 布,好比1.4版本发布以前,就会有一系列的1.4-SNAPSHOT,而实际发布的1.4,也是从中拿出来的一个稳定版。code
l LATEST 指某个特定构件的最新发布,这个发布多是一个发布版,也多是一个snapshot版,具体看哪一个时间最后。cdn
l RELEASE 指最后一个发布版。xml
除了在setting.xml以及pom.xml当中用properties定义的常量,maven还提供了一些隐式的变量,用来访问系统环境变量。blog
类别 | 例子 |
---|---|
内置属性 | ${basedir} 表示项目根目录,即包含pom.xml文件的目录${version} 表示项目版本${project.basedir} 同${basedir} ${project.baseUri} 表示项目文件地址${maven.build.timestamp} 表示项目构件开始时间 |
setting属性 | ${settings.localRepository } 表示本地仓库路径 |
POM属性 | ${project.build.directory} 表示主源码路径${project.build.sourceEncoding} 表示主源码的编码格式${project.build.sourceDirectory} 表示主源码路径${project.build.finalName} 表示输出文件名称${project.version} 表示项目版本,与${version} 相同 |
Java系统属性 | ${user.home} 表示用户目录${java.version} 表示Java版本 |
环境变量属性 | ${env.JAVA_HOME} 表示JAVA_HOME环境变量的值${env.HOME } 表示用户目录 |
上级工程变量 | 上级工程的pom中的变量用前缀 ${project.parent } 引用。上级工程的版本也能够这样引用: ${parent.version } |