maven的项目规约,也就是maven项目的通常结构
mvn常用的命令
mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=cn.sm1234
-DartifactId=hellojava -DarchetypeArtifactId=maven-archetype-quickstart
-Dversion=0.0.1-snapshot
注意: 先进入项目目录后再操作!
根据你的ide配置好maven,然后就可以进行开发了,配置maven,所有的ide大同小异,都是需要主目录,setting文件的位置,仓库的位置,这里就不详细写了,网上的这方面资料很多。
maven的仓库
坐标: 依赖在仓库中的位置,在仓库中找到依赖的标识。
依赖管理(重点)
依赖的范围,类的作用域。
依赖传递:当一个项目依赖另一个项目的时候,同时会将另一个项目所依赖的类导入类库。
假设 A 依赖于 B, B 依赖于 C, 我们说 A 对于 B 是第一直接依赖, B 对 C 是第二
直接依赖, A 对于 C 是传递性依赖。 第一直接依赖的范围和第二直接依赖的范围
决定了传递性依赖的范围。
在依赖节点 dependency 中的<optional>可以控制当前的依赖是否向下传递;
默认值为 false, 表示向下传递。
在 pom 中的依赖节点中, 如果引入的依赖包含了很多其它的传递依赖, 而且
项目需要的这些依赖的版本和传递依赖的不相符; 那么可以在依赖节点中设置排
除依赖节点: <exclusions> 然后再添加 <exclusion>, 其里面的内容包括:
①所包含坐标
②排除依赖包中所包含的依赖关系
【注意】 不需要添加版本, 直接类别排除
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24.1</version>
<exclusions>
<!-- 排除 spring-core 的传递依赖 -->
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency
依赖冲突
如果依赖的路径不相同的时候, 以最短的路径为准。
如果直接依赖中包含有同一个坐标不同版本的资源依赖, 以POM.xml配置顺序下方的
版本为准
如果间接依赖中包含有同一个坐标不同版本的资源依赖, 以POM.xml配置顺序上方的
版本为准
default 生命周期
default 生命周期是 Maven 生命周期中最重要的一个, 绝大
部分工作都发生在这个生命周期中。 比较重要和常用的阶段如下:
validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件, 至目标目录, 准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件, 至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。 这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码, 打包成可发布的格式, 如 JAR 。
pre-integration-test
integration-test
post-integration-test
verify 运行任何检查, 验证包是否有效且达到质量标准。
install 将包安装至本地仓库, 以让其它项目依赖。
deploy 将最终的包复制到远程的仓库, 以让其它开发人员与项目共享。
运行任何一个阶段的时候, 它前面的所有阶段都会被运行, 这也就是为什么运行
mvn install 的时候, 代码会被编译, 测试, 打包。 此外, Maven 的插件机制是完
全依赖 Maven 的生命周期的。