Maven项目构建
一、Maven的介绍
1.1 Maven的作用
- Maven 的依赖管理
- 项目的一键构建
构建:指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个过程称为构建。
一键构建:指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。
Maven 规范化构建流程如下:
对应的Maven指令分别为:
mvn clean => mvn comilp => mvn test => mvn package => mvn install
1.2 Maven仓库
- 本地仓库
用来存储从远程仓库或中央仓库下载的插件和 jar 包。项目使用一些插件或 jar 包,优先从本地仓库查找,默认本地仓库位置在 ${user.dir}/.m2/repository,${user.dir}表示 windows 用户目录。
- 远程仓库
如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内。
- 中央仓库
在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包 含了世界上大部分流行的开源项目构件。
1.3 Maven目录及配置
Maven目录:
其中,
目录 | 内容 |
---|---|
bin | 存放了 maven 的命令,比如我们前面用到的 mvn tomcat:run |
boot | 存放了一些 maven 本身的引导程序,如类加载器等 |
conf | 存放了 maven 的一些配置文件,如 setting.xml 文件 |
lib | 存放了 maven 本身运行所需的一些 jar 包 |
在setting.xml中配置本地仓库和镜像:
<localRepository>D:\maven\repository</localRepository>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
二、Maven的使用
2.1 Maven 工程的目录结构
- src/main/java —— 存放项目的.java 文件 src/main/resources —— 存放项目资源文件,如spring, hibernate 配置文件
- src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
- src/test/resources —— 测试资源文件 target —— 项目输出位置,编译后的 class 文件会输出到此目录
- pom.xml——maven 项目核心配置文件
2.2 pom.xml配置文件
- 定义坐标:
<!--项目名称,定义为组织名+项目名,类似包名-->
<groupId>com.bosssoft</groupId>
<!-- 模块名称 -->
<artifactId>hello_maven</artifactId>
<!--
当前项目版本号,
snapshot 为快照版本即非正式版本,
release 为正式发布版本
-->
<version>1.0-SNAPSHOT</version>
<!--
打包类型
jar:执行 package 会打成 jar 包
war:执行 package 会打成 war 包
pom :用于 maven 工程的继承,通常父工程设置为 pom
-->
<packaging>war</packaging>
- 添加依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
但是很多情况我们是不知道 jar 包的的坐标,可以通过网站http://mvnrepository.com/查询。
四种scope的依赖范围:
三、Maven多模块项目
3.1 创建多模块项目
先建父模块,然后在父模块上右键创建一个Module(模块)
其余子模块同上。
3.2 父模块与子模块pom.xml
- 父模块
<!-- 声明子模块 IDEA自动添加 -->
<modules>
<module>eruke</module>
<module>config</module>
<module>utils</module>
<module>pojo</module>
<module>controller</module>
<module>service</module>
<module>dao</module>
</modules>
<!--版本管理-->
<properties>
<junit.version>4.12</junit.version>
<spring.version>RELEASE</spring.version>
</properties>
<!--依赖管理-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 子模块
<dependencies>
<!--按需依赖,版本被父模块控制,可以自行声明,优先级更高-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
我们要达到的目的是:父模块作版本管理不实际依赖,子模块按需依赖。