1、下载maven : https://maven.apache.org/download.cgi
配置环境变量:M2_HOME:D:\apache-maven-3.5.4
:path:%M2_HOME%\bin;
测试maven:cmd mvn -v
```
2、groupId的值就是项目的包名
artifactId的值就模块名 version版本
例如: <groupId>com.maven.demo</groupId> <artifactId>maven01-model</artifactId> <version>0.0.1SNAPSHOT</version>
maven的目录结构
project
src
-main
-java
-package
-test
-java
-package
resources
mvn compile
mvn test
mvn package
3、maven常用构建命令
mvn -v 查看maven版本
compile 编译
test 测试
package 打包
clean 删除target
install 安装jar包到本地仓库中(先找pom.xml依赖,在找本地库,最后找网上中央库)
maven自动建立目录骨架 第一种方式 mvn archetype:generate
第二种方式 mvn archetype:generate -DgroupId=组织名,公司网址的反写+项目名 -DartifactId=项目名-模块名 -Dversion=1.0.0SNAPSHOT -Dpackage=代码存在的包
maven 坐标和仓库 基本坐标: 构件 <groupId>com.maven.demo</groupId> <artifactId>maven01-model</artifactId> <version>0.0.1SNAPSHOT</version> 仓库: 本地仓库 远程仓库(maven-model-bulider) 镜像仓库 \apache-maven-3.5.4\conf\settings.xml (152行) <mirror> <id>maven.net.cn</id> <mirrorOf>central</mirrorOf> <!--可以用通配符*--> <name>central mirror in china</name> <url>http://maven.net.cn/content/groups/public</url> </mirror> 更改仓库位置(默认路径:C:\Users\CHUAN.m2) \apache-maven-3.5.4\conf\settings.xml (53行) <localRepository></localRepository>
eclipe安装maven插件以及创建maven项目 Preferences-Maven-Installations 添加maven目录 -User Settings 添加maven的setting.xml(.\apache-maven-3.5.4\conf\setting.xml)
maven的生命周期和插件 完整的项目构件过程包括: 清理、编译、测试、打包、集成测试、验证、部署 maven生命周期 clean 清理项目 pre-clean 执行清理前的工作 clean 清理上一次构建生成的所有文件 post-clean 执行清理后的文件 default 构建项目(最核心) compile test package install site 生成项目站点 pre-site 在生成项目站点前要完成的工作 site 生成项目的站点文档 post-site 在生成项目站点后要完成的工作 site-deploy 发布生成的站点到服务器上
maven生命周期 clean、compile、test、package、install
maven中pom.xml解析 <modelVersion>4.0.0</modelVersion> 指定当前pom的版本 坐标信息 <groupId>组织名,公司网址的反写+项目名</groupId> 主项目的标识 <artifactId>项目名-模块名</artifactId> 模块的标识 <!-- 第一个0表示大版本号 第二个0表示分支版本号 第三个0表示小版本号 0.0.1 snapshot快照版本 alpha内测版本 beta公测 release稳定 GA正式发布 --> <version></version> 当前项目的版本号 <!-- 默认是jar 也可以是war,zip,pom --> <packaging></packaging> 打包的方式
<name></name> 项目描述 <url></url>项目的地址 <description></description>项目描述 <developers></developers>项目开发人员 <licenses></licenses>许可 <organization></organization>组织
重要:依赖列表 <dependencies> <dependency> <groupId></groupId> <artifactId></artifactId> <version></version> <type></type> <scope>test</scope> 依赖范围 <optional>true/默认false</optional> 设置依赖是否可选, 如果是false子项目是默认继承的 如果是true子项目必须显示引入该依赖 <exclusions> 排除依赖传递列表 <exclusion> </exclusion> </exclusions> </dependency> </dependencies> <dependencyManagement> 依赖管理包含多个依赖,并不会被运行,主要定义到父模块让子模块继承用的 <dependencies> <dependency> </dependency> </dependencies> </dependencyManagement> <build> <plugins>插件列表 <plugin> <groupId></groupId> <artifactId></artifactId> <version></version> </plugin> </plugins> </build>
<parent></parent>用于子模块对父模块的继承
<modules></modules>聚合多个模块
maven 依赖范围 <scope></scope> 三种classpath: 编译 test测试 运行
compile:默认的范围,编译测试运行都有效
provided:在编译和测试有效
runtime:在运行的时候有效
test:只在测试有效 典型应用junit
system:在编译和测试有效 与本机系统相关联,可移植性差
import:导入的范围,它只使用在dependencyManagerment中,
表示从其他的pom中导入dependecy的配置
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
maven 是依赖传递特性的
a-pom.xml
b-pom.xml
c-pom.xml
如果b集成a,c会自动集成a。
如果创建maven项目 jre system library 显示jre5 但是 jre里面是1.8
修改setting.xml(188行)
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
maven 依赖冲突 1、短路优先 A->B->C->X(jar) A->D->X(jar)优先解析 例如:A依赖2.4jar B依赖A和2.0jar C依赖B 所以C依赖2.0jar
2、先声明先优先
如果路径长度相同,则谁先声明,先解析谁
例如:A依赖2.4jar B依赖2.0jar C中pom A在B前 所以C依赖2.4jar
Maven 聚合和继承
maven聚合:
父模块的pom文件修改
<package>pom</package>
<modules>
<module>子模块项目名一</module>
<module>子模块项目名二</module>
</modules>
maven继承: 如果每个module 也就是每个小的模块中的pom 有重复的 jar 比如junit 这样可以用继承。。 创建父类项目,<packaging>标签元素值修改为pom 然后加一个标签<dependencyManagement> 把依赖放到里面。。 其中的版本号, 可以通过引用来表示,需要添加 <properties>标签。
子类用<parent>标签 引用父pom.xml坐标 例如:新建父类中pom.xml如下: <packaging>pom</packaging> <properties> <junitversion>3.8.1</junitversion> </properties> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junitversion}</version> <scope>test</scope> </dependency>
子类pom.xml <parent> 父pom.xml的坐标 </parent> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency>
使用maven构建web项目 添加java servlet api的坐标 scope为provide 手动创建maven骨架文件 检查 java build path outfolder 为/target/classes/目录 项目转换成web项目,右键属性,project facets为Dynamic 勾选 发布右键属性,deployment assembly 把test都去掉 在pom.xml使用packaging命令打成war包 添加jetty maven的插件到pom.xml <executions> <execution> <!-- 在打包成功后使用jetty:run 运行 jetty的服务 --> <phase>package</phase><!--打包阶段--> <goals> <goal>run</goal> </goals> </execution> </executions>
## 总结:
maven下载和环境搭建
maven目录骨架说明