1.什么是maven?
- 它是一个纯Java开发的管理工具,主要管理的工作是:对Java项目进行依赖管理,项目构建。
2.什么是项目构建
项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署等过程。
-
1.传统项目构建的过程
构建过程如下:
1.在eclipse中创建一个Javaweb工程
2.对工程中编写源代码及配置文件等
3.对源代码进行编译,Java文件编译成class文件
4.执行junit单元测试
5.将工程打包程war包部署到tomcat服务器运行 -
maven构建项目的过程
maven将项目构建的过程进行标准化,每个阶段使用一个命令完成。
3.使用maven的好处?
- 1.能够集中的管理项目所需的jar包,不需要手动导包,在pom.xml定义坐标即可。
- 2.提供一键构建,一个命令完成构建、运行、方便快捷,maven对每个构建阶段进行规范,非常有利于大型团队的协作开发。
- 3.maven跨平台,可在window、Linux上使用
- 4.maven遵循规范开发、有利于提高大型团队的开发效率,降低项目的维护成本。
4.maven的安装与配置
下载安装、环境变量、本地仓库、远程和中央仓库的配置、jdk版本的配置
命令行:mvn -v 测试查看是否安装好maven。
5.常用的maven命令?
compile
:是maven工程的编译命令,作用是将src/main/java下的文件编译文class文件输出到target目录下。test
:测试命令,会执行src/test/java下的单元测试类package
:打包命令,对于Java工程执行package打包成jar包,对Javaweb工程会打成war包。install
:安装命令,执行install将maven打成jar包或war包发布到本地仓库。clean
:清理命令,执行clean会删除target目录下的内容
6.maven工程具有一定的目录结构?
7.什么是依赖管理?
- 什么是依赖?
一个Java项目需要使用一些第三方的jar包才可以运行,这样的Java项目就依赖这些第三方的jar包。
- 什么是依赖管理?
就是对项目所有依赖的jar包进行规范化的管理
8.传统项目的依赖管理
- 传统项目工程要管理所依赖的jar包完全靠人工来进行,需要从网上下载jar包,在导入进项目工程中。
- 手工拷贝jar包添加到项目中存在的问题?
无法对jar包的版本进行统一管理,容易导致版本冲突
从网上找jar包非常麻烦,有些jar包找不到
jar包添加到项目中导致工程过大。
9.maven项目的依赖管理
- maven项目管理所依赖的jar包不需要手动向工程中添加jar包,只需要在pom.xml中添加jar包的坐标,自动从maven的仓库中下载jar包,运行。
- 使用maven依赖管理添加jar的好处?
通过pom.xml文件对jar包的版本进行统一管理,可有效避免版本冲突。
maven团队维护了一个非常全的maven仓库,里面包括来当前基本上开源的jar包。
10.maven仓库的作用
本地仓库
:用来储存从远程仓库或者中央仓库下载的插件和jar 包,项目使用的一些插件和jar包,都优先从本地仓库查找。远程仓库
:如果本地需要插件或者jar 包,本地仓库没有,默认去远程仓库下载,远程仓库可以在互联网内也可以在局域网内。中央仓库
:在maven软件中内置一个远程仓库地址:hhtp//repo1.maven.org/maven2 它是中央仓库,服务于整个互联网,它是由maven团队自己维护,里面储存来非常全面的jar包,它包含了世界上大部分流行的开源项目构件。
- 在 Maven 本地资源库中搜索,如果没有找到,进入第 2 步,否则退出。
- 在 Maven 中央存储库搜索,如果没有找到,进入第 3 步,否则退出。
- 在java.net Maven的远程存储库搜索,如果没有找到,提示错误信息,否则退出。
11.如何配置本地仓库
<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>/Users/xiayubao/maven/repository</localRepository>
12 如何配置远程仓库
<mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of 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>
13 如何配置jdk版本?
<!-- 修改jdk版本,不用每次都要在eclipse里修改 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
14.maven工程项目目录的介绍
15.maven的生命周期
maven对项目构建的过程分为三套相互独立的生命周期。
clean lifecycle
:在进行真正的构建之前进行一些清理工作default lifecycle
:构建的核心部分,编译、测试、打包、部署site lifecycle
:生成项目报告,站点、发布站点。
16.定义maven的坐标
<dependency>
<!--项目名称,定义为组织名+项目名,类似包名 -->
<groupId>org.apache.struts</groupId>
<!-- 模块名称 -->
<artifactId>struts2-core</artifactId>
<!--当前的版本号 -->
<version>${struts.version}</version>
<exclusions>
<!-- 排除依赖 -->
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
17.jar包的依赖范围scope
compile
:编译范围,指A在编译时依赖B,此范围为默认依赖范围,编译范围的依赖会用在编译、测试、运行、由于运行时需要所以编译范围的依赖会被打包。provided:
在编译和测试时需要,在运行时不需要,比如servlet API被tomcat容器提供。runtime
:此依赖在运行和测试系统时需要,但在编译时期不需要,比如jdbc的驱动包,由于运行时需要,所以runtime范围的依赖会被打包。test
:test范围依赖在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,不会被打包的system
:此依赖与provided类似,但必须显式的提供一个对于本地系统中jar文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。
maven中引入插件
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>