1 简介
Apache maven 是一种用于软件项目管理工具,基于 Project Object Model(POM),用来管理项目的构建,汇报及文档生成等功能。
Maven:用来管理项目的工具。
主要职责是:
-
用来下载项目的外部引用。
原始的外部引用方式存在两个痛点:
(1)手动重复下载大量的jar包这个过程很繁琐。
(2)不同的项目使用不同版本号的jar包,不同jar包之间的对应关系又是不一致的。
为了解决这两个痛点,Maven应运而生,类似于一个中央仓库、应用中心的存在,一次性会下载好第一个jar包下面所包含的所有其他jar包,不需要像原始方式一样手动重复下载大量的jar包。 -
用来将本项目打包。
要注意Tomcat不能直接运行程序员的.java代码,只能运行.jar或.war文件,.jar或.war文件中是多个.class字节码文件的集合。
所以我们通过maven将程序员的.java代码打包成了.jar或.war文件,然后就给tomcat进行运行。 - 用来将打包的项目发布到服务器(例如tomcat)运行。
它构建了一个Java的生态。
2 Maven的安装
Maven不需要安装,因为IDEA已经自带了Maven,直接使用就好。
3 Maven下载依赖jar时常见问题
Maven下载依赖jar的时候会出现各种各样奇葩的问题,原因是因为中央仓库不在国内。这时我们不得不了解一下Maven添加引用的流程:
如上图所示,比如现在有一个项目,需要jdbc这个jar包。我们首先需要在项目里添加一个jdbc依赖包,这个时候它会去中央仓库下载jdbc这个jar包,但它不是直接将这个jar包下载的你的项目,而是先下载到本地仓库中(为什么这样做呢?是为了加速和减少中央仓库的使用频率),然后再把本地仓库的这个jar包添加到项目中去。
介于这个过程有点长,所以它出现的问题也比较多,主要分为两种现象:
-
包全部丢失现象。
中央仓库往本地仓库拉jar包的时候,因为中央仓库是国外的,物流比较长,所以会存在包丢失的情况,包就拉不下来了,然后就出问题了。
【解决方案】:这种情况比较好处理,maven工具里面有一个重新导入,我只需要点击重新导入,就可以把包重新拉下来了,总有一次会拉成功的。 -
包部分丢失现象。
因为网络等问题,在下载一个包的时候只下载了一半,一部分的内容丢了,就出问题了。
【解决方案】:这种情况非常常见,需要把本地仓库的所有文件全部删除,然后重新下载。
或者直接把国外的这个中央仓库换成国内的中央仓库(阿里云或网易云)进行下载,这两种问题的出现也会减少很多。
总结:
Maven出现问题的解决方案:
- 把maven下载源改成国内。
- 删除本地的maven仓库,重复下载不低于5次。
- 关闭电脑杀毒软件和防火墙。关闭防火墙步骤如下图所示:
4 Maven项目创建步骤
Maven项目创建步骤:
- 创建一个新项目。
- 选择 maven 类型的项目,并勾中使用模板(也就是Create from archetype这块),并向下拉找到maven-archetype-quickstart,点击next。
- 设置项目名称(不要起中文的)、存放路径(不要存在c盘)和项目属性设置 ,点击next。
- User settings file:用来更换中央仓库地址的;Local repository:本地仓库的存储地址,并把这两个后面的Override都给勾上,点击finish即可完成创建。
- 等待出现如下图所示的情况是maven项目是加载(下载)成功的。
- 出现如下图所示的一个目录,才能说明你的maven项目是创建完成的(如果没有这个目录的,说明你下载失败了,重新创建一个maven项目即可解决此问题)。
里面的main/java路径下存放的是java所有源代码,所有java源代码都会放到这个路径;test/java下面是写单元测试的;pom.xml是maven项目的配置文件。
- 然后运行里面自带的helloworld代码,如果运行成功,才能说明这个maven项目是创建成功的。
5 Maven国内中央仓库的更换
Maven国内中央仓库的更换:
- 使用Idea将User settings file目录下的settings.xml文件打开。
- 找到< mirrors >这个节点,把阿里云的< mirror >节点直接加入进去。
- 点击保存settings.xml文件即可完成更换。
6 maven项目的配置文件pom.xml介绍
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<!-- 上面的内容完全不用管,使用自动生成的就行,是用于一些校验规则指定的 -->
<!-- 这里指定的是 POM 的版本,也不需要动 -->
<modelVersion>4.0.0</modelVersion>
<!-- 这里是项目的描述信息,是新建项目时我们填入的内容 -->
<groupId>***.peixinchen</groupId> <!-- 组织ID -->
<artifactId>Fo</artifactId> <!-- 项目ID -->
<version>1.0-SNAPSHOT</version> <!-- 版本号 -->
<name>fo</name> <!-- 项目名称 -->
<url>http://www.example.***</url> <!-- 本项目网站地址,用来对这个项目做说明的,如果没有则可以留空 -->
<!-- 可以配置一些参数 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 项目编码设置成UTF-8,因为它支持中文 -->
<!-- 默认情况下,maven 会使用 1.5 版本进行代码检查,一般我们都修改为 1.8 -->
<maven.***piler.source>1.8</maven.***piler.source>
<maven.***piler.target>1.8</maven.***piler.target>
</properties>
<dependencies> <!--所有外部引用jar都在这个里面 -->
<!-- 这里指定了我们需要的依赖 -->
<dependency>
<groupId>junit</groupId> <!-- 组织id -->
<artifactId>junit</artifactId> <!-- 项目id -->
<version>4.11</version> <!--版本号 -->
<scope>test</scope> <!--作用域,这个test表示当前jar只有在测试阶段才用,如果什么也不写表示项目整个生命周期都要引用此jar包 -->
</dependency>
</dependencies>
<!-- 一般我们把构建相关的配置放这里 -->
<build>
<!-- 使用各种插件 -->
<plugins>
<!-- 这个插件的目的是帮我们把依赖复制到 target\lib 文件夹下,用于一会打 jar 包使用 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<!-- 这个插件是用于打 jar 包的 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!-- 这里指定 Main-Class -->
<mainClass>Main</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
7 Maven项目操作示例
在此我们以实现数据库查询为例进行介绍。
- 创建maven项目。
- 添加外部引用(也就是添加外部jar包)
打开maven中央仓库,百度直接搜maven选择https://mvnrepository.***链接进入即可。
进入页面后通过下面步骤添加引用:
如果出现External Libraries下面出现了Maven:mysql:…这个包则说明成功下载,引入mysql的jar包是正常的。 - 我们直接在App.java里写代码,写完之后直接运行即可。
public class App{
public static void main(String[] args) {
//1.获得DataSource
MysqlDataSource dataSource = new MysqlDataSource();
//url,username,password
dataSource.setURL("jdbc:mysql://localhost:3306/test?characterEncoding=utf8");
dataSource.setUser("root");
dataSource.setPassword("root"); //写自己mysql的密码
//2.获得connection
Connection connection = dataSource.getConnection();
//3.拼接SQL
String sql = "select * from student where id=?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1,2);
//4.得到ResetSet
ResultSet resultSet = statement.executeQuery();
while(resultSet.next()){
System.out.println("查询的数据name:"+resultSet.getString("name"));
//5.释放链接
resultSet.close();
statement.close();
connection.close();
}
}
}