[JAVA]Maven项目标准结构介绍

什么是Maven?

Maven 是一个强大的项目管理和构建自动化工具,在Java开发中,一个项目通常会依赖许多外部的库,比如开发一个Web应用可能需要依赖Servlet APL,Spring框架等,和需要引入大量的Jar包。往往一个Jar包又能引用其他Jar包,这样程序员往往会花费较多的精力在引用Jar包上,而Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar包,它会帮助我们下载所有的Jar,极大提升开发效率。

                                       Maven项目标准结构

1.依赖管理

Maven通过在项目的pom.xml(Project Object Model,项目对象模型)文件中定义依赖项,能够自动从中央仓库(默认是Maven Central)或其他配置的远程仓库下载这些依赖库,并将它们添加到项目的类路径中。

2.项目构建

Maven定义了一个标准化的项目构建生命周期,包括清理,编译,测试,打包,安装和部署等阶段。当执行mvn clean install命令时,Maven首先会执行清理操作,删除之前构建生成的文件(如编译后的.class文件和打包后的.jar或.war文件等),然后进行编译,将.java文件编译成.class文件。

结合运行测试用例,如果测试通过,就将项目打包成指定的格式(如JAR文件用于Java库项目,WAR文件用于Web应用项目),最后将打包后的文件安装到本地仓库,供其他本地项目作为依赖使用

3.项目结构标准化

Maven强制项目遵循一定的目录结构。典型的Maven项目结构包括

  • src/main/java用于存放主要的Java源代码
  • src/main/resources用于存放项目的配置文件(如application.properties等)
  • src/test/java用于存放测试代码
  • src/test/resources用于存放测试相关的配置文件

这种标准化的结构使得开发人员能够更容易地理解和维护项目,同时也方便了各种工具(如集成开发环境)对项目进行解析和操作。

4.创建第一个Maven工程 

  • Java新建Maven工程 

 

  • src下分为了两级目录:main和test
  • main下分为两级目录: java和resources           
  • test下分为一级目录:java

 src/main/java目录

是Maven项目存放主要Java源代码的地方,所以构成项目核心功能的Java类都应该放在这个目录下。比如在一个Web应用程序中,用于处理业务逻辑的服务类(如UserService.java用于处理用户相关的业务操作,如用户注册,登录等),数据访问对象类(如UserDao.java用于与数据库交互,执行SQL查询等)都存放在这里。

src/main/resource目录

是用于存放项目的各种配置文件,资源文件,常见的配置文件如application.properties或者application.yml(在Spring Boot项目中用于配置数据库连接,服务器端口等信息),日志配置文件(如log4j.properties)。资源文件可以是一些静态文件,如图片,HTML模板等(在Web应用中可能会用到)。

src/test/java目录

是用于存放单元测试和集成测试等测试代码。对于src/main/java中的UserService.java类,可以在src/test/java中创建UserServiceTest.java类来编写测试用例,使用JUnit等测试框架来验证UserService类中的方法是否按照预期工作,如测试用户注册方法是否能正确地将用户信息保存到数据库中

src/test/resources目录

存放测试相关的资源文件和配置文件。这些文件是为了辅助测试用例的运行而设置的。例如,如果测试用例需要读取一个特定的测试数据文件(如一个包含用户测试数据的CSV文件),或者需要一个特殊的测试配置文件(如用于模拟特定环境的配置文件),就可以将这些文件放在这个目录中。

target目录

是Maven构建项目后生成的文件存放的目录,在这个目录中,会有编译后的字节码文件(如果是Java项目,src/main/java中的.java文件编译后的.class文件存放在target/classes目录下,src/test/java中的测试代码编译后的.class文件存放在target/test-classes目录下),打包后的文件(如JAR文件或WAR文件)等。

pom.xml文件(项目根目录下)这是Maven项目的核心配置文件,它定义了项目的基本信息(如项目名称,版本号,打包方式等),项目的依赖关系,构建配置。

                                      Maven项目标准结构

Maven依赖管理

  • Maven利用dependency(依赖)自动下载,管理第三方Jar
  • 在pom.xml文件中配置项目依赖的第三方组件
  • maven自动将依赖从中央仓库下载至本地仓库,并在工程中引用 
  • 在pom.xml中配置,增加dependency标签
<dependency><groupld>com.belerweb</groupld><artifactld>pinyin4j</artifactld><version>2.5.5<version>
</dependency>

Groupld:机构或者团体的英文,采用“逆向域名”形式书写

Artifactld:项目名称,说明其用途,例如:cms(内容管理系统),oa(办公自动化模块)...

Version:版本号,一般采用“版本+单词”形式,例如:1.0.0.RELEASE

这三个标签被称为Maven的依赖坐标系,通过Maven坐标系提供的信息我们知道从中央仓库下载的何种厂商的组件和版本

譬如我们的项目经理希望我们开发一个将汉字转化为拼音的程序, 我们可以通过开源中国,GitHub等渠道去搜索能实现该功能的组件,但是我们现在希望利用Maven自动的进行加载,我们应该怎样查询?

打开网址 search.maven.org,搜索pinyin4j组件

在搜索页搜索pinyin4j

选择版本

复制该版本组件的依赖坐标系到pom.xml

如果文本显示红色的话 需要点击下面这个刷新符号进行下载 待文字变黑体验证是否下载成功

如何验证Maven的依赖声明jar包下载成功了呢?如果IDEA界面的左侧出现下面扩展的库则表明下载成功

 出现以上的jar包,说明远程下载后被当前工程进行依赖了,在实际项目开发时,依赖管理就是通过Maven中央仓库提供的文本放到pom.xml中,通过刷新加载后自动的进行下载,下载完以后引入当前工程我们便可以使用它。

验证是否能成功使用:

1.新建名为Pinyin的类

import net.sourceforge.pinyin4j.PinyinHelper;
/*** 汉字转拼音*/
public class Pinyin {public static void main(String[] args) {char c = '嘿';//pinyin4j提供的核心类 调用它的静态方法(得到某一个字符的所有拼音)String[] arr = PinyinHelper.toHanyuPinyinStringArray(c);//增强型的for循环遍历字符串数组arr,如果arr不为空,循环会依次取出数组中的每个拼音字符串,输入到控制台中for (String py : arr) {System.out.println(py);}}
}

 运行结果  代码中的字符拼音被正确的显示出来

以上操作利用在网页上获取到的pinyin4j组件,将得到的依赖加入到Maven中,实现了一个简单的将汉字转化为拼音的功能。

如果我们将版本号改为2.5.0,重新加载以后,虽然中央仓库有这个版本但是它并没有自动下载,出现这种问题是因为默认的中央仓库是部署在国外

如何解决这个问题呢?我们需要增加国内阿里云提供的Maven镜像仓库,将从访问国外服务器转为

国内直接下载,访问网站maven.aliyun.com阿里巴巴国内Maven镜像仓库,通过国内的服务器提高下载速度。

定位到public公共仓库,复制仓库地址

回到IDEA编译器,将仓库地址复制到pom.xml

然后修改过的版本就能够正常进行下载

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

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

相关文章

Ansys EMC Plus:MHARNESS 串扰演示

Ansys EMC Plus 是一款强大的工具&#xff0c;专门用于分析电磁场及其影响&#xff0c;涵盖电磁兼容性和雷电效应分析等领域。 在本演示中&#xff0c;我们将探讨建立 MHARNESS 仿真的基础知识。这包括构建基本电缆线束、创建 MHARNESS 源和设置 MHARNESS 探针的过程。 概述 …

星环大数据平台--TDH部署

1.1 准备一台虚拟机 正常安装一台新的虚拟机&#xff0c; 内存16G&#xff0c;cpu8核&#xff0c;硬盘50G 1.2 安装前系统配置改动 修改/etc/hosts文件&#xff0c;确保hostname该文件包含节点的hostname和IP地址的映射关系列表。 hostname由数字、小写字母或“-”组成&am…

B+树与聚簇索引以及非聚簇索引的关系

B树、聚簇索引和非聚簇索引是数据库系统中非常重要的概念&#xff0c;它们共同决定了数据的存储和查询效率。本文将详细解释B树的结构&#xff0c;以及聚簇索引和非聚簇索引的区别和联系&#xff0c;使读者能够更好地理解这些概念。 1.B树简介 B树是一种多路平衡树&#xff0c;…

IoTDB 与 HBase 对比详解:架构、功能与性能

五大方向&#xff0c;洞悉 IoTDB 与 HBase 的详尽对比&#xff01; 在物联网&#xff08;IoT&#xff09;领域&#xff0c;数据的采集、存储和分析是确保系统高效运行和决策准确的重要环节。随着物联网设备数量的增加和数据量的爆炸式增长&#xff0c;开发者和决策者们需要选择…

了解RSA和DSA的联系和区别

引言 在信息安全领域&#xff0c;加密算法起着至关重要的作用。RSA&#xff08;Rivest-Shamir-Adleman&#xff09;和DSA&#xff08;Digital Signature Algorithm&#xff09;是两种常见的公钥加密算法&#xff0c;它们在网络安全领域具有重要的应用价值。本文将对比分析RSA和…

项目管理体系文档,代码评审规范文档,代码审查,代码走查标准化文档(word原件)

1.代码评审(Code Review)简介 1.1Code Review的目的 1.2Code Review的前提 1.3.Code Review需要做什么 1.3.1完整性检查&#xff08;Completeness&#xff09; 1.3.2一致性检查&#xff08;Consistency&#xff09; 1.3.3正确性检查&#xff08;Correctness&#xff09; …

前端算法:树(力扣144、94、145、100、104题)

目录 一、树&#xff08;Tree&#xff09; 1.介绍 2.特点 3.基本术语 4.种类 二、树之操作 1.遍历 前序遍历&#xff08;Pre-order Traversal&#xff09;&#xff1a;访问根节点 -> 遍历左子树 -> 遍历右子树。 中序遍历&#xff08;In-order Traversal&#xf…

Webserver(5.3)线程池实现

目录 线程池locker.hthreadpool.h 线程池 相比于动态地创建子线程&#xff0c;选择一个已经存在的子线程的代价显然要小得多。至于主线程选择哪个子线程来为新任务服务&#xff0c;有多种方式&#xff1a; 主线程使用某种算法来主动选择子线程。最简单、最常用的算法是随机算…

02_ElementUI

一.前端工程化 1.1 概述 前端工程化是使用软件工程的方法来单独解决前端的开发流程 中模块化、组件化、规范化、自动化的问题,其主要目的为了 提高效率和降低成本。 1.2 NodeJS的安装 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环 境&#xff0c;可以使 JavaS…

从无音响Windows 端到 有音响macOS 端实时音频传输播放

以下是从 Windows 端到 macOS 端传输音频的优化方案&#xff0c;基于上述链接中的思路进行调整&#xff1a; Windows 端操作 安装必要软件 安装 Python&#xff08;确保版本兼容且已正确配置环境变量&#xff09;。安装 PyAudio 库&#xff0c;可通过 pip install pyaudio 命令…

SpringBoot实现的企业资产管理系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

建筑行业智慧知识库的搭建与运用

一、引言 在建筑领域&#xff0c;知识管理是企业持续发展和提升竞争力的关键所在。智慧知识库的构建&#xff0c;不仅能够促进知识的有效传递与共享&#xff0c;还能为项目管理和决策提供有力支持。本文将重点探讨建筑行业智慧知识库构建的价值、实践路径以及需要注意的关键点…

开源 - Ideal库 - 常用时间转换扩展方法(二)

书接上回&#xff0c;我们继续来分享一些关于时间转换的常用扩展方法。 01、时间转日期时间 TimeOnly 该方式是把TimeOnly类型转为DateTime类型&#xff0c;其中日期部分使用系统当前日期&#xff0c;时间部分则使用TimeOnly&#xff0c;具体代码如下&#xff1a; //时间转日…

29.7 编译运行,读取日志配置看图

本节重点介绍 : 编译运行&#xff0c;配置采集和大盘 编译二进制 打包后编译 go build -o log2metrics main.go修改配置文件 http_addr: 0.0.0.0:8087 log_level: INFOlog_strategy:- metric_name: log_var_log_messages_level_totalmetric_help: /var/log/messages中的日…

国产化浪潮下,高科技企业如何选择合适的国产ftp软件方案?

高科技企业在数字化转型和创新发展中&#xff0c;数据资产扮演着越来越重要的角色。在研发过程中产生的实验数据、设计文档、测试结果等&#xff0c;专利、商标、版权之类的创新成果等&#xff0c;随着信息量急剧增加和安全威胁的复杂化&#xff0c;传统的FTP软件已经不能满足这…

SQL EXISTS谓词

谓词时返回值为真值&#xff08;true、false或unknown&#xff09;的函数。EXISTS与其他谓词不同&#xff0c;它接受的参数是行的集合。 输入值为一行的谓词叫做“一阶谓词”&#xff08;例如>、<、 及 LIKE等&#xff09;&#xff1b;输入值为行的集合的谓词叫做“二阶…

[产品管理-59]:项目组合中产品或项目的类型分类: 平台类、支持改进类、衍生类、突破类

目录 一、概述 1、平台型项目&#xff1a;平台产品 2、支持性项目&#xff1a;现有产品的改进&#xff0c;还是现有产品&#xff0c;只不过性能、效率提升。 3、衍生型项目&#xff1a;衍生出来的新产品&#xff0c;不同于现有产品&#xff0c;但与现有产品有关联 4、突破…

Jmeter的安装和使用

使用场景&#xff1a; 我们需要对某个接口进行压力测试&#xff0c;在多线程环境下&#xff0c;服务的抗压能力&#xff1b;还有就是关于分布式开发需要测试多线程环境下数据的唯一性。 解决方案: jmeter官网连接&#xff1a;Apache JMeter - Apache JMeter™ 下载安装包 配…

一文学习Android中的Property

在 Android 系统中&#xff0c;Property 是一种全局的键值对存储系统&#xff0c;允许不同组件和进程间以轻量级的方式进行数据传递。它主要用于系统配置、状态标识等场景&#xff0c;使得不同进程能够通过属性的设置或获取来通信。property 的核心特性是快速、高效&#xff0…

aosp15系统窗口闪屏原生bug-dim图层相关-你会修改吗?

背景 近期各个大厂已经开始准备aosp15的系统rom适配工作了&#xff0c;应该是想2025年初开发发布相关的新机型&#xff0c;所以慢慢的我们也要开始适应aosp15版本的相关问题的修改和研究哈。 近期就有相关学员朋友在做android15相关的dialog开发时候&#xff0c;发现了一个严…