Maven
Maven是Apache旗下的一个开源项目,是纯Java开发的,只是用来管理Java项目的。
Maven具备如下优点:
管理外部/内部依赖的jar包
外部依赖版本不兼容造成的错误
良好的项目文件结构
自动化的编译,测试,打包,安装,部署等
Maven主要应用于大型项目,它可以将各个模块进行独立,可以提高开发效率。
一般在互联网项目的话都说按照业务来分,比如用户管理、订单管理、支付管理等。
传统的项目都说按照层级来分,Entity层、Dao层 、Service层、Web层。
Maven的下载地址:http://maven.apache.org/download.cgi
基本配置
环境变量
使用Maven之前,我们需要配置它的环境变量:
然后将MAVEN_HOME加入Path变量中:
%MAVEN_HOME%in
然后打开cmd命令行输入mvn -v命令查看版本号:
配置文件
打开Maven的安装目录,找到X:apache-maven-3.5.0conf下的settings.xml文件
1、修改仓库默认地址
<localRepository>/path/to/local/repo</localRepository>
Maven有三种仓库:
本地仓库:程序员自己维护。
远程仓库:由公司进行维护。
中央仓库:由Maven团队维护。
出现下载慢的情况可以修改Maven的仓库为阿里云仓库,右键项目 -> Maven -> open settings.xml来打开设置文件,在<mirrors>标签下加入以下内容即可。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<!-- 中央仓库1 -->
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<!-- 中央仓库2 -->
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
</mirrors>
</settings>
常用命令
命令 | 描述 |
---|---|
mvn clean | 清理命令,执行clean会删除target目录的内容。 |
mvn compile | 将src/main/java下的文件编译为class文件输出到target目录下。 |
mvn test | 测试命令,会执行 src/test/java下的单元测试类。 |
mvn package | 打包命令,对java工程执行package打包成jar包,对于web工程则打包为war包。 |
mvn install | 安装命令,执行install将maven打成jar包或war包发布到本地仓库。 |
mvn tomcat:run | 一键启动Tomcat服务器,并部署项目。 |
我们还可以将不同生命周期的命令进行统一执行:
mvn clean package
IDEA-Maven
构建项目
1> 打开IDEA集成开发环境,然后选择:File -> Settings -> Build,Execution,Deployment -> Maven:
在这里可以设置Maven的版本号,配置文件路径和仓库位置。
2、然后我们使用Maven来创建项目,注意JDK必须在1.7以上:
3、点击Next进入下个界面,其中GroupId和ArtifactId<项目名>还有Version,这三个属性目的是标识你的项目的唯一性。
4、点Finish之后,Maven会根据刚才的配置创建一个基于Maven的Web App。
目录结构
以上就是Maven工程的目录结构,下面简单介绍目录的作用:
java文件夹:主要用于存储java的源代码。
resources文件夹:一般用来存放一些资源文件和配置文件。
webapp文件夹:用来存放web配置文件以及jsp页面等,这已经组成了一个原始的web应用。
注意:所有的配置文件都必须放在resources文件下,代码则放在java目录下:
依赖管理
-
添加依赖
Maven项目中如果想引入Jar包,只需要打开pom.xml配置文件进行配置即可:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
这样配置后,Maven会自动去下载相应的jar包。如果想打开搜索窗口可以使用快捷键:alt + insert -> Dependency即可
如果下载到本地的jar包无法自动补全,需要自己手动添加,非常影响效率。通过File->setting->maven->repositories,选择本地仓库更新索引即可。
除此之外,我们还可以在中央仓库中去查找:
http://maven.aliyun.com/nexus/#welcome
-
依赖范围
如果A依赖B,则需要在A的pom,xml文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:
依赖范围 | 编译 | 测试 | 运行 | 描述 |
---|---|---|---|---|
compile | yes | yes | yes | 编译范围,在编译、测试、运行有效,默认依赖范围。 |
provided | yes | yes | - | 当jdk或者一个容器已提供依赖后使用,编译和测试需要,运行不需要。 |
runtime | - | yes | yes | 在运行和测试系统的时候需要,编译时不需要。比如jdbc驱动包。 |
test | - | yes | - | 测试范围依赖,在编译和运行时都不需要,只要在测试编译和测试运行需要。 |
system | yes | yes | - | 范围依赖和provided类似,但是必须指定本地系统jar路径,不推荐使用。 |
依赖范围一般通过<denpendency>下的<scope>标签配置:
<scope>provided</scope>
-
坐标定义
在pom.xml中定义坐标,内容包括:groupId、artifactId、version,详细内容如下:
<!--项目名称,定义为组织名 + 项目名-->
<groupId>com.legend</groupId>
<!--模块名称-->
<artifactId>MavenDemo</artifactId>
<!--当前项目版本号,snapshot为快照版本,release为正式版本-->
<version>1.0-SNAPSHOT</version>
<!--打包类型:
jar:执行package会打成jar包
war:执行package会打成war包
pom:用于maven工程的继承,通过父工程设置为pom-->
<packaging>pom</packaging>
-
基本配置
pom.xml是Maven项目的核心配置文件,位于每个工程的根目录,基本配置如下:
<project>:文件的根节点。
<modelversion>:pom.xml使用的对象模型版本。
<groupId>:项目名称,一般写项目的域名。
<artifactId>:模块名称,子项目名或模块名称。
<version>:产品的版本号。
<packaging>:打包类型,一般有jar、war、pom等。
<name>:项目的显示名,常用于Maven生成的文档。
<description>:项目描述,常用于Maven生成的文档。
<dependencies>:项目依赖构建配置,配置项目依赖构建的坐标。
<build>:项目构建配置,配置编译、运行插件等。