1. MAVEN
IDEA 默认提供maven,也可以去官网下载
下面为maven目录
bin:是一些可执行文件,可以用cmd命令来使用maven,
boot:maven启动需要的jar
conf:settings.xml maven核心配置文件,远程仓库镜像,jdk版本
新手一般用没有.m2文件夹 使用mvm help:system
2. 中央仓库与镜像仓库
maven 仓库是个简单的文件系统,maven可以帮我们导入jar包,仓库就有各种jar包
仓库中每个jar包都有坐标,项目中导入这个坐标,maven会在远程仓库下载到本地仓库中,以后再次使用就不需要下载(https://mvnrepository.com/)
坐标 <groupid,artifactid,version>为坐标
- groupId 用于防止重名 ,用于域名反转
- artifactId 项目名字
- version SNAPSHOT 快照版本 ,只是写代码还没上线,上线就可以把SNAPSHOT去掉
比如
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
之前项目A依赖项目B,需要将项目B打成Jar包,然后由项目A引入,有了Maven 只要使用项目B的坐标就可以访问到项目B
本地仓库配置:
<localRepository>E:\apache\maven\maven-repository</localRepository>
镜像仓库配置: id与name 可以变 一旦配置,默认的apache默认中心仓库就被取代了
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
仓库优先级:最近原则
本地——指定仓库查找——镜像仓库(如果你配置了比如aliyun)——默认中央仓库(apache)
jdk配置:
这里的id不能随便改,告诉maven使用jdk-1.8 ,activeByDefault开JDK的使用,properties 就来配置 编译器的信息
<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>
3. maven工程类别
POM工程:用于父级工程或聚合工程,用来做jar包的版本控制
JAR工程:导出Jar包
WAR工程:导出war包
组成 项目坐标
src/java用于存代码 src/resource 用于存放配置 test用于放测试 target用于存放编译后文件,开始创建项目是不存在的
使用install 在项目工程目录下会生成jar包,并且会本地仓库也会有,且基于项目坐标存储
4. maven工程关系
4.1 依赖关系
A依赖B,就需要A导入B的Jar包,maven就是在pom.xml中添加dependency,之后就会在External Libraries中会出现该jar包信息
注意:项目A要用坐标来添加项目B依赖,项目B必须打成jar包,clean可以把之前生成jar清除,install用来生成
test1 依赖mybatis
test2 依赖 test1, test2不仅导入了test1的jar包,还导入的mybatis,依赖具有传递性
当然我也可以排除由test1传递的,mybatis依赖 使用 exclusions标签 排除
<dependency>
<groupId>org.example</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
两个原则
最短路径 A->B->C ->( D 1.0) ,A->E->(D 2.0) 通过路径二导入依赖
最先声明 A->B->(C 1.0)) A->E->(C 2.0) 路径相同 安装pom里面声明的先顺序
scope
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
<scope>compile</scope>
</dependency>
compile:编译运行生效
provided:比如编译测试的时候需要servlet,之后打成war包,放入tomcat,但是tomcat中也有包含servlet,所以使用provided就可以避免冲突了
runtime:运行时生效,比如jdbc,写代码用不到,只在运行时用
system:jar不在本地,镜像,中央仓库中,配合使用systempath指定位置
test:编译测试有效,比如Junit
import:只能在配合 < dependencyManagement > 使用, < dependencyManagement >一般为父工程使用,可以用父工程来 管理版本,但不引入
注意 父工程需要打成jar包
但是子工程也指定版本会变成子工程的版本,这是使用父工程中假如import就能防止子工程用其他版本
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis}</version>
<scope>import</scope>
</dependency>
4.2 继承
就是上面import的描述,使用parent来指定父工程
4.3 聚合
一个项目都很多小项目,小项目可以独立运行,也使用了继承关系
5. 常见插件
5.1 编译器插件
因为在settings.xml配置了全局jdk,使用插件来使用局部的1.7 jdk 不使用全局jdk
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
5.2 资源拷贝插件
配置文件在 src/main/resources 打包后会在 target/classes 下面,其他地方的配置文件不会被打包,如果需要打包,需要配置插件比如下面打包java文件夹下的配置文件
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
maven 常见命令
IDEA 可视化了
clean与install 前面说过了
install 编译打包jar,存放本地仓库 javac+jar
clean 删除编译信息,删除target
compile 只编译 javac
package 编译打包jar,不存放本地仓库