maven安装笔记
maven 简介与安装
Maven 是一个项目管理和构建工具。Maven 提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven 使用标准的目录结构和默认构建生命周期。
在多个开发团队环境时,Maven 可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven 让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。
maven 依赖查询:官网
注意:maven 中说说的依赖,即是我们平时使用的 Jar 包。
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
中央仓库
下载 maven 工具 apache-maven-3.8.2 只需要简单配置 /conf/settings.xml 文件中的中央仓库和本地仓库位置即可,当本地仓库没有依赖包时,通过中央仓库下载。如下配置优先选择中国阿里云仓库,这样会加快依赖下载速度。
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>https://repo1.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
如果想要 maven 下载的依赖不存放在用户目录的 .m2 文件夹下,可以修改本地仓库的位置。
<localRepository>D:/maven-dependcies</localRepository>
注意:配置本地依赖存放位置 D:/maven-dependcies 必须存在,每个依赖下载到本地后会形成如下的目录和文件结构。
当有些依赖在 idea 中下载出错时,需要将对应的依赖版本目录删除对应的版本文件夹(如上:1.1)再重新导入即可。
maven 项目管理
创建 maven 项目时一般要选择项目骨架(archetype [ˈɑːkitaɪp]),我们常用的有如下两种,这两种分别对应我们前面所用的普通 java 项目和 web 项目。
选择骨架后,就是选择 maven,由于我们的 idea 自带一个 maven 所以需要修改 maven 为我们安装的 maven 。
groupId | cn.hx(包名) |
---|---|
artifactId | zy-web(项目名) |
version | 1.0-SNAPSHOT(开发版本) |
如下是 maven 的 web 项目结构,Java 项目没有 webapp。
src
main --->主模块
java ---->java代码
resources ---->配置文件
webapp ---->web页面
WEB-INF ---->java web的核心目录
test --->测试模块
java --->测试Java代码
resources --->测试资源代码
pom.xml ---->maven 依赖文件
常用依赖
jstl 插件:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
tomcat 依赖:在打包或编译时需要导入该依赖。
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
<version>8.0.28</version>
<scope>provided</scope>
</dependency>
maven 常用操作
1.clean:清空缓存
2.package:打包项目
3.install:安装到本地仓库
如果出现 maven 编译和打包都没问题,但是 idea 编译报错类找不到。则是 idea 和 maven 没有使用同一个编译机制。
如果出现控制台打印中文乱码问题在 VM Options 增加参数 -Dfile.encoding=GB2312 即可解决中文乱码问题。
构建多模块应用
Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块。创建多模块应用一般有如下几个步骤。
1.创建聚合模块
创建一个无骨架的项目作为聚合服务模块 mall。创建完成后指明它的打包类型 packaging 为 pom 聚合类型,并将该项目的 src 删除。并在其下方添加 modules 标签用于存放它的子模块,该处一般由 idea 维护。
<packaging>pom</packaging>
<modules>
</modules>
2.创建公共 common 子模块
公共子模块一般以项目名加上模块名方式命名,如:mall-common,该模块主要存放一些公用类和配置,一般使用 quickstart 方式。创建时 idea 自动会在该项目的 pom.xml 指定其 parent。当前项目的 groupId 默认会和父模块保持一致。idea 同时会在聚合模块的 modules 中自动注册该模块。
<parent>
<artifactId>mall</artifactId>
<groupId>cn.hx</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
3.子模块之间相互依赖
创建多个模块后,模块之间需要相互依赖时只需要将依赖的模块导入依赖库即可。同时一些公用的依赖包如 mysql 连接驱动包等可以使用聚合模块进行导入,所有子模块自动可以
<dependencies>
<dependency>
<groupId>cn.hx</groupId>
<artifactId>mall-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
.....
</dependencies>
4.公共依赖声明
一个项目有很多模块,每个模块都会用到一些公共的依赖。这些公共的依赖若交由各个模块独自管理,若每个模块同一个依赖的版本号不一致,会给项目的打包、开发和测试造成极大问题,会造成修改版本号时遍地开花的问题。使用 dependencyManagement 标签通常适用于多模块环境下定义一个 top module来专门管理公共依赖的情况下公共依赖声明。
若 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven 就会到 depenManagement 里去找有没有该 artifactId 和 groupId 进行过版本声明,若存在,则继承它,若没有则报错,你必须为 dependency 声明一个 version
若 dependencies 中的 dependency 声明了version,则 dependencyManagement 中的声明无效
注意:所有声明在 dependencies 里的依赖都会自动引入,并默认被所有的子项目继承,dependencies 即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖, dependencyManagement 只是声明依赖的版本号,该依赖不会引入,因此子项目需要显示声明所需要引入的依赖,若不声明则不引入。
maven 安装额外依赖
在开发中有时我们需要在本地安装一些远程 maven 仓库中没有的 Jar 包。这时就需要安装相关依赖。
进入 maven 的 bin 目录打开 cmd 并使用如下命令安装 SQLserver 和 oralce 驱动包。
mvn install:install-file -Dfile=sqljdbc42.jar -Dpackaging=jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.2
mvn install:install-file -Dfile=ojdbc6.jar -Dpackaging=jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.0
Oracle 的驱动包和 SQLserver 驱动包下载地址:下载
下载安装完成后在项目如下使用依赖。
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.2</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.0</version>
</dependency>