1、maven环境的配置
首先下载maven资源 访问官网https://maven.apache.org/ 然后点击左侧的Download 然后在File栏中选择所需要的资源。
直接下载地址链接http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.zip,
下载成功后直接解压,然后进行环境配置。
变量名:m2_home
变量值:D:\study\apache-maven-3.5.3-bin\apache-maven-3.5.3(需要根据自己下载解压的地址进行配置)
然后在Path变量值中把m2_home添加进去:%m2_home%\bin;
然后在cmd命令框中输入mvn -v进行运行测试,如何能够显示maven相关信息则配置成功。
设置资源下载库的位置:在settings.xml文件中修改localRepository中的路径,例 如 <localRepository>D:\study\mven_jar_download</localRepository>
并把settings.xml文件放到D:\study\mven_jar_download文件中
设置jdk版本(下载资源文件中的settings.xml):在profile标签里修改成自己所使用的jdk版本(如果不进行修改也没有关系只不过在创建项目时JRE System Library 的默认版本号是settings.xml中默认的1.4版本)
<profile>
<id>jdk-1.8</id>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<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>
在mirrors标签下中的url可以设置成国内的镜像库或者aliyun的镜像库
aliyun镜像库: http://maven.aliyun.com/nexus/content/groups/public/
不设置则为默认地址http://my.repository.com/repo/path
2、eclipse 的配置(eclipse下载地址:https://www.eclipse.org/downloads/)
点击helo→install new software 点击Add name 填写maven location 填写http://m2eclipse.sonatype.org/sites/m2e
然后点击next根据提示即可安装完成。(官方下载最新版本eclipse自带maven插件)
开始配置maven 的相关设置 点击eclipse 上面的Window然后选择perferences→maven→installations 点击Add 然后选 择maven 的解压地址然后点击Finish即可。
点击User Settings 在User Setting下面选择自己所要下载资源包中的settings.xml然后点击ok。
3、创建maven web项目
maven web项目目录结构
src
main
java
resources
test
java
resources
右键点击new→other→然后选择Maven Project点击next→next→选择org.apache.maven.archetypes maven-archetype-webapp 1.0然后点击next,填写Group Id(公司网址倒着填写),Artifact Id(项目名称),package(包名),点击Finish.
然后补全相关文件
大致目录结构如下:
projectName
src/main/java
src/main/resources
src/test/java
src/test/resources
JRE System Library[JavaSE-1.8]
Maven Dependencies
Referenced Libraries
src
main
webapp
WEB-INF
web.xml
target
pom.xml
刚创建项目之后index.jsp会有一个红色的x号,那是因为没有引入相应的jar包,然后在pom.xml中添加
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet-api.version}</version>
<!-- 只在编译时和测试时运行 -->
<scope>provided</scope>
</dependency>
项目创建完成后测试项目是否能够正常启动,两种方式:
(1)jetty
在pom.xml中添加
<!-- 使用jetty服务测试项目是否创建成功 -->
<groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId>
<version>8.1.16.v20140903</version>
<executions>
<execution>
<!-- 在打包成功后使用jetty:run来运行jetty服务 -->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
然后点击项目右键Run As 选择Maven build.....在Goals中输入 clean package查看控制台是否报错,然后访问localhost:8080进行访问,如果页面显示Hello World! 则恭喜你已经成功了。
(2)tomcat(tomcat与jetty只能让一个有效)
在pom.xml中配置
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version> 然后点击项目右键Run As 选择Maven build.....在Goals中输入 clean package查看控制台是否报错,然后访问localhost:8080/projectName进行访问,如果页面显示Hello World! 则恭喜你已经成功了。
如果编译时遇到
[ERROR] /D:/study/project/bsdapp/src/main/java/com/mobisoft/meapbase/gateway/bi/ResDealer.java:[22,13] 编码GBK的不可映射字符
解决办法:
pom.xml文件中添加
<!-- 指明编译源代码时使用的字符编码,maven编译的时候默认使用的GBK编码, 通过project.build.sourceEncoding属性设置字符编码,告诉maven这个项目使用UTF-8来编译 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
即可
4、maven常用命令
mvn -v 查看maven 版本信息
compile 编译项目
test 测试
package 打包
clean 删除target
install 安装jar包到本地仓库中
5、maven的依赖范围、依赖传递、依赖冲突、聚合和继承
maven的依赖范围
(1) . complie 默认,所有范围
(2). provided 编译和测试
(3). runtime 测试和运行
(4). test 只有测试 Junit
(5). system 编译和测试,可移植性差
(6). import 导入范围,只在实用dependencyManagement中表示从其他pom导入dependency
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<!-- 依赖的范围 --><scope>test</scope>
</dependency>
</dependencies>
mave的 依赖传递
<!-- hyue项目依赖于a项目 -->
<dependency>
<groupId>com.hy</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在执行compile命令时需要先将所依赖的项目进行打包(先将a项目进行打包也就是执行package命令,并且将项目a进行安装,即执行install命令)
maven 的排除依赖(hyue项目依赖于a,a依赖于b,但是如果这样hyue项目就依赖于a和b了,但是b只想听a的,于是排除依赖就起作用了。)
<!-- hyue项目依赖于a项目 -->
<dependency>
<groupId>com.hy</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 排除依赖 -->
<exclusions>
<exclusion>
<groupId>com.hu</groupId>
<artifactId>b</artifactId>
</exclusion>
</exclusions>
</dependency>
mave 的依赖冲突的原则
依赖冲突:依赖了不同版本的相同构建
1.短路优先:优先解析依赖层级少的版本
2.声明优先原则:当依赖层级相同时,则谁先声明就解析谁
1.短路优先 如果A B依赖了一个不同版本的构件X(jar),且A->B->C,对于依赖于A B的C,此时会依赖哪个版本的构件?比如以下情况,会优先解析第二个,C会继承B的依赖版本2.0
A->B->C-X-2.0(jar)
A->B-X-1.0(jar)
做测试的时候需A,B需要安装到本地仓库才会生效.
2.先声明先优先
如果路径长度相同,则谁先在pom中声明,先解析谁(从上到下的解析顺序),
A->B->X-1.0(jar)
A->C->X-2.0(jar)
maven 的聚合和继承
聚合
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 项目的聚合,在所聚合的项目中设置packaging 为pom <packaging>pom</packaging>-->
<modules>
<module>../a</module>
<module>../spring-mvc-study</module>
</modules>
继承
<!-- 父类中的jar包,记得把 <packaging>jar</packaging>中的jar 修改成pom <packaging>pom</packaging>-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<!-- 依赖的范围 -->
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
子类中的内容
<properties>
<javax.servlet-api.version>4.0.0</javax.servlet-api.version>
</properties>
<!-- 子类中所需要在parent中填写父类中的相关信息,并且子类中的junit 版本号以及依赖范围可以删除 -->
<parent>
<groupId>com.hy</groupId>
<artifactId>hyue</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- <version>3.8.1</version>
<scope>test</scope> -->
</dependency>
</dependencies>