03在命令行环境中创建Maven版的Java工程,了解pom.xml文件的结构,了解Java工程的目录结构并编写代码,执行Maven相关的构建命令

news2024/11/19 10:31:06

创建Maven版的Java工程

Maven工程的坐标

数学中使用x、y、z三个向量可以在空间中唯一的定位一个点, Maven中也可以使用groupId,artifactId,version三个向量在Maven的仓库中唯一的定位到一个jar包

  • groupId: 公司或组织域名的倒序, 通常也会加上项目名称代表公司或组织开发的一个项目,如com.atguigu.maven
  • artifactId: 一个项目或者是项目下的一个模块的名称,将来作为Maven工程的工程名,如pro01-atguigu-maven
  • version: 当前模块的版本号,根据自己的需要设定 , 如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{
	@Test
	public 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>

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

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

相关文章

android 固定进度环形刷新效果

android 固定进度无限旋转的环形效果 效果图 Activity 中使用 val rotation: ObjectAnimator ObjectAnimator.ofFloat(progressBar, "rotation", 0f, 360f) rotation.duration 000 // 旋转持续时间为2秒 rotation.repeatCount ObjectAnimator.INFINITE // 设置为…

Mybatis 实现简单增删改查

目录 前言 一、Mybatis是什么 二、配置Mybatis环境 三、创建数据库和表 四、添加业务代码 4.1、添加实体类 4.2、添加mapper接口 4.3、添加实现接口方法的xml文件 五、简单的增删改查操作及单元测试 5.1、单元测试 单元测试具体步骤&#xff1a; 单元测试如何才能不污…

Everest Group发布《2023年RPA供应商评估报告》:2家中国厂商持续上榜

近日&#xff0c;全球知名信息咨询机构Everest Group发布了《2023年RPA供应商评估报告》&#xff0c;分析了全球 RPA 格局和 25 家技术提供商在几个关键维度上的动态变化&#xff0c;包括客户数量、同比增长、客户对价值和满意度的反馈以及公司的行业和企业规模细分覆盖范围等。…

SAP MM学习笔记35 - 请求书照合中的差额处理(发票扣减,受入)

SAP中&#xff0c;请求书照合之后&#xff0c;发现不一致&#xff0c;就会支付保留。 支付保留&#xff0c;可以参考如下文章。 SAP MM学习笔记34 - 请求书照合中的支付保留&#xff08;发票冻结&#xff09;_东京老树根的博客-CSDN博客 即使支付保留之后暂时不付钱&#xff…

消防建筑防火3d实景漫游展示方案及特点

随着科技的不断发展&#xff0c;3D线上展厅已经成为了展示产品和宣传品牌的重要方式之一。在火灾隐患排查领域&#xff0c;3D线上展厅也有着广泛的应用。相比于传统的火灾隐患排查方式&#xff0c;3D线上展厅突破了许多局限&#xff0c;具有以下优势&#xff1a; 众所周知&…

微调Yolov8动物姿势估计模型

本文主要以狗的姿势估计为例,展示如何对当下流行的YOLOv8姿势模型进行Fine-tuning,并附录完整代码。 动物姿势估计是计算机视觉领域的一个研究方向,它是人工智能的一个子领域,专注于自动检测和分析图像或视频中动物的姿势和位置。其目标是确定一个或多个动物身体部位的空间…

EMNLP 2023 录用论文公布,速看NLP各领域最新SOTA方案

EMNLP 2023 近日公布了录用论文。 开始前以防有同学不了解这个会议&#xff0c;先简单介绍介绍&#xff1a;EMNLP 是NLP 四大顶会之一&#xff0c;ACL大家应该都很熟吧&#xff0c;EMNLP就是由 ACL 下属的SIGDAT小组主办的NLP领域顶级国际会议&#xff0c;一年举办一次。相较于…

高德地图选择点位改变图标

一.循环渲染点位 如图所示&#xff0c;紫色点位为动态循环点位 首先&#xff0c;我们请求完接口&#xff0c;返回点位 这里是全部代码 下方有拆分讲解 this.map.remove(this.marks) this.marks [] this.map.plugin([AMap.PlaceSearch], () > {var PlaceSearchOptions …

echarts一些配置项的使用

前言:我是自己最近写项目用到的,我做个整理; 一. 基本使用 1.具有大小(宽高)的div ,id唯一; 例如: <div id"crewEchart"></div> 2.在项目中引入: import * as echarts from "echarts"; 3.写一个关于他的方法,在mounted的时候调用: moun…

好用的爬取静态页面谷歌浏览器工具:Save All Resources

说明 该插件可以下载网页中的所有资源 使用方法

1513:受欢迎的牛(DFStarjan强连通分量)

信息学奥赛一本通&#xff08;C版&#xff09;在线评测系统 解析&#xff1a; tarjan算法&#xff0c;将有向图缩点&#xff0c;转换为拓扑图&#xff0c;并且统计出度为0的强连通分量&#xff1b; 如果这样的强连通分量只有一个&#xff0c;那么答案即为这个强连通分量中点的个…

fatal:Could not read from remote repository解决方法

Linux服务器如何连接GitHub&#xff1f; 生成SSH密钥 ssh-keygen -C “邮箱” -t rsa 存放位置一般是/root/.ssh/id_rsa 登录个人github&#xff0c;添加客户端生成的公钥 打开Settings&#xff0c;点击SSH and GPG keys&#xff0c;点击New SSH Key。Key中粘贴id_rsa.pub…

AutoGPT:让 AI 帮你完成任务事情 | 开源日报 No.54

Significant-Gravitas/AutoGPT Stars: 150.4k License: MIT AutoGPT 是开源 AI 代理生态系统的核心工具包。它采用模块化和可扩展的框架&#xff0c;使您能够专注于以下方面&#xff1a; 构建 - 为惊人之作打下基础。测试 - 将您的代理调整到完美状态。查看 - 观察进展成果呈…

2023年中国数据库一体机行业现状分析:随着IT发展,需求量增加[图]

数据库一体机服务器特指将数据库软件与标准硬件相结合的产物&#xff0c;其一般集数据处理、数据传输、数据存储3方面于一体&#xff0c;通过采用并行处理架构显著增加数据处理能力、可线性或准线性扩展的数据存储能力以及数据处理与数据存储之间的数据带宽&#xff0c;实现数据…

03 | Defining Query Methods 的命名语法与参数

Spring Data JPA 的最大特色是利用方法名定义查询方法&#xff08;Defining Query Methods&#xff09;来做 CRUD 操作&#xff0c;这一课时我将围绕这个内容来详细讲解。 在工作中&#xff0c;你是否经常为方法名的语义、命名规范而发愁&#xff1f;是否要为不同的查询条件写…

大模型微调学习

用好大模型的层次&#xff1a;1. 提示词工程(prompt engineering); 2. 大模型微调(fine tuning)为什么要对大模型微调&#xff1a; 1. 大模型预训练成本非常高&#xff1b; 2. 如果prompt engineering的效果达不到要求&#xff0c;企业又有比较好的自有数据&#xff0c;能够通过…

IOS17 轻松签全能签还能不能用?多开能否使用?升级后微信底栏消失怎么办?BY:后厂村路灯

从iphone15还没出就有小伙伴们追着问&#xff0c; 到现在也有人一直再问iOS17能不能用&#xff0c;看来换手机的人很多呀。 这里统一回答一下&#xff1a;“iOS17苹果签名可以用&#xff0c;多开也可以用”但是还是有些地方注意。 如果你是16系统直接升级刀17就可以&#xff…

20.1CubeMx配置FMC控制SDRAM【W9825G6KH-6】

本文使用stm32h723zgt6的fmc驱动sdram&#xff0c;实现内存扩展 sdram型号W9825G6KH-6 原理图&#xff1a; MCU引脚与SDRAM对应关系 引脚说明&#xff1a; SDRAM引脚&#xff1a; DQ[15:0]:数据线&#xff1b;数据位宽16 A[12:0]:地址线&#xff1b;行地址A[0:12]&#xff…

10月13日丨第十六届智慧城市大会《实景三维技术创新与应用》论坛日程抢先看!

第十六届智慧城市大会 智慧城市是数字中国、智慧社会的核心载体&#xff0c;是数字时代城市发展的高级形态。由中国服务贸易协会中国测绘学会、中国遥感委员会主办的第十六届智慧城市大会&#xff0c;将以“数实融合开放创新智引未来为主题&#xff0c;邀请行业主管单位和智慧…

【UE 插件】UE4 虚幻引擎 插件开发(带源码插件打包、无源码插件打包) 有这一篇文章就够了!!!

目录 0 引言1 快速入门1.1 新建插件的前提1.2 创建插件步骤1.3 打包插件 2 无源代码的插件制作3 插件详细介绍3.1 插件的使用方法3.1 UE 预置插件模版3.1.1 空白3.1.2 纯内容3.1.3 编辑器独立窗口3.1.4 编辑器工具栏按钮3.1.5 编辑器模式3.1.6 第三方库3.1.7 蓝图库 3.2 插件中…