一、Maven概念
1.什么是Maven
1.1 举例
案例一:
问题:
假如你正在使用idea开发两个Java项目,它们称为项目A、项目B,其中项目A中的一些功能依赖于项目B中的某些类,那么如何维系这种依赖关系的呢?
解决办法
需要用哪个项目中的哪些类,也就是用别人写好了的功能代码,导入jar包即可。所以这里也如此,可以将B项目打成jar包,然后在A项目的Library下导入B的jar文件,这样,A项目就可以调用B项目中的某些类了。
缺陷
1.如果在开发过程中,发现B中的bug,则必须将B项目修改好,并重新将B打包并对A项目进行重编译操作
2.如果我们所依赖的jar包,功能修改了,我们要想使用修改过后的新功能,必须重新打包,添加到我们的项目中
案例二:
问题
一个公司有可能同时开发好几个项目,那么这几个项目,都是要用到相同的几十个jar包,怎么解决这个问题?
解决办法
其实这个问题很好解决,我们只需要把这些jar包给整理好,那个项目中要用到这些jar包,我们就把jar包复制到那个项目中即可!
缺陷
会导致每个项目体积很大,体积很大的一个原因就是因为jar包太多,而且还不好管理,如果我们不小心导入了重复的jar包,出现了jar包冲突的问题,那这个问题就不太好解决了
总结:
上面两个问题的描述,其实都属于项目与项目之间依赖的问题,如果我们人为手动的去解决,很繁琐,也不方便,所以使用maven来帮我们管理
1.2 Maven概念
Maven是一个Apache公司的开源项目,是项目构建工具。用来管理依赖。
使用maven可以在项目中不用导入项目依赖的jar包,省去了下载和导入jar包的过程,使项目的大小等到了缩减。
2.Maven的主要两大功能
2.1依赖管理
将jar包进行统一管理存放到一个文件夹中(仓库),要用到jar包,我们就去文件夹中(仓库)中取(jar包的坐标),就可以了
2.2一键构建
从项目的编译 、测试、运行、打包、安装、部署等一系列的动作,都由maven来管理
3.Maven的下载与安装
3.1 下载
下载地址:http://archive.apache.org/dist/maven/maven-3/
3.2 安装
省略:参考《maven基础文档》即可
4.仓库的种类和彼此关系
-
本地仓库
Maven会将工程中依赖的Jar包从远程下载到本机一个目录下管理.
每个电脑默认的仓库是在 $user.home/.m2/repository下,一般我们不使用默认的仓库,需要自己设置仓库目录
-
修改默认仓库
找到maven软件的目录,例如:D:\soft\developsoft\apache-maven-3.5.2,
找到settings.xml配置文件,并修改
-
<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"> <!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ${user.home}/.m2/repository <localRepository>/path/to/local/repo</localRepository> --> <localRepository>D:/soft/developsoft/repository_maven</localRepository> </settings>
-
-
私服仓库
一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率。(使用私服为了减少对中央仓库的访问私服可以使用的是局域网,中央仓库必须使用外网也就是一般公司都会创建这种第三方仓库,保证项目开发时,项目所需用的jar都从该仓库中拿,每个人的版本就都一样。
-
注意:连接私服,需要单独配置。如果没有配置私服,默认不使用
-
配置私服
<mirrors> <!-- 配置阿里的私服 --> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors>
-
-
中央仓库
Maven内置了远程公用仓库:http://repo1.maven.org/maven2 这个公共仓库是由Maven自己维护,里面有大量的常用类库,并包含了世界上大部分流行的开源项目构件。目前是以java为主
工程依赖的jar包如果本地仓库没有,默认从中央仓库下载
5.Maven标准目录结构
pom.xml 核心配置
src/main/java java源码
src/main/resources java配置
src/main/webapp web项目中 WebRoot目录
|-- WEB-INF
|-- web.xml
src/test 测试
target 输出目录
6.Maven的常用命令
clean: // 消除所有编译后的资源
compile:// 编译mavent程序
test: // 不仅编译,而且执行测试代码(将所有的测试代码,都会执行一遍)
package:// 不仅编译,而且测试,还打包
install: // 不仅编译、测试、打包、而且把打包的程序,放在了本地仓库
7.Maven的生命周期
clean生命周期
pre-clean:执行一些需要在clean之前完成的工作
clean:移除所有上一次构建生成的文件
post-clean:执行一些需要在clean之后立刻完成的工作
二、idea集成Maven
1.idea安装Maven
操作步骤: 省略
2.创建maven工程
2.1 使用骨架创建maven的java工程
2.2 不使用骨架创建maven的java工程
2.3 使用骨架创建maven的web工程
操作步骤: 省略
2.4 指定web资源
java --> 只放java代码,不用放jsp页面
webapp --> 页面jsp 和 静态资源
在创建好的工程中,有的时候少了一个目录,resources 。
我们需要自己手动创建文件夹resources,并选中此文件夹,右键--> Mark Directory as --> Test Resources Root
2.5 在maven工程中,导入jar包
在pom文件中:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
2.6 解决jar包冲突问题
在<dependency>标签中添加<scope>标签值为provided
解释说明:
scope定义了类包在项目的使用阶段。项目阶段包括: 编译,运行,测试和发布。
compile
默认scope为compile,表示为当前依赖参与项目的编译、测试和运行阶段,属于强依赖。打包之时,会达到包里去。
test
该依赖仅仅参与测试相关的内容,包括测试用例的编译和执行,比如定性的Junit。
runtime
依赖仅参与运行周期中的使用。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql、oracle等等数据的驱动程序。
此类的驱动都是为runtime的类库。
provided
该依赖在打包过程中,不需要打进去,这个由运行的环境来提供,比如tomcat或者基础类库等等,事实上,该依赖可以参与编译、测试和运行等周期,与compile等同。区别在于打包阶段进行了exclude操作。
system
使用上与provided相同,不同之处在于该依赖不从maven仓库中提取,而是从本地文件系统中提取,其会参照systemPath的属性进行提取依赖。
import
这个是maven2.0.9版本后出的属性,import只能在dependencyManagement的中使用,能解决maven单继承问题,import依赖关系实际上并不参与限制依赖关系的传递性。
2.7 在maven中添加插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>