Maven快速入门和常用配置方式
介绍
Apache Maven 是一个 Java 项目管理工具,它基于项目对象模型(POM),通过一系列标准构建规则来管理项目的构建、依赖关系和文档。
Maven 的特点
依赖管理:
- Maven 使用一个中央仓库(如 Maven Central Repository)来管理项目的依赖项。
- 依赖项会被自动解析并下载到本地仓库,减少了手动配置和依赖冲突的问题。
生命周期和插件:
- Maven 定义了一系列的构建生命周期,每个生命周期又包含了多个构建阶段。常见的生命周期包括 clean、default(build)、site 等。
- 构建阶段通过插件来实现具体的构建逻辑,比如编译源代码、运行测试、打包、部署等。
项目对象模型 (POM):
- Maven 使用 XML 文件(pom.xml)来描述项目的配置信息,称为项目对象模型(Project Object Model, POM)。
- POM 包含了项目的基本信息(如名称、版本号、依赖关系等),以及构建过程中的配置信息。
路径约定优于配置:
- Maven 强调路径约定(convention over configuration),简化了构建过程。例如,默认情况下 Maven 会知道在哪里查找源代码、测试代码、资源文件等。
构建继承:
- Maven 支持多模块项目,并允许子项目继承父项目的配置,从而减少重复配置。
站点生成:
- Maven 可以自动生成项目的文档站点,展示项目的文档、依赖图、报告等信息。
环境一致性:
- Maven 有助于确保不同开发环境之间的一致性,因为构建脚本是声明式的而不是过程式的。
可移植性:
- Maven 的构建脚本是平台无关的,可以在任何支持 Java 的平台上运行
Maven 的优势
- 简化构建过程:Maven 提供了一套标准的构建流程,使得从编译、测试到打包、部署的过程更加简单和一致。
- 依赖管理:自动化的依赖管理避免了手动管理依赖所带来的麻烦。
- 可维护性和可扩展性:POM 和生命周期的设计使得项目的维护和扩展变得更加容易。
- 团队协作:由于 Maven 的构建过程是标准化的,因此它非常适合团队协作,减少了因构建环境差异导致的问题
Maven 常用指令分类
构建命令
| 指令 | 描述 |
|---|---|
| mvn clean | 清除项目的工作目录,移除之前构建产生的文件。 |
| mvn compile | 编译项目的源代码。 |
| mvn test | 运行项目中的单元测试。 |
| mvn package | 打包项目,通常会生成 JAR 或 WAR 文件。 |
| mvn install | 将项目安装到本地仓库,方便其他项目作为依赖使用。 |
| mvn deploy | 将项目发布到远程仓库,供其他开发者下载。 |
生命周期命令
Clean 生命周期
| 指令 | 描述 |
|---|---|
| mvn pre-clean | 执行在 clean 之前的任何工作。 |
| mvn clean | 清除以前的构建结果。 |
| mvn post-clean | 执行在 clean 之后的工作。 |
Default 生命周期
| 指令 | 描述 |
|---|---|
| mvn process-resources | 复制并处理资源文件,使其为编译做好准备。 |
| mvn compile | 编译主源码。 |
| mvn process-classes | 在编译之后处理类文件。 |
| mvn generate-sources | 生成额外的源码,并将其添加到生成的源码目录中。 |
| mvn process-test-resources | 复制并处理测试资源。 |
| mvn test-compile | 编译测试源码。 |
| mvn process-test-classes | 在测试编译之后处理类文件。 |
| mvn test | 运行测试。这些不会被打包或部署。 |
| mvn prepare-package | 在测试之后执行打包前的操作。 |
| mvn package | 包装所有编译好的代码,使其适合分发。 |
| mvn pre-integration-test | 在集成测试前执行操作。 |
| mvn integration-test | 处理与集成测试相关的任务。 |
| mvn verify | 运行任何检查以验证包是否可用于部署。 |
| mvn install | 将包安装到本地存储库,以供其他项目作为依赖使用。 |
| mvn deploy | 将最终的包复制到远程存储库,以便与其他开发人员共享。 |
Site 生命周期
| 指令 | 描述 |
|---|---|
| mvn site | 生成项目站点文档。 |
| mvn pre-site | 在生成站点文档之前执行任何任务。 |
| mvn post-site | 在生成站点文档之后执行任何任务。 |
| mvn site-deploy | 将生成的站点文档部署到特定位置。 |
依赖命令
| 指令 | 描述 |
|---|---|
| mvn dependency:tree | 显示项目的依赖树。 |
插件命令
| 指令 | 描述 |
|---|---|
| mvn plugin:goal | 通常用于执行特定插件的目标。 |
其他命令
| 指令 | 描述 |
|---|---|
| mvn help:effective-pom | 显示当前项目实际使用的 POM。 |
| mvn versions:display-dependency-updates | 显示可以更新的依赖版本。 |
| mvn versions:display-plugin-updates | 显示可以更新的插件版本。 |
| mvn versions:update-properties | 更新版本属性。 |
| mvn dependency:sources | 获取依赖的源代码。 |
| mvn dependency:analyze | 分析项目的依赖,确定哪些依赖未被使用。 |
设置utf8编码格式方法
全局配置
添加系统环境变量:
- 变量名
MAVEN_OPTS - 变量值
-Xms256m -Xmx512m -Dfile.encoding=UTF-8
在项目pom.xml中配置
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>在项目的 pom.xml中 build 配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<!-- 项目编码-->
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案
这篇文章主要介绍了Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-05-05
tio-boot整合hotswap-classloader实现热加载方法实例
这篇文章主要为大家介绍了tio-boot整合hotswap-classloader实现热加载方法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-12-12
spring启动错误Singleton bean creation not al
本文主要介绍了spring启动错误Singleton bean creation not allowed while the singletons of this factory are indestruction,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-07-07
mybatis教程之resultmap_动力节点Java学院整理
这篇文章主要介绍了mybatis教程之resultmap,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-09-09
快速解决 IDEA 报错: “java 找不到符号“(“cannot find symbol“)
文章详细讲解了在IntelliJIDEA中解决“找不到符号”错误的方法,包括检查导入语句、拼写错误、类路径设置、文件编译状态、JDK配置以及IDE配置问题,通过具体示例代码,展示了如何从错误代码到解决步骤,感兴趣的朋友一起看看吧2025-03-03
我们来说说Java LockSupport 的 park 和 unpa
LockSupport是JDK底层线程阻塞工具,通过park/unpark实现线程阻塞与唤醒,避免死锁,与Object的wait/notify相比,无需监视器,支持先unpark后park,且更精确控制线程状态,是AQS等同步器的核心基础,本文介绍Java LockSupport 的 park 和 unpark,感兴趣的朋友一起看看吧2025-07-07


最新评论