maven学习:maven 的入门

news2025/7/9 18:33:05

2.maven 的入门

到目前为止,我们已经大概了解并安装好了Maven,现在,我们开始创建一个最简单的Hello World项目。

2.1 在Idea创建maven项目

  1. 创建一个Maven项目也十分简单,选择”Create New Project"
    在这里插入图片描述

  2. 选择”maven”选项,创建一个maven项目
    在这里插入图片描述

  3. 输入项目的groupId,ArtifactId,Version
    在这里插入图片描述

  4. 直接”finish”
    在这里插入图片描述
    此时我们就创建好了一个maven项目,我们看一下maven项目的结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KIMueZir-1669270636250)(assets/wps22.jpg)]

​ 我们看到src/main/java是放我们的主源代码,src/test/java 是放我们的测试源代码. target是有存放项目构建后的文件和目录,jar包、war包、编译的class文件等。target里的所有内容都是maven构建的时候生成的,pom.xml文件就是我们项目的maven的核心文件, 它是指示 Maven 如何工作的元数据文件,每一个Maven项目在根目录下有一个pom.xml文件.

2.2 pom.xml 文件

下面就是我们在创建maven项目时,所生成的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>org.csmf.helloworld</groupId>
  <artifactId>hello-world</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>hello-world</name>
  <url>http://maven.apache.org</url>

  <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
  • 代码的第一行是XML头,指定了该xml文档的版本和编码方式。紧接着是project元素,project是所有pom.xml的根元素,它还声明了一些POM相关的命名空间及xsd元素.

  • 根元素下的第一个子元素modelVersion指定了当前POM模型的版本,对于Maven2及Maven 3来说,它只能是4.0.0。

  • groupId定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联,譬如你在googlecode上建立了一个名为myapp的项目,那么groupId就应该是com.googlecode.myapp,如果你的公司是mycom,有一个项目为myapp,那么groupId就应该是com.mycom.myapp。

  • artifactId定义了当前Maven项目在组中唯一的ID,我们为这个Hello World项目定义artifactId为hello-world

  • version指定了Hello World项目当前的版本——1.0-SNAPSHOT。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。随着项目的发展,version会不断更新,如升级为1.0、1.1-SNAPSHOT、1.1、2.0等等。

  • name元素声明了一个对于用户更为友好的项目名称,虽然这不是必须的,但我还是推荐为每个POM声明name,Maven产生的文档用。

  • url元素:项目主页的URL, Maven产生的文档用

  • properties元素是对项目的一些设置

  • project.build.sourceEncoding 设置项目源文件的编码

  • maven.compiler.source 设置编译源代码的jdk版本

  • maven.compiler.target: 设置生成jar/war使用的jdk版本

  • dependencies项目引入插件所需要的额外依赖

  • ​ dependency: 为了能够 build 或运行,一个典型的java project会依赖其他的包,在Maven中,这些被依赖的包就被称为 dependency。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hXeObkDH-1669270636252)(assets/wps23.png)]

<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>

2.3 编写主代码

​ 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包。默认情况下,Maven假设项目主代码位于src/main/java目录,我们遵循Maven的约定,创建该目录,然后在该目录下创建java源文件.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cQsRxl9i-1669270636254)(assets/wps24.jpg)]

源文件的代码如下:

public class HelloWorld {
	public void sayHello(String world){
		System.out.println("hello: "+world);
	}
}
	这是一个简单的Java类,它有一个sayHello()方法,在控制台输出”hello:XXx””. 代码编写完毕后,我们删除编译输出文件,使用命令`clean`,我们使用Maven进行编译,使用命令`compile `,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E0oEAWUg-1669270636254)(assets/wps25.jpg)]

我们会得到如下输出:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jndBdcaG-1669270636255)(assets/wps26.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qQGEpwBz-1669270636256)(assets/wps27.jpg)]

**注意:输出的信息中没有[error]**就说明编程通过.

2.4 编写测试代码

Maven项目中默认的测试代码目录是src/test/java下的,当我们java的测试都是基于junit的单元测试,那也就是说,我们需要添加junit的依赖,我们在pom,xml文件添加了junit依赖,

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

当我们添加了这个依赖的时候,我们发现在我们项目的”Maven Dependencies”下面就添加了junit的jar包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xJwNms8b-1669270636257)(assets/wps28.jpg)]”

那我们来编写一个测试类,来测试我们之前写的HelloWorld,测试类的代码如下:

import org.junit.Test;

public class TestHelloWorld {
	@Test
	public void testSayHello(){
		HelloWorld helloWorld = new HelloWorld();
		helloWorld.sayHello("Maven");
	}
}

测试用例编写完毕之后就可以调用Maven执行测试,运行 test

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xWeAGerx-1669270636259)(assets/wps29.jpg)]

测试报告如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GpZxzpE9-1669270636259)(assets/wps30.jpg)]
当看到”BUILD SUCCESS”这说明测试通过.

2.5 项目打包

将项目进行编译、测试之后,下一个重要步骤就是打包(package)。Hello World的POM中没有指定打包类型,使用默认打包类型jar,我们可以简单地执行命令clean package进行打包,可以看到如下输出:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jUe2yCRw-1669270636260)(assets/wps31.jpg)]

类似地,Maven会在打包之前执行编译、测试等操作。这里我们看到jar:jar任务负责打包,实际上就是jar插件的jar目标将项目主代码打包成一个名为hello-1-1.0-SNAPSHOT.jar的文件,该文件也位于**target/**输出目录中,它是根据artifact-version.jar规则进行命名的.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B47l0B2s-1669270636261)(assets/wps32.jpg)]

我们得到了项目的输出,如果有需要的话,就可以复制这个jar文件到其他项目的Classpath中从而使用HelloWorld类。但是,如何才能让其他的Maven项目直接引用这个jar呢?我们还需要一个安装的步骤,执行 install

在这里插入图片描述
我们发现,现在这个项目已经安装到我们的本地仓库中了.

Maven常用命令:

mvn archetype:generate :创建 Maven 项目

mvn compile :编译源代码

mvn test-compile :编译测试代码

mvn test : 运行应用程序中的单元测试

mvn site : 生成项目相关信息的网站

mvn clean :清除目标目录中的生成结果

mvn package : 依据项目生成 jar 文件

mvn install :在本地 Repository 中安装 jar

mvn deploy:将jar包发布到远程仓库

mvn eclipse:eclipse :生成 Eclipse 项目文件

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

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

相关文章

留学推荐信如何写好个人优点和缺点?

留学推荐信是出国申请文书的重要文件之一&#xff0c;是一个从第三方&#xff08;通常是以前的导师&#xff09;从学术权威的角度对申请者的客观评价。评价的内容包括学术能力&#xff08;Academic competence&#xff09;、性格特点&#xff08;Personal characteristics&…

如何使用 MySQL 做全文检索这件事

​前言 这有朋友聊到他们的系统中要接入全文检索&#xff0c;这让我想起了很久以前为一个很古老的项目添加搜索功能的事儿。 一提到全文检索&#xff0c;我们首先就会想到搜索引擎。也就是用一个词、一段文本搜索出匹配的内容。一般这种技术都有对应的实现方式&#xff0c;ES&…

从01背包说起(上)

目录 引入 1.什么是动态规划? 2.什么是背包问题&#xff1f; 3.什么是01背包&#xff1f; 模板题 1.题面 2.思路 Ⅰ为何不可用贪心 Ⅱ状态转移方程 3.代码 下期预告 引入 1.什么是动态规划? 动态规划&#xff08;英语&#xff1a;Dynamic programming&#xff0…

MQTT,JSON,VSCODE(C语言编程环境)心得

VSCODE&#xff08;C语言编程环境&#xff09;心得 心得基于linux虚拟机和SSH方式&#xff0c;编辑基于VSCODE&#xff0c;编译基于GCC或G&#xff0c;调试基于GDB的插件&#xff0c;代码管理基于git。 安装GIT&#xff1a;sudo apt-get install git 配置GIT&#xff1a; git…

Mysql时间类型

多个timestamp 默认只对第一个timestamp自动更新时间

element-ui在项目当中的引入以及按需引入使用

目录 1.项目当中引入element-ui A.先使用npm安装 B.在main.js当中引入文件 C.在App.vue当中可以引用button相关的UI组件 2.element-ui配合脚手架按需引入 A.首先安装按需引入的插件 B.修改 .babelrc C.按需引入的好处 1.项目当中引入element-ui A.先使用npm安装 npm i …

【强化学习论文合集】ICML-2021 强化学习论文

强化学习&#xff08;Reinforcement Learning, RL&#xff09;&#xff0c;又称再励学习、评价学习或增强学习&#xff0c;是机器学习的范式和方法论之一&#xff0c;用于描述和解决智能体&#xff08;agent&#xff09;在与环境的交互过程中通过学习策略以达成回报最大化或实现…

[附源码]Python计算机毕业设计电子工厂进销存管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

哲学讨论:未来的语言模型有没有可能具备意识和主观感受?

文&#xff5c;付奶茶编&#xff5c;ZenMoore问题背景近期&#xff0c;纽约大学心智、大脑和意识研究中心的主任 David Chalmers 汇报了一场非常有思考价值的研究成果,主要是从神经科学的角度讨论了大规模语言模型&#xff08;Large Language Models&#xff0c;LLMs&#xff0…

刘强东这波操作秀

近日&#xff0c;刘强东发布京东全员信&#xff0c;信中提到&#xff1a;自2023年1月1日起&#xff0c;逐步为十几万德邦的兄弟们缴齐五险一金&#xff0c;确保每个德邦兄弟都能“老有所养&#xff0c;病有所医”&#xff0c;为兄弟们提供基础保障&#xff1b;集团拿出100亿元人…

教程四 在Go中使用Energy创建跨平台GUI - 开发者工具

介绍 本文介绍在Energy中如何使用开发者工具(dev tools) 开发者工具(dev tools) 是前端开发人员常用的&#xff0c;在开发时调式代码、接口、资源加载、CSS调整等等&#xff0c;大多数场景都会使用。 energy封装了部分繁琐的chromium使用&#xff0c;其中之一包含开发者工具…

致敬最美抗击疫情的逆行者 DIV布局大学生抗疫感动专题网页设计作业模板 疫情感动人物静态HTML网页模板下载

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

PD仿真算法中变形梯度矩阵的极分解

1.背景 PD&#xff08;Projective Dynamics&#xff09;仿真算法是一种“可并行化计算的”高效的软体形变模拟&#xff08;或成为仿真、动画&#xff09;算法&#xff0c;与传统的基于力的有限元方法不同的是&#xff0c;PD算法直接作用于顶点位置&#xff0c;通过最小化能量函…

Wireshark Lab: Ethernet and ARP v7.0

Wireshark Lab: Ethernet and ARP v7.0 实验内容戳这里 介绍部分转自乌漆WhiteMoon Ethernet 以太网 以太网在现在的有线局域网中有着支配者的地位&#xff0c;就像是因特网使得全球互联那样。其实局域网技术还有令牌环、FDDI 和 ATM 等&#xff0c;但是以太网仍然具有很多…

第十三届蓝桥杯 C++ B 组省赛 G 题———积木画(AC)

目录1.积木画1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.样例说明7.数据范围8.原题链接2.解题思路AC_code1.积木画 1.题目描述 小明最近迷上了积木画, 有这么两种类型的积木, 分别为 III 型&#xff08;大小为 2 个单位面积) 和 LLL 型 (大小为 3 个单位面积): 同…

java面试强基(12)

什么是泛型&#xff1f;有什么作用&#xff1f; Java 泛型&#xff08;Generics&#xff09; 是 JDK 5 中引入的一个新特性。使用泛型参数&#xff0c;可以增强代码的可读性以及稳定性。 编译器可以对泛型参数进行检测&#xff0c;并且通过泛型参数可以指定传入的对象类型。…

多媒体技术论文研读报告

多媒体技术论文研读报告 一、论文基本信息 论文题目为&#xff1a;基于多模态特征融合嵌入的相似广告检索方法&#xff0c;作者信息&#xff1a;南京大学计算机软件新技术国家重点实验室&#xff0c;南京大学软件学院冯奕、周晓松、李传艺、葛季栋、骆斌&#xff0c;深圳市腾…

2022最新JUC+多线程面试题

Java中实现多线程有几种方法 创建线程的常用的几种方式&#xff1a; 继承Thread类 实现Runnable接口 &#xff08;重写run方法&#xff0c;无返回值&#xff09; 实现Callable接口&#xff08; JDK1.5>,重写call方法&#xff0c;可以自定义返回值 &#xff09; 线程池方…

带式输送机的传动装置设计

目 录 摘 要 I Abstract II 1 绪论 1 1.1设计概述 1 1.2研究内容及参数 1 1.3 带传动 2 1.4圆锥-圆柱齿轮传动减速器 2 2结构设计 4 2.1V带传动 4 2.2减速器内部的传动零件 4 2.3联轴器的选择 4 3 设计计算过程及说明 6 3.1选择电动机 6 3.1.1电动机类型和结构型式选择 6 3.1.2…

android源码-ContentProvider实现原理分析

前言&#xff1a; 最初的目的是想研究下ContentProvider产生ANR原因的&#xff0c;但是如果要讲ANR的原因&#xff0c;那么必须要了解ContentProvider的完整实现原理&#xff0c;所以本篇就先讲一下ContentProvider的实现原理&#xff0c;下一篇再去讲ANR的原因。 本篇主要会讲…