03在命令行环境中创建Maven版的Java工程,了解pom.xml文件的结构,了解Java工程的目录结构并编写代码,执行Maven相关的构建命令
创建Maven版的Java工程
Maven工程的坐标
数学中使用x、y、z三个向量可以在空间中唯一的定位一个点, Maven中也可以使用groupId,artifactId,version三个向量在Maven的仓库中唯一的定位到一个jar包
groupId: 公司或组织域名的倒序, 通常也会加上项目名称代表公司或组织开发的一个项目,如com.atguigu.mavenartifactId: 一个项目或者是项目下的一个模块的名称,将来作为Maven工程的工程名,如pro01-atguigu-mavenversion: 当前模块的版本号,根据自己的需要设定 , 如1.0-SNAPSHOT(SNAPSHOT表示快照版本,即正在迭代过程中不稳定的版本)
根据jar包的坐标可以确定它在Maven本地仓库中存储的位置
<!--jar包在Maven本地仓库中的位置: Maven本地仓库根目录\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar-->
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
使用命令生成Java工程
第一步: 任意创建一个目录作为本地的工作空间,例如D:\maven-workspace\space
第二步: 在Maven的本地工作空间目录下打开命令行窗口,运行mvn archetype:generate命令根据提示操作
> Choose a number or apply filter (format: \[groupId:\]artifactId, case sensitive contains): 7【直接回车,7是默认值表示快速开始】
> Define value for property 'groupId': com.atguigu.maven[创建项目的名称]
> Define value for property 'artifactId': pro01-maven-java[创建项目的模块的名称]
> Define value for property 'version' 1.0-SNAPSHOT: :【直接回车,使用默认值】
> Define value for property 'package' com.atguigu.maven: :【直接回车,使用默认值】
> Confirm properties configuration: groupId: com.atguigu.maven artifactId: pro01-maven-java version: 1.0-SNAPSHOT package: com.atguigu.maven Y::【直接回车表示确认。如果前面有输入错误,想要重新输入则输入N再回车】
第三步: 配置Maven工程自动生成的pom.xml文件 , 对创建好的Java工程的依赖信息做一点调整
- Maven默认生成的工程对
junit依赖的是较低的3.8.1版本(不支持注解),建议改成较适合的4.12版本, 另外自动生成的App.java和AppTest.java也可以删除
<!--dependencies复数标签:里面包含dependency单数标签-->
<dependencies><!--dependency单数标签:配置一个具体的依赖--><dependency><!--通过坐标来依赖其他jar包--><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!-- 依赖的范围 --><scope>test</scope></dependency>
</dependencies>
Maven中POM文件的结构
POM(Project Object Model)是项目对象模型 , 类似DOM(Document Object Model)文档对象模型 , 它们都是模型化思想的具体体现
- POM表示将工程抽象为一个模型,再用程序中的对象来描述这个模型, 这样我们就可以用程序来管理项目了
- 将现实生活中的事物抽象为模型,然后封装模型相关的数据作为一个对象,这样就可以在程序中计算与现实事物相关的数据
POM理念集中体现在Maven工程根目录下的Maven核心配置文件pom.xml中 , 学习Maven就是学习如何配置这个文件
- 配置当前Maven工程的坐标
- 配置当前Maven工程的打包方式: jar(当前是Java工程), war(当前是Web工程),pom(当前工程是
管理其他工程的工程) - 配置当前Maven工程依赖的jar包
<?xml version="1.0" encoding="UTF-8"?>
<!--project跟标签,表示对当前工程进行配置管理-->
<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标签:代表当前pom.xml所采用的标签结构,从Maven2开始就固定是4.0.0--><modelVersion>4.0.0</modelVersion><!--当前Maven工程的坐标--><groupId>com.atguigu.maven</groupId><artifactId>pro01-maven-java</artifactId><version>1.0-SNAPSHOT</version><!--当前Maven工程的打包方式--><packaging>jar</packaging><!--当前Maven工程的名字,可省略--><name>pro01-maven-java</name><!--maven的官网地址,可省略--><url>http://maven.apache.org</url><properties><!--工程构建过程中读取源码时使用的字符集--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!--当前工程所依赖的jar包的坐标--><dependencies><!--使用dependency配置一个具体的依赖--><dependency><!--要导入哪个jar包就配置它的坐标信息即可--><groupId>junit</groupId><artifactId>junit</artifactId><!--4.0以下的版本不支持注解--><version>4.12</version> <!--配置依赖的范围--><scope>test</scope></dependency></dependencies>
</project>
Maven规定Java工程目录结构
Maven为了让构建过程能够尽可能自动化完成,所以必须约定目录结构的作用(在超级pom.xml中已经定义好了目录结构)
- Maven执行编译操作时必须先去知道Java源程序在哪才能执行编译,最后把编译结果存放在规定的
target目录(专门存放构建操作输出的结果)
目前开发领域的技术发展趋势就是约定大于配置,配置大于编码
- Maven对于目录结构这个问题,没有采用配置的方式而是基于约定 , 若每次创建Maven工程后,还需要针对各目录的位置进行详细配置,那肯定非常麻烦

在Java工程中编写代码
主体程序
主体程序指的是被测试的程序,同时也是将来在项目中真正要使用的程序

package com.atguigu.maven;public class Calculator {public int sum(int i, int j){return i + j;}
}
测试程序
测试程序所在的包结构一般要求和被测试程序的包结构对应

package com.atguigu.maven;
import org.junit.Test;
import com.atguigu.maven.Calculator;// 静态导入的效果是将Assert类中的静态资源导入当前类
// 这样一来,在当前类中就可以直接使用Assert类中的静态资源,不需要写类名
import static org.junit.Assert.*;public class CalculatorTest{@Testpublic void testSum(){// 1.创建Calculator对象Calculator calculator = new Calculator();// 2.调用Calculator对象的方法,获取到程序运行实际的结果int actualResult = calculator.sum(5, 3);// 3.声明一个变量,表示程序运行期待的结果int expectedResult = 8;// 4.使用断言来判断实际结果和期待结果是否一致// 如果一致:测试通过,不会抛出异常// 如果不一致:抛出异常,测试失败assertEquals(expectedResult, actualResult);}
}
执行Maven的构建命令
执行构建命令时必须知道要操作的是哪个工程,所以在Maven中运行和构建操作相关的命令时,必须进入到pom.xml文件所在的目录,否则会报错
- 只有
mvn -v命令和构建操作无关,只要正确配置了PATH在任何目录下执行都可以
#错误提示
The goal you specified requires a project to execute but there is no POM in this directory
Maven生命周期的体现: 执行某一个命令时其前面的命令默认都会执行一遍, 另外命令还可以组合起来按照先后顺序执行
- 如执行测试命令中会提前自动执行编译命令,测试成功就说明编译也是成功的
| 命令名 | 作用 |
|---|---|
| mvn clean | 清理操作, 删除target目录 |
| mvn compile | 编译操作, 主程序编译(生成target目录, 主体程序编译结果存放在target/classes目录) |
| mvn test-compile | 编译操作,测试程序编译(生成target目录, 测试程序编译结果存放在target/test-classes目录) |
| mvn test | 测试操作,调用测试程序的测试方法 (测试的报告存放在target/surefire-reports目录) , |
| mvn package | 打包操作, 打包后的jar包(不含测试程序)存放在target目录 ,jar包的名字由模块名称-模块版本号组成 |
| mvn install | 安装操作 |
安装操作有两个效果
- 将本地构建过程中生成的jar包存入Maven本地仓库(在Maven仓库中的路径是根据它的坐标生成的)
- 将pom.xml文件转换为 XXX.pom文件一起存入本地仓库 , 只是名字变成了模块名称-模块版本号.pom,本质上它们是同一个文件
<!--jar包在仓库中生成的路径: Maven本地仓库根目录\com\atguigu\maven\pro01-maven-java\1.0-SNAPSHOT\pro01-maven-java-1.0-SNAPSHOT.jar-->
<groupId>com.atguigu.maven</groupId>
<artifactId>pro01-maven-java</artifactId>
<version>1.0-SNAPSHOT</version>
相关文章:
03在命令行环境中创建Maven版的Java工程,了解pom.xml文件的结构,了解Java工程的目录结构并编写代码,执行Maven相关的构建命令
创建Maven版的Java工程 Maven工程的坐标 数学中使用x、y、z三个向量可以在空间中唯一的定位一个点, Maven中也可以使用groupId,artifactId,version三个向量在Maven的仓库中唯一的定位到一个jar包 groupId: 公司或组织域名的倒序, 通常也会加上项目名称代表公司或组织开发的一…...
论文阅读:CenterFormer: Center-based Transformer for 3D Object Detection
目录 概要 Motivation 整体架构流程 技术细节 Multi-scale Center Proposal Network Multi-scale Center Transformer Decoder Multi-frame CenterFormer 小结 论文地址:[2209.05588] CenterFormer: Center-based Transformer for 3D Object Detection (arx…...
Arduino驱动BNO055九轴绝对定向传感器(惯性测量传感器篇)
目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 BNO055是实现智能9轴绝对定向的新型传感器IC,它将整个传感器系统级封装在一起,集成了三轴14位加速度计,三轴16位陀螺仪,三轴地磁传感器和一个自带算法处理的32位微控制器。...
MQTT测试工具及使用教程
一步一步来:MQTT服务器搭建、MQTT客户端使用-CSDN博客 MQTT X 使用指南_mqttx使用教程-CSDN博客...
yolov7改进优化之蒸馏(一)
最近比较忙,有一段时间没更新了,最近yolov7用的比较多,总结一下。上一篇yolov5及yolov7实战之剪枝_CodingInCV的博客-CSDN博客 我们讲了通过剪枝来裁剪我们的模型,达到在精度损失不大的情况下,提高模型速度的目的。上一…...
视频美颜SDK,提升企业视频通话质量与形象
在今天的数字时代,视频通话已经成为企业与客户、员工之间不可或缺的沟通方式。然而,由于网络环境、设备性能等因素的影响,视频通话中的画面质量往往难以达到预期效果。为了提升视频通话的质量与形象,美摄美颜SDK应运而生ÿ…...
webmin远程命令执行漏洞
文章目录 漏洞编号:漏洞描述:影响版本:利用方法(利用案例):安装环境漏洞复现 附带文件:加固建议:参考信息:漏洞分类: Webmin 远程命令执行漏洞(CV…...
docker离线安装和使用
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://ullx9uta.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo syste…...
解决 MyBatis 一对多查询中,出现每组元素只有一个,总组数与元素数总数相等的问题
文章目录 问题简述场景描述问题描述问题原因解决办法 问题简述 笔者在使用 MyBatis 进行一对多查询的时候遇到一个奇怪的问题。对于笔者的一对多的查询结果,出现了这样的一个现象:原来每个组里有多个元素,查询目标是查询所查的组,…...
这应该是关于回归模型最全的总结了(附原理+代码)
本文将继续修炼回归模型算法,并总结了一些常用的除线性回归模型之外的模型,其中包括一些单模型及集成学习器。 保序回归、多项式回归、多输出回归、多输出K近邻回归、决策树回归、多输出决策树回归、AdaBoost回归、梯度提升决策树回归、人工神经网络、随…...
基于闪电连接过程优化的BP神经网络(分类应用) - 附代码
基于闪电连接过程优化的BP神经网络(分类应用) - 附代码 文章目录 基于闪电连接过程优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.闪电连接过程优化BP神经网络3.1 BP神经网络参数设置3.2 闪电连接过程算…...
Linux性能优化--性能工具:网络
7.0 概述 本章介绍一些在Linux上可用的网络性能工具。我们主要关注分析单个设备/系统网络流量的工具,而非全网管理工具。虽然在完全隔离的情况下评估网络性能通常是无意义的(节点不会与自己通信),但是,调查单个系统在网络上的行为对确定本地配置和应用程…...
【Linux】线程互斥与同步
文章目录 一.Linux线程互斥1.进程线程间的互斥相关背景概念2互斥量mutex3.互斥量的接口4.互斥量实现原理探究 二.可重入VS线程安全1.概念2.常见的线程不安全的情况3.常见的线程安全的情况4.常见的不可重入的情况5.常见的可重入的情况6.可重入与线程安全联系7.可重入与线程安全区…...
敏捷开发中,Sprint回顾会的目的
Sprint回顾会的主要目的是促进Scrum团队的学习和持续改进。在每个Sprint结束后,团队聚集在一起进行回顾,以达到以下目标: 识别问题: 回顾会允许团队识别在Sprint(迭代)期间遇到的问题、挑战和障碍。这有助于…...
排序【七大排序】
文章目录 1. 排序的概念及引用1.1 排序的概念1.2 常见的排序算法 2. 常见排序算法的实现2.1 插入排序2.1.1基本思想:2.1.2 直接插入排序2.1.3 希尔排序( 缩小增量排序 ) 2.2 选择排序2.2.1基本思想:2.2.2 直接选择排序:2.2.3 堆排序 2.3 交换排序2.3.1冒…...
人大与加拿大女王大学金融硕士项目——立即行动,才是缓解焦虑的解药
!在这个经济飞速的发展的时代,我国焦虑症的患病率为7%,焦虑已经超越个体范畴,成为整个社会与时代的课题。焦虑,往往源于我们想要达到的,与自己拥有的所产生的差距。任何事情,开始做远比准备做更会给人带来成…...
老卫带你学---leetcode刷题(46. 全排列)
46. 全排列 问题: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1:输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#x…...
6.6 图的应用
思维导图: 6.6.1 最小生成树 ### 6.6 图的应用 #### 主旨:图的概念可应用于现实生活中的许多问题,如网络构建、路径查询、任务排序等。 --- #### 6.6.1 最小生成树 **概念**:要在n个城市中建立通信联络网,则最少需…...
100问GPT4与大语言模型的关系以及LLMs的重要性
你现在是一个AI专家,语言学家和教师,你目标是让我理解语言模型的概念,理解ChatGPT 跟语言模型之间的关系。你的工作是以一种易于理解的方式解释这些概念。这可能包括提供 例子,提出问题或将复杂的想法分解成更容易理解的小块。现在…...
Linux:mongodb数据逻辑备份与恢复(3.4.5版本)
我在数据库aaa的里创建了一个名为tarro的集合,其中有三条数据 备份语法 mongodump –h server_ip –d database_name –o dbdirectory 恢复语法 mongorestore -d database_name --dirdbdirectory 备份 现在我要将aaa.tarro进行备份 mongodump --host 192.168.254…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
