1.Maven与ant比较:
Ant是过程式的,开发者显式地指定每一个目标,以及完成该目标所需要执行的任务。针对每一个项目,开发者都需要重新编写这一过程,这里其实隐含着很大的重复。Maven是声明式的,项目构建过程和过程各个阶段所需的工作都由插件实现,并且大部分插件都是现成的,开发者只需要声明项目的基本元素,Maven就执行内置的、完整的构建过程。这在很大程度上消除了重复。
Ant是没有依赖管理的,所以很长一段时间Ant用户都不得不手工管理依赖,这是一个令人头疼的问题。幸运的是,Ant用户现在可以借助Ivy管理依赖。而对于Maven用户来说,依赖管理是理所当然的,Maven不仅内置了依赖管理,更有一个可能拥有全世界最多Java开源软件包的中央仓库,Maven用户无须进行任何配置就可以直接享用。
maven分模块开发项目!ant最主要是依赖管理不好做。
2.Maven初步 :
在pom.xml中
groupId用来表示项目的名称,当你用Maven install时,打包的文件就在Maven仓库路径下的groupId路径中。
artifactid用来表示项目的模块名称,建议使用项目的名称-模块名称来表示。
version表示这个项目版本名称。
固定的放置:
源代码应该放置到src/main/java中
源代码的资源文件放置在src/main/resources文件夹中
测试代码放置在src/test/java中
测试代码的资源文件放置在scr/test/resources文件夹中
mvn clean -->表示运行清理操作(会默认把target文件夹中的数据清理)
mvn clean compile -->表示先运行清理之后运行编译,将代码编译到target文件夹中
mvn clean test-->运行清理和测试
mvn clean package-->运行清理和打包
mvn clean install -->运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以依赖调用
mvn clean deploy -->运行清理和发布(发布的私服上),这时maven寻找依赖时,如果本地仓库找不到就到私服上找,私服上找不到就到中央仓库找
3.Maven三大内容:
1.依赖 2.仓库 3.生命周期和插件
依赖:
- 所有的依赖都是通过坐标来进行存储的(GAV -->groupId、artifactId、version)
- 有一些网上的仓库提供了坐标的查询。如 http://mvnrepository.com
- 传递性依赖的范围:<scope></scope>没有默认就是compile,如果像JUNIT的test范围不会传递过去。
- test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖。
- compile范围指的是编译范围有效,在编译和打包都会将依赖存储进去。
- provided依赖,在编译和测试的过程有效,最后生成WAR包时不会加入(因为TOMCAT等WEB服务器存在,再打包就会冲突),如servlet-api。
- runtime在运行的时候依赖,在编译的时候不依赖。
- 如果a-->b1.0 c-->b1.1 d-->a和c,这个时候在d的pom中,哪一个依赖先写就使用先写依赖的版本。
- 如果依赖路径的长短不一致,依赖短的路径。此时可用<dependency>节点下的<exclusions>< exclusion></ exclusion></exclusions>排除。