很多笔记及实例摘录自《Maven权威指南》
依赖范围
compile(编译范围)
compile是默认的范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。
provided(已提供范围)
已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。如servlet-api
runtime(运行时范围)
runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。
test(测试范围)
test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
system(系统范围)
system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的。如tools.jar
关于版本的定义
主版本,次版本,增量版本,和限定版本号
<major version>.<minor version>.<incremental version>-<qualifier>
例如:版本“1.3.5”由一个主版本1,一个次版本3,和一个增量版本5。而一个版本“5”只有主版本5,没有次版本和增量版本。限定版本用来标识里程碑构建:alpha和beta发布,限定版本通过连字符与主版本,次版本或增量版本隔离。例如,版本“1.3-beta-01”有一个主版本1,次版本3,和一个限定版本“beta-01”。
需要对版本号的限定版本进行排序。以版本号“1.2.3-alpha-2”和“1.2.3-alpha-10”为例,这里“alpha-2”对应了第二次alpha构建,而“alpha-10”对应了第十次alpha构建。后者比前者排序靠前,因排序按字符串排
SNAPSHOT 表示项目正处于活动的开发状态,快照版本。很不稳定,它随时可能变化。作为一个默认设置,Maven不会从远程仓库检查SNAPSHOT版本,要依赖于SNAPSHOT版本,用户必须在POM中使用repository和pluginRepository元素显式的开启下载snapshot的功能。
LATEST是指某个特定构件最新的发布版或者快照版(snapshot),最近被部署到某个特定仓库的构件。
RELEASE是指仓库中最后的一个非快照版本。
Maven属性
project.*
可使用该project.*前缀来引用任何在MavenPOM中的值,如果在Maven中引用输出目录,应该使用属性来引用这些目录。
• project.build.sourceDirectory
• project.build.scriptSourceDirectory
• project.build.testSourceDirectory
• project.build.outputDirectory
• project.build.testOutputDirectory
• project.build.directory
sourceDirectory,scriptSourceDirectory,和testSourceDirectory提供了项目源码目录的访问方式。
outputDirectory和testOutputDirectory则能让你访问Maven放置字节码和其它构建输出的目录。
directory引用的目录就是包含上述两个输出目录的父目录。
settings.*
Maven Settings。你使用该settings.*前缀来引用~/.m2/settings.xml文件中Maven Settings的值。如本地仓库的位置,以及由某个特定用户配置的服务器,profile,和镜像。
env.*
环境变量如PATH和M2_HOME可以使用env.*前缀来引用。
env.PATH 包含了Maven运行的当前PATH。该PATH包含了一个用来查找可运行脚本和程序的 目录列表,
env.HOME (在*nix系统中)这个变量指向了用户的home目录。但你更应该使用/home/ hudson,而非这个变量。
env.JAVA_HOME 指向了Java安装目录。它要么指向JDK安装目录,要么或者JRE目录。但你更应该 考虑使用/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre而非这个属性。
env.M2_HOME 指向了Maven2安装目录。
系统属性
任何可以通过System.getProperty()方法获取的属性都可以作为Maven属性被引用。
java.version Java运行环境版本
java.vendor Java运行环境供应商
java.vendor.url Java供应商URL
java.home Java安装目录
java.vm.specification.version Java虚拟机规格说明版本
java.vm.specification.vendor Java虚拟机规格说明供应商
java.vm.specification.name Java虚拟机规格说明名称
java.vm.version Java虚拟机实现版本
java.vm.vendor Java虚拟机实现供应商
java.vm.name Java虚拟机实现名称
java.specification.version Java运行环境规格说明版本
java.specification.vendor Java运行环境规格说明供应商
java.specification.name Java运行环境规格说明名称
java.class.version Java类格式版本号
java.class.path Java类路径
java.ext.dirs 扩展目录的路径
os.name 操作系统名称
os.arch 操作系统架构
os.version 操作系统版本
file.separator 文件分隔符(UNIX上是"/",Windows上是"\")
path.separator 路径分隔符(UNIX上是":",Windows上是";")
line.separator 行分隔符(在UNIX和Windows上都是"\n")
user.name 用户帐户名称
user.home 用户home目录
user.dir 用户当前工作目录
用户定义的属性
<properties>
<hibernate.version>4.1</hibernate.version>
</properties>
<build>
<finalName>content-test</finalName>
</build>
settings.xml
文件可位于两个地方
1.Maven安装目录: $M2_HOME/conf/settings.xml
2.用户特定的Settings文件: ~/.m2/settings.xml
settings.xml中顶层元素的概览
<settings xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
localRepository
该值表示构建系统本地仓库的路径。其默认值为~/.m2/repository
<offline>false</offline>
构建系统需要在离线模式下运行,则为true,默认为false。
settings.xml中的Server配置
<servers>
<server>
<id>server001</id>
<username>my_login</username>
<password>my_password</password>
<privateKey>${usr.home}/.ssh/id_dsa</privateKey>
<passphrase>some_passphrase</passphrase>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
<configuration></configuration>
</server>
</servers>
构建生命周期
Maven中有三种标准的生命周期:清理(clean),默认(default)(有时候也称为构建),和站点(site)
mvn clean将调用清理生命周期,它包含了三个生命周期阶段:
pre-clean
clean
post-clean
自定义Clean插件的行为 maven-clean-plugin
默认生命周期 (default) 第一个阶段是validate,最后一个阶段是deploy
validate 验证项目是否正确,以及所有为了完整构建必要 的信息是否可用
generate-sources 生成所有需要包含在编译过程中的源代码
process-sources 处理源代码,比如过滤一些值
generate-resources 生成所有需要包含在打包过程中的资源文件
process-resources 复制并处理资源文件至目标目录,准备打包
compile 编译项目的源代码
process-classes 后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement)
generate-test-sources 生成所有包含在测试编译过程中的测试源码
process-test-sources 处理测试源码,比如过滤一些值
generate-test-resources 生成测试需要的资源文件
process-test-resources 复制并处理测试资源文件至测试目标目录
test-compile 编译测试源码至测试目标目录
test 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
prepare-package 在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本
package 将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR
pre-integration-test 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
integration-test 如果有必要的话,处理包并发布至集成测试可以运行的环境
post-integration-test 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。
verify 执行所有检查,验证包是有效的,符合质量规范
install 安装包至本地仓库,以备本地的其它项目作为依赖使用
deploy 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)
站点生命周期 (site)
项目文档和站点生成有一个专有的生命周期,它包含了四个阶段:
1. pre-site
2. site
3. post-site
4. site-deploy
默认绑定到站点生命周期的目标是:
1. site - site:site
2. site-deploy -site:deploy
JAR打包默认的目标
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar
install install:install
deploy deploy:deploy
POM是最简单的打包类型
它生成的构件只是它本身。没有代码需要测试或者编译,也没有资源需要处理。
package site:attach-descriptor
install install:install
deploy deploy:deploy
EJB打包默认的目标
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package ejb:ejb
install install:install
deploy deploy:deploy
WAR打包默认的目标
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package war:war
install install:install
deploy deploy:deploy
大部分生命周期将resources:resources目标绑定到process-resources阶段。process-resources阶段处理资源并将资源复制到输出目录
Compile
大部分生命周期将Compiler插件的compile目标绑定到compile阶段。
compile:compile将会编译src/main/java中的所有内容至target/classes。
Compiler插件调用javac,使用的source设置为1.3,默认target设置为1.1。
<plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins>
覆盖默认的源码和输出目录
<build> <sourceDirectory>src/java</sourceDirectory> <outputDirectory>classes</outputDirectory> </build>
覆盖测试源码和输出的位置
<build> <testSourceDirectory>src-test</testSourceDirectory> <testOutputDirectory>classes-test</testOutputDirectory> </build>
mvn install -Dmaven.test.skip=true
相关推荐
### 黑马Maven笔记第二天知识点总结 #### Maven的核心优势 **1. 统一管理JAR包** - **节省空间**:Maven通过中央仓库管理所有项目的依赖,避免了重复下载相同JAR包的问题,有效减少了硬盘空间的占用。 - **依赖...
maven学习笔记maven学习笔记maven学习笔记
二、Maven仓库 Maven依赖管理的关键在于它的中央仓库,存储了大量的开源库,开发者无需手动下载即可直接引用。此外,还可以设置本地仓库和私有远程仓库,以满足特定项目的需求。Maven通过解析POM文件中的依赖声明,...
### 黑马Maven笔记详解 #### Maven简介与特点 Maven是一款强大的项目管理和构建工具,作为Apache基金会下的一个开源项目,它完全采用Java语言编写,主要用于管理Java项目。Maven通过标准化项目构建过程和依赖管理...
### Maven核心知识点解析 #### Maven概述与价值 Maven是一个项目管理和综合工具,主要用于Java项目的构建、依赖管理和项目信息管理。通过Maven,开发者可以轻松地处理项目中的多个痛点问题,提升开发效率。 #####...
压缩包中的"笔记"和"资料"文件可能包含更深入的Maven教程、最佳实践、常见问题解答和案例研究等内容。学习这些资料有助于提升你在实际项目中的Maven应用能力,解决遇到的问题,并优化构建流程。 综上所述,Maven是...
Maven的安装: (首先保证JDK版本在1.6以上) 1: 通过配置MAVEN_HOME 和 %% %MAVEN_HOME%\bin 然后进行mvn -version 测试 掌握 -Xms 与 -Xmx的相关配置 2: Maven目录分析: 2.1: bin: 含有mvn运行的脚本 2.2...
【标题】:“maven笔记:maven-overlay-实战笔记” 在 Maven 的世界里,"overlay" 是一个重要的概念,主要用于Web项目的构建和部署。Maven overlay 技术允许你将多个项目的输出“重叠”在一起,形成一个新的项目,...
** Maven详解:构建Java项目的专业工具 ** Maven是一个基于项目对象模型(Project Object Model,POM)的概念,用于管理并构建Java项目。它通过一个简单的配置文件(pom.xml),自动化项目的构建、报告和依赖管理,...
**Maven教程:基础篇——尚硅谷学习笔记 2022年** Maven是一个强大的Java项目管理和构建工具,由Apache软件基金会开发。它通过提供一个标准的项目对象模型(Project Object Model,POM)来简化项目的构建过程,并...
最新maven视频教程加源码笔记,内容完整有保证,是学习maven的不可多得的教程。
【标题】"maven笔记t-JavaWeb"主要聚焦于Java Web开发中Maven的使用,这是一套关于Maven的教程,旨在帮助开发者理解和掌握这个强大的构建工具。Maven是Apache软件基金会的一个项目,它简化了Java项目的构建、管理和...
【Maven笔记】 Maven是一个强大的Java项目管理工具,它主要解决了在软件开发过程中遇到的一系列问题,如依赖管理、项目构建以及环境一致性等。通过使用Maven,开发者可以更高效地管理和构建Java项目,避免手动复制...
** Maven 概述 ** Maven 是一个强大的项目管理和构建工具,主要应用于Java项目。它通过提供一套标准化的构建过程,使得项目的...通过学习Maven笔记,开发者可以更好地掌握这一强大的工具,提升项目开发的专业水平。
《Maven开发者笔记》是一本面向Java开发者的实用指南,旨在帮助读者深入理解和掌握Maven这一强大的构建工具。Maven不仅简化了项目的构建过程,还提供了项目管理的标准化方法,使得依赖管理和构建流程变得规范而高效...
Maven 是 Java 项目中一种流行的构建工具,能够帮助开发者更好地管理项目依赖关系、编译、打包和发布。下面是 Maven 的一些知识点: 1. Maven 的必要性:Maven 之所以需要,是因为在没有 Maven 之前,开发者需要...
**Maven笔记** Maven是Apache组织开发的一款Java项目管理工具,它的主要功能包括项目构建、依赖管理和仓库管理。Maven使得Java开发更加规范和高效,尤其在大型团队协作中,能够有效地解决版本冲突和自动化构建的...
### 二、继承与聚合 **继承(Inheritance)**: Maven的继承机制允许子POM从父POM中继承属性,如依赖、插件、构建配置等。这样可以避免重复定义,保持配置的一致性。 1. **定义父POM**:在父POM中,通过`...