Maven 使用教程

一、什么是Maven?

乍一看,Maven可能是许多东西,但简而言之,Maven.试图将模式应用于项目的构建基础架构,以便通过提供使用最佳实践的明确途径来提高理解力和生产力。Maven本质上是一个项目管理和理解工具,因此提供了一种帮助管理的方法:

  • Builds
  • Documentation
  • Reporting
  • Dependencies
  • SCMs
  • Releases
  • Distribution

Maven可以通过采用标准约定和实践来加速开发周期,同时帮助您实现更高的成功率,从而为您的构建过程提供好处。
现在我们已经介绍了一点Maven的历史和用途,让我们进入一些真实的例子,让您开始使用Maven! 

二、如何设置Maven?

Maven的默认值通常已经足够了,但如果您需要更改缓存位置或位于HTTP代理之后,则需要创建配置。有关详细信息,请参阅《配置Maven指南》。

三、如何开发我的第一个Maven项目?

我们将立即开始创建您的第一个Maven项目!为了创建我们的第一个Maven项目,我们将使用Maven的原型机制。原型被定义为一个原始的模式或模型,所有其他同类的东西都是从中制造的。在Maven中,原型是项目的模板,它与一些用户输入相结合,以产生一个根据用户需求定制的工作Maven项目。我们现在将向您展示原型机制是如何工作的,但如果您想了解更多关于原型的信息,请参阅我们的原型简介。
开始创建您的第一个项目!为了创建最简单的Maven项目,请从命令行执行以下操作:

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

执行此命令后,您将注意到发生了一些事情。首先,您会注意到,已经为新项目创建了一个名为my app的目录,该目录包含一个名称为pom.xml的文件,该文件应如下所示:

<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><name>my-app</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><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.11</version><scope>test</scope></dependency></dependencies><build><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->... lots of helpful plugins</pluginManagement></build>
</project>

pom.xml包含此项目的项目对象模型(pom)。POM是Maven中的基本工作单元。这一点需要记住,因为Maven本质上是以项目为中心的,因为一切都围绕着项目的概念。简而言之,POM包含关于您的项目的每一条重要信息,本质上是查找与您的项目相关的任何内容的一站式购物。理解POM很重要,鼓励新用户参考POM简介。
这是一个非常简单的POM,但仍然显示每个POM包含的关键元素,因此让我们逐一浏览它们,以熟悉POM要点:

  • project这是所有Maven pom.xml文件中的顶级元素。
  • modelVersion此元素指示此POM正在使用的对象模型的版本。模型本身的版本很少更改,但它是强制性的,以确保在Maven开发人员认为有必要更改模型时使用的稳定性。
  • groupId此元素指示创建项目的组织或组的唯一标识符。groupId是项目的关键标识符之一,通常基于组织的完全限定域名。例如,org.apache.maven.plugins是所有maven插件的指定groupId。
  • artifactId该元素指示由该项目生成的主要工件的唯一基名称。项目的主要工件通常是JAR文件。次级工件(如源捆绑包)也使用artifactId作为其最终名称的一部分。Maven生成的典型工件的格式为<artifactId>-<version><扩展>(例如,myapp-1.0.jar)。
  • version该元素指示项目生成的工件的版本。Maven在版本管理方面帮了很大的忙,您经常会在版本中看到SNAPSHOT指示符,这表示项目处于开发状态。我们将在本指南中讨论快照的使用以及它们如何进一步工作。
  • name此元素指示用于项目的显示名称。这通常用于Maven生成的文档。
  • url此元素指示可以在哪里找到项目的站点。这通常用于Maven生成的文档。
  • properties此元素包含可在POM中的任何位置访问的值占位符。
  • dependencies此元素的子元素列出依赖项。POM的基石。
  • build该元素处理诸如声明项目的目录结构和管理插件之类的事情。

有关POM中可用元素的完整参考,请参阅我们的POM参考。现在让我们回到手头的项目。
在第一个项目的原型生成之后,您还将注意到已创建了以下目录结构:

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

 正如您所看到的,从原型创建的项目有一个POM,一个应用程序源的源树,以及一个测试源的源树。这是Maven项目的标准布局(应用程序源位于${project.basedir}/src/main/java中,测试源位于$}project.basedir}/src/test/java中。其中${product.basedir{表示包含pom.xml的目录)。
如果要手动创建Maven项目,这是我们建议使用的目录结构。这是一个Maven约定,要了解更多关于它的信息,您可以阅读我们的标准目录布局简介。
现在我们有了一个POM、一些应用程序源和一些您可能会问的测试源。。。

四、如何编译应用程序?

切换到archetype创建pom.xml的目录:生成并执行以下命令以编译应用程序源:

mvn compile

在执行该命令时,您应该看到如下输出:

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory <dir>/my-app/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to <dir>/my-app/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.899 s
[INFO] Finished at: 2020-07-12T11:31:54+01:00
[INFO] ------------------------------------------------------------------------

第一次执行这个(或任何其他)命令时,Maven将需要下载完成该命令所需的所有插件和相关依赖项。从干净的Maven安装中,这可能需要相当长的时间(在上面的输出中,几乎需要4分钟)。如果再次执行该命令,Maven现在将拥有它所需的内容,因此它不需要下载任何新的内容,并且能够更快地执行该命令。
从输出中可以看到,编译的类放在${project.basedir}/target/classes中,这是Maven采用的另一个标准约定。因此,如果您是一个敏锐的观察者,您会注意到,通过使用标准约定,上面的POM非常小,并且您不必明确地告诉Maven您的任何源代码在哪里,或者输出应该去哪里。通过遵循标准的Maven约定,您可以轻而易举地完成许多事情!作为一个偶然的比较,让我们看看您在Ant中可能必须做些什么才能完成相同的事情。
现在,这只是编译一棵应用程序源树,所示的Ant脚本的大小与上面显示的POM几乎相同。但我们将看到,我们可以做更多的只是简单的POM!

五、如何编译测试源并运行单元测试?

现在您成功地编译了应用程序的源代码,现在您有了一些要编译和执行的单元测试(因为每个程序员总是编写和执行他们的单元测试*微调微调微调*)。
执行以下命令:

mvn test

在执行该命令时,您应该看到如下输出:

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory <dir>/my-app/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ my-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory <dir>/my-app/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to <dir>/my-app/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ my-app ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.mycompany.app.AppTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.025 s - in com.mycompany.app.AppTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.881 s
[INFO] Finished at: 2020-07-12T12:00:33+01:00
[INFO] ------------------------------------------------------------------------

关于输出需要注意的一些事项:

  • 这次Maven下载了更多的依赖项。这些是执行测试所必需的依赖项和插件(它已经具有编译所需的依赖项,并且不会再次下载它们)。
  • 在编译和执行测试之前,Maven编译主代码(所有这些类都是最新的,因为自上次编译以来,我们没有更改任何内容)。

如果只想编译测试源(但不执行测试),则可以执行以下操作:

 mvn test-compile

 既然您可以编译应用程序源、编译测试和执行测试,那么您需要继续下一个逻辑步骤,这样您就会问。。。

Maven 使用教程(二)-CSDN博客

Maven 使用教程(三)_Doker 多克 技术人的数码品牌的博客-CSDN博客 

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

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

相关文章

SQL之alter的用法简介

SQL之alter的用法简介 ALTER TABLE是SQL中的一个命令&#xff0c;它用于修改已经存在的表的结构&#xff0c;而不改变其原始数据。以下是一些ALTER TABLE的用法&#xff1a; 1&#xff09;增加列&#xff08;Add Column&#xff09;&#xff1a; ALTER TABLE table_name ADD…

强化科技创新“辐射力”,中国移动的数智化大棋局

作者 | 曾响铃 文 | 响铃说 丝滑流畅的5G连接、每时每刻的数字生活服务、无处不在的智能终端、拟人交流的AI助手、梦幻般的XR虚拟现实、直接感受的裸眼3D…… 不知不觉&#xff0c;那个科幻片中的世界&#xff0c;越来越近。 数智化新世界的“气氛”&#xff0c;由一个个具…

flinkdashboard未授权

flinkwebui 增加账号密码 yum install httpd-tools -y htpasswd -c /usr/local/nginx/conf.d/.ngpasspd flink2024 flink_2024 再输入密码 修改flink.conf 我们可以通过./conf/flink-conf.yaml来设置web服务器的ip和端口: rest.address rest.port:8084 安装nginx ./config…

VR太空舱体验馆VR神舟返回舱VR虚拟现实科技科普乐园

VR航天航空设备&#xff0c;寓教于乐 VR科技正成为航天航空领域的新宠。作为一种沉浸式的数字技术&#xff0c;VR(Virtual Reality&#xff0c;虚拟现实)能够为用户创造出逼真的虚拟环境&#xff0c;让人们仿佛身临其境。借助VR技术&#xff0c;我们可以带领学生和游客深入了解…

scrapy针对302请求的处理与重试配置

不修改任何配置&#xff0c;scrapy针对302请求时如何处理的&#xff1f; 默认情况下&#xff0c;当爬虫发送请求并收到 HTTP 302 重定向响应时&#xff0c;Scrapy 会自动跟随重定向&#xff0c;也就是说&#xff0c;它会自动向重定向的 URL 发送一个新的请求&#xff0c;并且在…

矩阵键盘反转扫描

/*----------------------------------------------- 内容&#xff1a;如计算器输入数据形式相同 从右至左 ------------------------------------------------*/ #include<reg52.h> //包含头文件&#xff0c;一般情况不需要改动&#xff0c;头文件包含特殊功能寄存器的定…

LangChain结合milvus向量数据库以及GPT3.5结合做知识库问答之一 --->milvus的docker compose安装

https://github.com/milvus-io/milvus/releaseshttps://github.com/milvus-io/milvus/releases 以下步骤均在Linux环境中进行&#xff1a; 将milvus-standalone-docker-compose.yml下载到本地。 1、新建一个目录milvus 2、将milvus-standalone-docker-compose.yml放到milvu…

Spring Cloud--Nacos+@RefreshScope实现配置的动态更新

原文网址&#xff1a;Spring Cloud--NacosRefreshScope实现配置的动态更新_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍SpringCloud整合Nacos使用RefreshScope实现动态更新配置。 官网 Nacos Spring Cloud 快速开始 动态更新的介绍 动态更新的含义&#xff1a;修改应…

区块链(11):java区块链项目之页面部分实现

addPeer.html <!DOCTYPE html> <html> <head><meta charset="utf-8"> <title>java区块链</title><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="styles…

iOS-2023面试最新-逆向题-视觉

1、逆向思路 界面分析。Cycript、Reveal 代码分析。MachOView、class-dump、Hopper Disassembler、ida 动态调试。debugserver、LLDB 代码编写。代码注入&#xff0c;重签名&#xff0c;打包 2、ios签名机制 3、Mach-O&#xff0c;ASLR 4、LLVM 5、OpenSSH登录iPhone&a…

2023_Spark_实验十八:安装FinalShell

下载安装包 链接&#xff1a;https://pan.baidu.com/s/14cOJDcezzuwUYowPsOA-sg?pwd6htc 提取码&#xff1a;6htc 下载文件名称&#xff1a;FinalShell.zip 二、安装 三、启动FinalShell 四、连接远程 linux 服务器 先确保linux系统已经开启&#xff0c;不然连接不上 左边…

关于雅思听力答案限定字数的解释。

1. No more than three words and/or a number&#xff1a;31&#xff0c;可以填3/2/1个单词&#xff1b;1个数字&#xff1b;3/2/1个单词1个数字 2. No more than three words and/or numbers&#xff1a;3n&#xff0c;可以填3/2/1个单词&#xff1b;n个数字&#xff1b;3/2…

一款优秀的文件外发控制软件 具备哪些优势?

随着越来越多的公司在网上开展业务&#xff0c;网络安全漏洞也相应增加。因此&#xff0c;企业需要保护自己的数据&#xff0c;防止数据泄露&#xff0c;给企业带来损失。近几年来&#xff0c;企业数据泄露事件频发&#xff0c;给许多企业都带来巨大创伤。 乌克兰电力公司在201…

3.Vue-在Vue框架中搭建路由

题记 以下是在vue框架中搭建路由的全过程&#xff0c;包括全部代码。 创建路由 如果你的文件中没有 router文件夹&#xff0c;可以使用以下命令创建&#xff1a; vue add router 注意&#xff1a;生成的路由文件会因为选择的自定义选项不同&#xff0c;而有所差异 生成的代码…

uni-app:本地缓存的使用

uni-app 提供了多种方法用于本地缓存的操作。下面是一些常用的 uni-app 本地缓存方法&#xff1a; uni.setStorageSync(key, data): 同步方式将数据存储到本地缓存中&#xff0c;可以使用对应的 key 来获取该数据。 uni.setStorage({key, data}): 异步方式将数据存储到本地缓存…

SpringCloud-Stream

一、介绍 &#xff08;1&#xff09;提供统一接口操作不同厂商的消息队列组件&#xff0c;降低学习成本 &#xff08;2&#xff09;生产者和消费者只需操作binder对象即可与消息队列交互&#xff0c;生产者output&#xff0c;消费者input &#xff08;3&#xff09;核心概念&a…

【字符编码】c++编码格式及转换

参考资料&#xff1a; 字符编码笔记&#xff1a;ASCII&#xff0c;Unicode 和 UTF-8 通俗易懂 wstring 和 string 的区别 wstring 和 string 是 C 中的两种字符串类型&#xff0c;它们的主要区别在于字符编码和存储方式。 字符编码: string 使用单字节字符编码&#xff0c;通…

CRM系统中的销售漏斗有什么作用?

随着数字化发展&#xff0c;越来越多的企业使用CRM销售管理系统提高销售管理水平&#xff0c;提升盈利能力。在这个过程中&#xff0c;销售漏斗起到了非常重要的作用。下面就来说说&#xff0c;CRM系统中的销售漏斗有什么作用&#xff1f; 一、销售数据可视化 CRM销售漏斗通过…

实现一个todoList可直接操作数据(上移、下移、置顶、置底)

演示 HTML部分 <!DOCTYPE html> <html> <head><title>表格示例</title> </head> <body><table border"1"><thead><tr><th>更新时间</th><th>操作</th></tr></thead&…

SOLIDWORKS PDM—2024版本新增

SOLIDWORKS产品数据管理 (PDM) 解决方案可帮助您控制设计数据&#xff0c;并且从本质上改进您的团队就产品开发进行管理和协作的方式。使用 SOLIDWORKS PDM Professional&#xff0c;您的团队能够&#xff1a;1. 安全地存储和索引设计数据以实现快速检索&#xff1b;2. 打消关于…