目录
- 1 简介
- 2 Maven的安装
- 3 Maven下载依赖jar时常见问题
- 4 Maven项目创建步骤
- 5 Maven国内中央仓库的更换
- 6 maven项目的配置文件pom.xml介绍
- 7 Maven项目操作示例
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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 上面的内容完全不用管,使用自动生成的就行,是用于一些校验规则指定的 --><!-- 这里指定的是 POM 的版本,也不需要动 --><modelVersion>4.0.0</modelVersion><!-- 这里是项目的描述信息,是新建项目时我们填入的内容 --><groupId>com.peixinchen</groupId> <!-- 组织ID --><artifactId>Fo</artifactId> <!-- 项目ID --><version>1.0-SNAPSHOT</version> <!-- 版本号 --><name>fo</name> <!-- 项目名称 --><url>http://www.example.com</url> <!-- 本项目网站地址,用来对这个项目做说明的,如果没有则可以留空 --><!-- 可以配置一些参数 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 项目编码设置成UTF-8,因为它支持中文 --><!-- 默认情况下,maven 会使用 1.5 版本进行代码检查,一般我们都修改为 1.8 --><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.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.com链接进入即可。
进入页面后通过下面步骤添加引用:
如果出现External Libraries下面出现了Maven:mySQL:…这个包则说明成功下载,引入mysql的jar包是正常的。 - 我们直接在App.java里写代码,写完之后直接运行即可。
public class App{public static void main(String[] args) {//1.获得DataSourceMysqlDataSource dataSource = new MysqlDataSource();//url,username,passworddataSource.setURL("jdbc:mysql://localhost:3306/test?characterEncoding=utf8");dataSource.setUser("root");dataSource.setPassword("root"); //写自己mysql的密码//2.获得connectionConnection connection = dataSource.getConnection();//3.拼接SQLString sql = "select * from student where id=?";PreparedStatement statement = connection.prepareStatement(sql);statement.setInt(1,2);//4.得到ResetSetResultSet resultSet = statement.executeQuery();while(resultSet.next()){System.out.println("查询的数据name:"+resultSet.getString("name"));//5.释放链接resultSet.close();statement.close();connection.close();}}
}