在慕课网学了下项目管理利器——maven课程,笔记记录一下
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
1、maven 目录结构
src
----main
-------java
----------package
----test
-------java
----------package
----source
2、maven命令
mvn
-v 查看maven版本
compile 编译
test 测试
package 打包
clean 删除target(字节码文件、测试报告)
install 安装jar包到本地仓库中,其他的项目就可以引用该jar包
archetype:generate archetype插件:用于创建符合maven规定的目录骨架
1、按提示 groupId:com.imooc.maven03
artifactId:maven-service
version:1.0.0SNAPSHOT
package:com.imooc.maven.service
2、一次性 archetype:generate -DgroupId=组织名,公司网址的反写+项目名
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所存在的包
3、maven 坐标和仓库
pom.xml 中 groupId、artifactId、version 构成坐标
仓库:本地仓库和远程仓库
中央仓库查看:G:\maven\apache-maven-3.5.0\lib\maven-model-builder-3.5.0.jar\org\apache\maven\model\pom.xml
<url>https://repo.maven.apache.org/maven2</url>
镜像仓库
更改仓库位置
4、maven生命周期
clean 清理项目
pre-clean 执行清理前的工作
clean 清理上一次构建生成的所有文件
post-clean 执行清理后的文件
default 构建项目(核心)
compile test package install
site 生成项目站点
pre-site 在生成项目站点之前要完成的工作
site 生成项目的站点文档
post-site 在生成项目站点后要完成的工作
site-deploy 发布生成的站点到服务器上
5、maven插件
使用maven的插件在pom.xml中配置:
build --顾名思义
plugins --多个插件
plugin --具体插件
groupId --指定插件具体坐标
artifactId --指定插件具体坐标
version --指定插件具体坐标
executions --需要执行的多个指令
execution --需要执行的具体指令
phase --阶段
goals --目标指令
goal --具体目标
6、依赖冲突( B C 依赖了不同版本的 A , D 依赖了 B C ,D 选择依赖那个版本的 A )
短路优先:选路径短的
A -> B -> C -> x(jar)
A -> D -> x(jar) 选择该版本
先声明先优先(路径相同)
7、聚合和继承
聚合:将项目放到一起运行
新建maven项目,packaging改为pom
<modules>中把要聚合的项目声明,然后运行该项目即可
继承:通用的依赖通过继承
新建maven父亲项目,packaging改为pom,main和test可删除
<dependencyManagement>放入通用的依赖
子项目通过<parent>标签引入父项目的标签
dependency中依赖的版本号可以删除
8、pom.xml配置说明
<project 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/maven-4.0.0.xsd">
<!-- 指定了当前pom的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 反写的公司网址+项目名 -->
<groupId>com.imooc.hi</groupId>
<!-- 项目名+模块名 -->
<artifactId>hi</artifactId>
<!-- 当前项目的版本号0.0.1
0大版本号
0分支版本号
1小版本号
snapshot快照版本 alpha内部测试 beta公测 release稳定 GA正式发布
-->
<version>0.0.1-SNAPSHOT</version>
<!-- 默认是jar
war zip pom等打包方式
-->
<packaging>jar</packaging>
<!-- 项目名 -->
<name>hi</name>
<!-- 项目地址 -->
<url>http://maven.apache.org</url>
<!-- 项目描述 -->
<description></description>
<!-- 开发者信息 -->
<developers></developers>
<!-- 许可证信息 -->
<licenses></licenses>
<!-- 组织信息 -->
<organization></organization>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 依赖列表 -->
<dependencies>
<!-- 依赖项-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<!-- <type></type> -->
<!-- 依赖范围,只有test中有效
compile:默认的范围,编译、测试以及运行阶段都有效
provided:在编译和测试时有效
runtime:在测试和运行时有效
test:只在测试范围有效
-->
<scope>test</scope>
<!-- 设置依赖是否可选,默认false可继承,true要显示引用 -->
<optional></optional>
<!-- 排除依赖传递列表 -->
<exclusions>
<!-- A依赖B,B依赖C,A不想依赖C -->
<exclusion></exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 依赖的管理 -->
<dependencyManagement>
<!-- 方便子模块继承使用,本身不用
<dependencies>
<dependency></dependency>
</dependencies>
-->
</dependencyManagement>
<build>
<!-- 插件列表 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<executions >
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!--
<parent></parent>
-->
<!-- 指定多个模块编译 -->
<modules></modules>
</project>
9、maven部署web项目
在pom.xml中加上
<build>
<finalName>webdemo</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<!-- 在打包成功后使用run运行tomcat -->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>