快速了解Maven

Maven是什么?

Maven, a Yiddish word meaning accumulator of knowledge, began as an attempt to simplify the build processes in the Jakarta Turbine project. There were several projects, each with their own Ant build files, that were all slightly different. JARs were checked into CVS. We wanted a standard way to build the projects, a clear definition of what the project consisted of, an easy way to publish project information, and a way to share JARs across several projects.
Maven,一个 Yiddish 词语 意味着知识的积累,开始是在 Jakarta Turbine 项目中简化 构建过程的尝试、 有很多项目。都有自己的 Ant 构建文件。都有一些不同,Jars were checked into CVS. 我们需要一种构建项目的标准方法、项目组成的清晰定义、发布项目信息的简单方法以及跨多个项目共享 JAR 的方法。
The result is a tool that can now be used for building and managing any Java-based project. We hope that we have created something that will make the day-to-day work of Java developers easier and generally help with the comprehension of any Java-based project
结果是一个现在可用于构建和管理任何基于 Java 的项目的工具。我们希望我们所创建的东西能够使 Java 开发人员的日常工作变得更加轻松,并且通常有助于理解任何基于 Java 的项目。
上面是官方对于Maven是什么的一个解释,简单理解就是为了去简化构建过程的一个工具,暂且这样理解吧。

Maven 能解决什么问题?

Maven的主要目标是让开发人员在最短的时间内理解开发工作的完成状态。为了实现这一目标,Maven处理若干相关领域:

1、让构建的过程更容易

虽然使用 Maven 并不能消除了解底层机制的需要,但 Maven 确实使开发人员免于了解许多细节。

2、提供统一的构建体系

Maven 使用其项目对象模型 (POM) 和一组插件来构建项目。一旦熟悉了一个 Maven 项目,您就知道所有 Maven 项目是如何构建的。这可以节省浏览多个项目的时间

3、提供优质的项目信息

Maven 提供有用的项目信息,这些信息部分取自 POM,部分从项目源生成。例如,Maven可以提供:
● 直接从源代码管理创建的更改日志
● 交叉引用来源
● 由项目管理的邮件列表
● 项目使用的依赖项
● 包括覆盖率的单元测试报告

4、鼓励更好的开发实践

Maven 旨在收集最佳实践开发的当前原则,并轻松引导项目朝该方向发展。例如,单元测试的规范、执行和报告是使用 Maven 的正常构建周期的一部分。当前的单元测试最佳实践被用作指导方针:
● 将测试源代码保存在单独但并行的源代码树中
● 使用测试用例命名约定来定位和执行测试
● 让测试用例设置其环境,而不是定制测试准备的构建
Maven 还建议了一些关于如何布局项目目录结构的指南。一旦了解了布局,您就可以轻松导航使用 Maven 的其他项目.
虽然 Maven 对项目布局采取了固执己见的方法,但由于历史原因,某些项目可能不适合这种结构。虽然 Maven 被设计为能够灵活地满足不同项目的需求,但它无法在不影响其目标的情况下满足所有情况。
如果您的项目具有无法重组的不寻常构建结构,您可能必须放弃某些功能或完全放弃 Maven 的使用。

我们如何使用Maven?

1、下载

最新版本下载地址
历史版本下载地址

2、使用

Maven 是一个Java 工具,因此必须先安装JDK才可以继续。
针对于windows:
进入cmd 界面, 查看maven版本

mvn --version

显示信息 如下 (只是一个案例,具体版本是自己安装的版本):

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\apache-maven-3.6.3\apache-maven\bin\..
Java version: 1.8.0_232, vendor: AdoptOpenJDK, runtime: C:\Program Files\AdoptOpenJDK\jdk-8.0.232.09-hotspot\jre
Default locale: en_US, platform encoding: Cp1250
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

3、创建一个项目

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

4、进入项目

cd my-app

5、目录结构

my-app
|-- pom.xml
`-- src|-- main|   `-- java|       `-- com|           `-- mycompany|               `-- app|                   `-- App.java`-- test`-- java`-- com`-- mycompany`-- app`-- AppTest.java

6、pom.xml 文件

pom.xml 文件是 Maven 中项目配置的核心。它是一个单一的配置文件,包含按照您想要的方式构建项目所需的大部分信息。POM 非常庞大,其复杂性令人望而生畏,但没有必要了解所有复杂性才能有效地使用它。该项目的POM是:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mycompany.app</groupId><artifactId>my-app</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>
</project>

7、Maven 阶段

虽然这不是一个完整的列表,但这些是执行的最常见的默认生命周期阶段。
validate:验证项目是否正确并且所有必要的信息均可用
compile: 编译项目的源代码
test: 使用合适的单元测试框架测试编译的源代码。这些测试不应要求打包或部署代码
package: 获取编译后的代码并将其打包为其可分发的格式,例如 JAR。
integration-test: 如有必要,处理包并将其部署到可以运行集成测试的环境中
verify: 进行任何检查以验证包是否有效并符合质量标准
install: 将包安装到本地存储库中,以用作本地其他项目的依赖项
deploy: 在集成或发布环境中完成,将最终包复制到远程存储库,以便与其他开发人员和项目共享。
除了上面的默认列表之外,还有另外两个值得注意的 Maven 生命周期。他们是:
clean: 清理先前构建创建的工件
site: 生成该项目的站点文档

8、Maven安装目录 settings.xml 更换换阿里云仓库地址(加速访问)

<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>mirrorId</id><mirrorOf>repositoryId</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://my.repository.com/repo/path</url>
</mirror>--><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror>
</mirrors>

参考链接

https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
https://maven.apache.org/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode-62. 不同路径【数学 动态规划 组合数学】

LeetCode-62. 不同路径【数学 动态规划 组合数学】 题目描述&#xff1a;解题思路一&#xff1a;动态规划&#xff0c;动规五部曲解题思路二&#xff1a;动态规划&#xff08;版本二&#xff09;解题思路三&#xff1a;数论 题目描述&#xff1a; 一个机器人位于一个 m x n 网…

解决Windows报错:包无法进行更新、相关性或冲突验证。解决无法用Windows照片查看器打开照片问题。

目录 报错信息 解决方法 步骤一&#xff1a;查看照片打开的默认应用是否设置为Windows照片查看器。 步骤二&#xff1a;对注册表进行修改 方法一&#xff1a; 方法二&#xff1a; 报错信息 新电脑打开jpg或png文件会报以下错误 解决方法 步骤一&#xff1a;查看照片打开…

题目:输入3个数a,b,c,按大小顺序输出。

题目&#xff1a;输入3个数a,b,c&#xff0c;按大小顺序输出。    There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried abou…

ROS 2边学边练(21)-- 用rosdep管理依赖项

从此篇开始&#xff0c;我们即将告别入门阶段&#xff0c;走上进阶之路&#xff0c;还是要照常hold住信心啊&#xff01;作为进阶篇的开始&#xff0c;我们今天轻松点&#xff0c;只动眼不动手&#xff0c;周末了稍稍躺平一下。 rosdep是啥 还记得之前在构建一个包之前都被建议…

Coding and Paper Letter(八十九)

CPL之第八十九期。 1 Coding: 1.openai通用代理转换是一个用于将其他厂商服务转为openai 标准接口相应的工具. 通过该工具, 可以将其他厂商的服务转为openai 标准接口. 讯飞星火,通义千问,gemini,openai,copilot,double&#xff0c;kimi&#xff0c;智谱清言 使用spring2webf…

电源监视继电器HRTH-J-2H2D AC220V 导轨安装 JOSEF约瑟

系列型号&#xff1a; HRTH-Y-2H2D-X-T跳位监视、合位监视、电源监控继电器&#xff1b; HRTH-Y-2Z-X-T跳位监视、合位监视、电源监控继电器&#xff1b; HRTH-Y-2H-X-T跳位监视、合位监视、电源监控继电器&#xff1b; HRTH-J-2H2D-X-T跳位监视、合位监视、电源监控继电器…

数学基础:矩阵

来自: https://www.shuxuele.com/algebra/matrix-determinant.html 一、矩阵的行列式 二、矩阵简单知识 三、矩阵乘法 四、单位矩阵 五、逆矩阵一&#xff1a;简单2阶矩阵求法 六、逆矩阵二&#xff1a;3、4阶逆矩阵求法 6.1 求余子式矩阵 6.2 求代数余子式矩阵 6.3 求伴随矩阵…

pyplot+pandas实现操作excel及画图

1、安装jupyter lab pip install jupyterlab # 启动 建议在指定的项目文件夹下 开启cmd窗口并执行 jupyter lab 启动后会自动打开浏览器访问 2、安装依赖 pip install matplotlib pip install xlrd pip install pandas 3、读取excel import pandas as pddf pd.read_excel(hi…

conda activate xxx-env出现错误CommandNotFoundError

1.问题描述&#xff1a; conda激活虚拟环境时&#xff0c;出现如下错误&#xff1a; conda activate baseCommandNotFoundError: Your shell has not been properly configured to use conda activate. To initialize your shell, run$ conda init <SHELL_NAME>Currentl…

harbor容器删除失败解决办法

docker中harbor容器删除失败 出现的问题以及解决方法 [rootk8s-master-node1 harbor]# docker-compose down [] Running 8/8⠿ Container nginx Removed 0.1s…

区块链游戏:探索未来的可能性与挑战

区块链游戏是一种将区块链技术应用于游戏领域的创新产品&#xff0c;它为游戏行业带来了全新的模式和可能性。本文将深入探讨区块链游戏的优点、挑战和未来趋势&#xff0c;帮助读者了解这一新兴领域。 一、区块链游戏的优点 1. 公平性&#xff1a;区块链技术保证了游戏中的物…

享元模式:优化资源利用的高效策略

在面向对象的软件开发中&#xff0c;享元模式是一种结构型设计模式&#xff0c;旨在减少内存使用&#xff0c;通过共享尽可能多的相似对象来提高应用程序的效率。本文将详细介绍享元模式的定义、实现、应用场景以及优缺点。 1. 享元模式的定义 享元模式&#xff08;Flyweigh…

Rust---方法(Method)

目录 与其他语言的不同函数和方法的不同简单示例self、&self 和 &mut self代码示例关联函数(Associated Functions)关联函数与方法的区别举例说明---关联函数的方法的使用举例说明---关联函数需要使用实例数据实现构造函数方法(为枚举实现方法)在Rust中,方法是与结…

什么是物理服务器?

物理服务器又叫做独立服务器&#xff0c;指物理上的单独服务器&#xff0c;是有着实体的服务器并不是虚拟的&#xff0c;物理服务器也可以理解成一台超大的电脑&#xff0c;但是对于普通的家用电脑来说&#xff0c;物理服务器需要长期处于开机的状态&#xff0c;对于硬件性能消…

Flume实时读取目录文件到HDFS案例

【尚硅谷】大数据技术之Flume教程从入门到实战_哔哩哔哩_bilibili 目录 flume简介 flume案例 1、监控端口数据官方案例 2、实时读取目录文件到HDFS案例 flume简介 Flume是Cloudera提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系…

服务限流--一起学习吧之架构

一、主要算法&#xff1a; 计数器算法&#xff1a;该算法定义了一个单位时间&#xff08;如1秒&#xff09;的阈值&#xff0c;每收到一次请求&#xff0c;计数就增加一次。如果请求总数超过当前单位时间内的阈值&#xff0c;就触发限流处理。这种算法简单直观&#xff0c;但存…

代码随想录算法训练营第39天| 62.不同路径、63. 不同路径 II

62.不同路径 力扣题目链接 代码 示例代码 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> result(m, vector<int>(n, 0));for (int i 0; i < n; i) {result[0][i] 1;}for (int i 0; i < m; i) {result[i][0] 1;…

多因子模型的数据处理

优质博文&#xff1a;IT-BLOG-CN 数据处理的基本目的是从多量的、可能是杂乱无章的、难以理解的数据中抽取并推导出有价值、有意义的数据。特别是金融数据&#xff0c;存在数据缺失&#xff0c;不完整以及极端异常值等问题&#xff0c;对于我们的分析和建模影响很多。 对于我…

五、书架开发--3.弹出框功能开发、离线缓存功能开发

实现弹出框真实业务逻辑 私密阅读tab业务逻辑 1、根据点击的tab不同&#xff0c;从而展示出不同的popup弹窗 每个tab中都有自己的index&#xff0c;点击的时候获取这个index&#xff0c;就可以知道当前点击的是哪个tab&#xff0c;然后用switch-case来根据不同的index展示不…

SQL语言

一、DDL数据库定义语言 1、登录mySQL mysql -u"用户名" -p"密码" -h"登录地址 -h&#xff1a;默认为本机 示例&#xff1a; 2、查看当前存在的数据库 show databases; 示例&#xff1a; 3、创建数据库database create…