Maven一个跨平台的项目管理工具(跨平台的,对外提供了一致的操作接口)
用途: 1.服务于构建,自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。还能够抽象构建过程,提供构建任务实现
2.依赖管理工具(坐标)和项目信息管理工具(通过Maven自动生成的站点,以及一些已有的插件,我们还能够轻松获得
项目文档、
测试报告、
静态分析报告、
源码版本日志报告等非常具有价值的项目信息)。
3.为java提供一个免费的中央仓库,可以找到任何的流行开源类库。
IDE:如eclipse,NetBeans
Make:最早的构建工具,由一个名为Makefile的脚本文件驱动,该文件使用Make自定义的语法格式,通过一系列目标和依赖将整个构建过程串联起来,同时利用本地命令完成每个目标的实际行为。优点:可以利用所有系统的本地命令。缺点:将自己和操作系统绑定在一起,不能实现(很难)跨平台的构建。语法问题
Ant:最早用力啊构建Tomcat,可以看成一个Java版本的Make
¥M2_HOME/conf/settings.xml是针对整台机器上的所有用户,而~/.m2/settings.xml是用户范围内的
Maven的核心文件pom.xml文件
1.project是所有pom.xml的根元素,声明了一些POM相关的命名空间及xsd元素,能够帮助我们快速编译POM
2.modelVersion指定了当前POM模型的版本
3.接下来最重要的是group,artifactId和version,这三个元素定义了一个项目基本的坐标
group定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联
artifactId定义了当前Maven项目在组中的唯一ID
version指定了项目的版本
5.packaging 定义了Maven项目的打包方式 eg:jar|war 默认是jar
5.packaging 定义了Maven项目的打包方式 eg:jar|war 默认是jar
6.name声明了一个对于用户更为友好的项目名,不是必须的,但方便交流
注意:一般来说,项目中java类的包都应该基于项目的groupId和artifactId。这样更加清晰,更加符合逻辑,也方便搜索构建或者java类
7.dependencies元素,该元素下可以包含多个dependency元素,以声明项目的依赖
dependency标签下通过groupId,artifactId和version指定jar包(必须),
scope为依赖范围,若为test,则表示该依赖支队测试有效,换句话测试代码中没有import Junit代码是没问题的,但如果主代码中用到,则编译错误,如果不声明,那么默认值为compile,表示主代码和测试代码都有效,compile,编译依赖范围,provided,已提供依赖范围(编译时代码无效),runtime,运行时依赖范围,system,系统依赖范围.....
type 依赖的类型,对应项目坐标定义的packaging,默认值为jar
optional 标记依赖是否可选
exclusions 用来排除传递性依赖
注意: 1.借助maven-shade-plugin插件,项目打包时,会将该信息放到MANIFEST文件中eg:Main-Class:com.zprk.helloworld.HelloWorld
2. compiler插件配置支持编译的java版本
3.通过settings下的localRepository设置自定义仓库
Maven命令
1.clean:clean 告诉Maven清理输出目录target(默认情况下,Maven构建的所有输出都在target/目录中)
2.compile:compile 告诉Maven编译项目主代码
3.test 测试
4.package 打包
5.install 将项目输出的jar安装到Maven本地仓库中,可以在相应的文件夹看到项目的pom和jar
6.archetype:generate 命令创建项目的骨架
7.mvn dependency:tree 查看当前项目的依赖树
8.mvn dependency:list 查看当前项目的已解析依赖
9.mvn dependency:analyze 分析当前项目的依赖 (主要看:Unused declared dependencies 项目中未使用的,但显示声明的依赖)
10.
mvn package -Dmaven.test.skip=true 跳过测试打包
11.mvn dependency:sources