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目录骨架说明
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/191090.html