Maven 是专门用于构建和管理Java相关项目的工具,Maven是意第绪语,依地语(犹太人使用的国际语),表示专家的意思。 所以用Maven管理Java 项目,你就是专家了 -_-! Maven依靠约定(convention)并提供现成的可调用的目标(goal)。 Maven的主要优点是生命周期。只要项目基于一定的规则,它的整个生命周期都能够轻松搞定,代价是牺牲了灵活性。
优点:
缺点:
项目格式统一,非常方便管理,使用了相同的项目结构 。
使用Maven管理的Java 项目都有着相同的项目结构
问题场景:如果你的团队是江南七怪一起来开发如何办?
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。意义和好处在哪里?
如下所示:
目录 | 目的 |
|---|---|
${basedir} | 存放pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件,springmvc.xml |
${basedir}/src/test/java | 项目的测试类,比如说Junit代码 |
${basedir}/src/test/resources | 测试用的资源 |
${basedir}/src/main/webapp/WEB-INF | web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面 |
${basedir}/target | 打包输出目录 |
${basedir}/target/classes | 编译输出目录 |
${basedir}/target/test-classes | 测试编译输出目录 |
Test.java | Maven只会自动运行符合该命名规则的测试类 |
~/.m2/repository | Maven默认的本地仓库目录位置 |
统一维护jar包
比如说有3个Java 项目,这些项目都不是maven风格。那么这3个项目,就会各自维护一套jar包。 而其中有些jar包是相同的。问题就是当有很多项目的时候,jar包会重复导入多次,这个在前面讲J2SE或JAVAWEB,都看过了好多次。
而maven风格的项目,首先把所有的jar包都放在"仓库“ 里,然后哪个项目需要用到这个jar包,只需要给出jar包的组织名、项目名、版本号就行了。 这样jar包就实现了共享,多个项目之间的jar包共享。好处:若干个jar包不用重复导入,省空间,非常方便。
Maven的主要目标是使开发人员能够在最短的时间内理解开发工作的完整状态。为了实现此目标,Maven处理了几个令人关注的领域:
官网下载:https://maven.apache.org/download.cgi
我的电脑---》右键--》高级--》环境变量--》系统变量---》编辑--》新增:maven的地址
E:\apache-maven-3.6.1\bin,加过去之后,确定即可。
测试,打开cmd窗口,输入mvn -v

注意:mvn -v,测试时候,需要依赖一个JAVA_HOME的环境变量,还记得???
这个在之前讲JAVA基础的已经经过了,会后面的多个工具使用到,基本上已经成为一个默认的环境变量设置了。

核心:依赖管理和一键构建
所谓的仓库就是用于存放项目需要的jar包的。 maven采用一个仓库,多个项目的方式,让多个项目共享一个仓库里的相同jar包。
jar包的管理,从哪里来,这是一个问题?有人说,拷贝过来,拷贝来,拷贝去,问题,中毒。版本不一致,开发者使用jar包版本不一致的问题。
远程存储jar包的仓库,是一个大的集中式仓库,maven
下载jar包---》从哪里下载--》maven中央仓库。maven 会默认从maven官方提供的服务器下载jar包。
仓库默认位置的配置文件:
E:\apache-maven-3.6.1\conf\settings.xml
使用阿里云下载jar包 而官方服务器在国外,因为大家都知道的原因,网速很慢,而且容易卡断。 为了便于快速下载相关jar包,可以使用国内maven 阿里云的下载地址:
打开:
E:\apache-maven-3.6.1\conf\settings.xml在mirrors下新加一个阿里云的镜像地址:
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>我们开发的时候,将远程中央仓库的jar包下载到本地仓库,项目读取本地仓库的jar。
setting文件修改仓库位置:

公司里面,自己搭建的类似中央仓库的仓库,供本公司开发者使用的集中式仓库。
Maven的基本原理很简单,采用远程中央仓库和本地仓库以及一个pom.xml,将pom.xml中定义的jar文件从远程仓库下载到本地仓库,各个应用使用同一个本地仓库的jar,同一个版本的jar只需下载一次,而且避免每个应用都去拷贝jar。如图1同时它采用了现在流行的插件体系架构,只保留最小的核心,其余功能都通过插件的形式提供,所以maven下载很小,在执行maven任务时,才会自动下载需要的插件。

Maven有一个官方的仓库,是一个微内核,通过网络将需要的文件下载到本地,通过官方仓库将相应的类库进行统一管理。
groupId:项目或者组织的唯一标志,并且配置时生成路径也是由此生成,如org.myproject.mojo生成的相对路径为:/org/myproject/mojo
artifactId: 项目的通用名称
version: 项目的版本1.0.1[大版本、小版本、更新]
packaging: 打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par
name: 用户描述项目的名称,无关紧要的东西,可选
url: 写明开发团队的网站,无关紧要,可选
其中groupId,artifactId,version,packaging这四项组成了项目的唯一坐标。一般情况下,前面三项就可以组成项目的唯一坐标了。
properties:声明一些常量。如:<file.encoding>UTF-8<file.encoding>引用时 ${file.encoding}
plugin:声明项目中所使用的插件,如热部署时,需要的tomcat插件(放build里面):
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- 源代码使用的开发版本 -->
<source>1.7</source>
<!-- 需要生成的目标class文件的编译版本 -->
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<path>/ccc</path>
<server>tomcat</server>
<username>tomcat</username>
<password>tomcat</password>
</configuration>
</plugin>
</plugins>*依赖关系:(*依赖关系是POM的重要部分*)*
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>

scope : 依赖范围,默认compile还有test,provided,runtime,system compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围)。
IDEA和Maven要建立关联










查看jar包位置:

在test-->java下新建TestMysql类
public class TestMysql {
public static void main(String[] args) {
//jdbc:加载驱动;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}


父子工程之间不用建立关系,继承关系是先天的,不需要手动创建。
平级直接的叫依赖,依赖不是先天,依赖是后天手动创建的。