Maven学习
目录
四、在eclipse(myeclipse)中安装maven插件以及创建maven项目
《项目管理利器maven》
http://www.imooc.com/learn/443
- maven快速入门
- maven核心知识
- Maven创建hello word
一、下载安装mavn
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
1.下载http://maven.apache.org/download.cgi maven文件、 JDK版本要符合要求
2.windows下载.zip文件
3.配置mvn的环境变量配置方法与jdk配置的环境变量相同
4.mvn -v 查看mvn版本
二、maven的常见命令
2.1基本命令
mvn compile :编译项目通过则
mvn test :测试,生成target的文件 (classes为编译的.class文件 report 为编译的报告)
mvn package :打包项目,生成mvn-01的jar
mvn clean:删除target,测试文件
mvn install:安装jar包到本地仓库中
2.2命令执行流程:
1. mvn compile编译项目
2. 如果在项目编译过程中,程序引用了其他本地项目的依赖(则需要将本地项目mvn install编译成jar包到本地库中,去pom.xml文件中去查找引用依赖包的坐标,加入到该项目的pom文件中)
坐标:
<dependency>
<groupId>com.imooc.maven01</groupId> <!--项目包名-->
<artifactId>maven01-model</artifactId><!--模块名(使用项目名称)-->
<version>0.0.1-SNAPSHOT</version> <!--快照版本-->
</dependency>
3.根据pom.xml文件到本地jar包库查找该jar包,如果找到则maven会将该jar包加入到项目的classpath。如果找不到该jar包,则会去网络上的maven中央仓库中查找jar包,下载,并放入本地仓库中供编译加载classpath使用。
三、maven中的坐标和仓库
3.1构件
概念:maven中的所有依赖、jar包
3.2坐标
概念:构件的唯一标识:
由 groupId、artifactId、version组成一个坐标。通常引用java的jar包时,对jar包名要吻合groupId、artifactId
<dependency>
<!--项目包名-->
<groupId>com.imooc(公司网站的仿写).maven01(项目名)</groupId>
<!--模块名(使用项目名称)-->
<artifactId>maven01(项目名)-model(所在packag包模块)</artifactId>
<!--快照版本-->
<version>0.0.1-SNAPSHOT(所构建的版本)</version>
</dependency>
3.3仓库
有本地仓库、网络中央仓库
网络的中央仓库maven提供了全球仓库的地址在本地的配置文件中的
查看方式:
maven-model-builder-3.6.1.jar\org\apache\maven\model\pom-4.0.0.xml
<url>https://repo.maven.apache.org/maven2(全球仓库的地址)</url>
3.4镜像仓库
访问国内的镜像仓库,使得不需要翻墙了,设置如下:
1.打开C:\csh_soft_develop\maven\apache-maven-3.6.1\conf\settings.xml配置文件找到(146行)mirrors
添加如下:
<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>
3.5更改仓库的位置
maven从远程仓库中下载的构建,默认放置在当前的用户目录中:C:\Users\***\.m2\repository下的。例如上述的 maven install 构建maven01构建的路径也存在该目录下: C:\Users\***\.m2\repository\com\imooc\maven01\maven01-model。
更改如下:
1.打开C:\csh_soft_develop\maven\apache-maven-3.6.1\conf\settings.xml上述的配置文件,(53行)
2.复制settings.xml文件到修改的路径下(以后更新maven版本就不再需要修改settings.xml)
3.查看是否修改正确,通过cmd进入一个项目路径中,输入maven clean compile maven会重新下载第三方依赖包和插件,并且存在你设定的路径下
四、在eclipse(myeclipse)中安装maven插件以及创建maven项目
4.1maven插件安装
eclipse 4.0版本后不需要安装maven插件,4.0版本以下则安装如下:
找到eclipse文件路径下的dropins文件下复制maven插件,重启eclipse即可。
4.2maven项目的创建
eclipse软件:new àotheràmaven
点击next,配置坐标
finish即可完成
4.3运行maven项目
右键项目 run asàmaven bulid
Run
如果报错:
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?处理方法如下
· eclipse 导航栏中 【Window】-->【Prefrences】-->【Java】-->【Installed JREs】
· 上一步出现的框里点击添加--->【Standard VM】---> 选择JDK的安装目录确定。
· 添加JDK路径以后必须把JDK把前面的框 勾上,否则还会出现错误。
再次执行compile 或者 install 指令,编译成功。
如果报错:
问题:Description Resource Path Location Type
Project configuration is not up-to-date with pom.xml. Select: Maven->Update Project... from the project context menu or use Quick Fix. hi line 1 Maven Configuration Problem
处理: 右键项目,【Maven】—》【Update Project Configuration…】
五、maven的生命周期、pom.xml文件、范围
5.1maven生命周期:
完整的项目构建过程包括:
清理、编译、测试、打包、集成测试、验证、部署
clean,compile、test、package、install
清理、编译、测试、打包、安装
例如package:
package时期(clean package),则会先执行compile和test指令
输入 clean package à最终生成jar文件
Building jar: C:\Users\401\eclipse-workspace\hi\target\hi-0.0.1-SNAPSHOT-sources.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS0.0.1-SNAPSHOT
5.2pom.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/maven-v4_0_0.xsd">
<!--指定了当前pom的版本-->
<modelVersion>4.0.0</modelVersion>
<!--maven常用于一个项目的模块化-->
<groupId>反写的公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!--第一个0表示大版本号第二个0表示分支版本号第三个1表示小版本号 0.0.1、snapshot快照、alpha内部测试、beta公测、Release稳定、GA正式发布-->
<version>0.0.1-SNAPSHOT</version>
<!--默认是jar war zip pom-->
<packaging>war</packaging>
<!--项目名字-->
<name>yxq Maven Webapp</name>
<!--项目地址-->
<url>http://maven.apache.org</url>
<!--项目描述-->
<description></description>
<!--开发人员-->
<developers></developers>
<!--许可证信息-->
<licenses></licenses>
<!--组织信息-->
<organization></organization>
<!--依赖列表-->
<dependencies>
<!--依赖项-->
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<type></type>
<!--依赖范围-->
<scope></scope>
<!--设置依赖是否可选,默认false为继承-->
<optional></optional>
<!--排除依赖传递列表-->
<exclusions>
<!--可排除多个依赖 -->
<exclusion></exclusion>
</exclusions>
</dependency>
</dependencies>
<!--依赖的管理,并不会被运行,不会被引用到实际的依赖中,实际用于定义父模块,供子模块继承-->
<dependencyManagement>
<dependency></dependency>
<dependency></dependency>
</dependencyManagement>
<build>
<!--插件列表-->
<plugins>
<plugin>
<!--source插件-->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>
<!--子模块对父模块的pom继承-->
<parent></parent>
<!--用于聚合多个的module项,可以定义多个模块,一起编译-->
<modules></modules>
</project>
5.3依赖的范围
三种classpath:
1、编译 2、测试 3、运行
<scope></scope>
compile:默认的范围,编译测试运行都有效
provided:在编译和测试时有效
runtime:在测试和运行时有效
test:在测试时有效
system:在编译和测试时有效,与本机系统相关联,可移植性差
import:导入的依赖范围
八、依赖传递
1.快速新建三个项目
2.依赖关系为:nage依赖bge
先将bge项目打包成jar包,并存在本地仓库,nage才能通过设置配置文件导入bge,配置nage的pom.xml文件,随后编译nage,具体步骤如下:
- 打包bge项目成jar包:对bge项目 run asàmaven buildàclean package
- 存在本地仓库: 对bge项目 run asàmaven buildàinstall
- 配置nage的pom.xml文件: 配置nage的pom.xml文件:
<!-- nage依赖于bge -->
<dependency>
<!-- 输入bge的坐标 -->
<groupId>com.hongxing</groupId>
<artifactId>hongxing-bge</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
4.对nage编译run as->maven build->compile
3.依赖关系:shanji依赖nage
根据2步骤,将nage打包存入本地仓库中run asàmaven buildàinstall
查看maven的依赖目录
自动引入bge的依赖包,这就说依赖传递的原因,使得不需要我们自己手动装入bge的依赖包(如果使用排除依赖,使得shanji只依赖于nage,做法如下)
4.排除依赖
保存后 bge的依赖包就会自动被剔除
九、maven依赖冲突
A B 项目依赖于M包不同版本的相同构建,对于C项目依赖于A B项目后,那C依赖的是M项目的哪个版本的构建呢?
原则:
1.短路优先,优先解析路径短的版本
例如
A->B->C->X(jar)
A->D->X(jar)则会依赖于这个版本
2.路径相同,则哪个项目先申明,则先优先。
路径相同:项目A同时依赖于 Bjar包的 2.4 2.0两个版本,在pom.xml中哪个版本的坐标在上方,哪个就先依赖
十、聚合和继承
10.1聚合
如果需要依次打包多个项目到本地仓库中,一个个使用install指令进行打包显得十分繁琐,而使用聚合就可以一起运行了
新建一个maven项目:hongxing-aggreation,修改pom.xml文件如下:
run -> maven -> clean install
10.2继承
在依赖关系中,你会发现每个项目中的 junit的依赖包一直存在在各个项目中,这使得依赖变得重复了,这时候需要定义一个父类模板,通过继承来解决
1.新建一个hongxing-parent项目, 将junit的jar包的 dependencies放在dependencyManagement 中
在dependencyManagement 标签中的依赖是不会被执行的
十一、新建一个web项目(未整理)
没摄入servlet的api的缘故:
新建一个资源文件
新建一个资源文件
如果是以下情况:
则tongg navigator(window->showview)窗口设置
回到原视图,右键项目->maven->update project
存放资源文件的目录
检查.class文件的输出路径
转化成web项目
右键项目->属性-
部署时的默认配置:
通过插件启动web项目
run as->jetty:run
可以指定在某阶段运行该服务,访问网站