maven

用maven可以方便的导入jar包。

1. idea中配置maven

先去maven官网下载自己想要的版本

idea中找到maven设置

将上图中maven home path更改为自己刚下载的maven目录。

上图显示用户目录下有一个.m2目录,但是我们去查找发现不存在,这是因为必须要执行一次maven命令才会创建该目录。

将mvn加入环境变量

  1. 执行mvn命令

执行完后,.m2目录出现了,不过里面只有一个仓库文件夹,因此现在要去我们下载的maven文件中把settings.xml(maven→conf下)文件复制到.m2目录中。

这样配置就完成了。

2. maven仓库

我们写java项目时经常会使用很多外部jar包,比如mybatis,Spring等,手动导入这些jar包很麻烦,maven帮我们解决了这个问题,它可以帮我们管理jar包。

2.1 中央仓库

maven远程【中央仓库】存储了所有的Java API资源,通过https://mvnrepository.com/访问。

但因为该网站服务器在国外,因此我们再配置国内的镜像仓库

2.1.1 配置镜像中央仓库

在settings.xml文件中

比如:

1
2
3
4
5
6
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>

2.2 私服远程仓库

相当于公司内部自建的maven远程仓库,里面的所有API都是本公司私有,仅供本公司员工使用。

2.3 本地仓库

从远程库拉取到本地的所有API内容都会缓存到本地仓库,同时本地构建的API内容也会存储到本地仓库,稍后可以发布到远程仓库。

2.3.1 配置本地仓库

去.m2下的settings.xml中配置。

找到localRespository

在这句话下面添加

1
<localRepository>C:\Users\65403\.m2\repository</localRepository>

3. idea有多个jdk时,要在maven中指定

在File-ProjectStructure-SDKs中可以查看当前idea中的jdks情况。

打开settings.xml文件,找到profiles标签,在 之间添加(比如jdk1.8)

1
2
3
4
5
6
7
8
9
10
11
12
<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>

4. maven的工程类型

【POM工程】是逻辑工程,有继承的概念,比如父工程引入了某个jar包,则它的子工程也自动拥有这个jar包,该工程专门用来做jar包的版本控制。

【JAR工程】即本地Java工程,导出来是.jar形式的包。

【WAR工程】发布到服务器上的工程,导出来是.war形式的包。

5. idea中创建maven项目

可以看到maven项目和普通的java项目结构不一样(【注意,里面的目录名字不要随意更改,尤其是main和test】)

执行install命令

项目结构中又会出现一个target目录,该目录存放所有编译后的文件。

pom.xml为本项目的配置文件,里面包含了本项目的“坐标”。

6. maven工程关系

在maven中,每一个项目都是一个对象,因此java中对象之间的关系同样适用于maven中项目之间的关系。

6.1 依赖关系及配置

A工程的开发需要B工程,就说A依赖B,或者B注入A。通俗来说,就是将B的jar包导入A中。

比如要在当前maven项目中导入MyBatis包:

  1. 到pom.xml文件中

  2. 去中央仓库找到MyBatis的“坐标”

  3. 将坐标复制到dependencies标签之间

如果显示未找到,右键→maven→reload project

项目改动后,一定要点击右侧maven,先clean,然后再install使jar包变为最新状态

【依赖的传递性】

如本例项目A依赖了MyBatis,如果再创建一个项目B,项目B依赖了项目A,那么项目A依赖的MyBatis也会自动被install到项目B。

【依赖的最短路径优先原则】

假如有两条依赖关系:

A -> B -> C -> D(2.0)

A -> E -> D(1.0)

那么A会依赖D(1.0)

【当两条路径长度相等时,遵从最先声明原则】

在POM中谁先被声明就用谁。

【排除】

假如A依赖了B,B依赖了C,如果A只想依赖B不想依赖C,那么就在pom.xml中声明

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- A's pom.xml

<dependency>
<groupId> B </groupId>
<artifactId> B </artifactId>
<version>2.3.5</version>
<exclusions>
<exclusion>
<groupId> C </groupId>
<artifactId> C </artifactId>
</exclusion>
</exclusions>
</dependency>

【依赖范围】

scope关键字

1
2
3
4
5
6
<dependency>
<groupId> org.mybatis </groupId>
<artifactId> mybatis </artifactId>
<version> 2.3.5 </version>
<scope> compile </scope>
</dependency>

compile为默认范围,代表该依赖在编译和运行时均生效。

provided仅在编译和测试时生效,运行时不生效。

runtime仅在运行时生效

还有几个,用到了查。