【JavaLearn】#(29)Maven引入、Maven项目类型、Maven安装与配置、Maven项目的创建和使用、pom配置文件介绍

1. Maven引入

1.1 传统方式中项目jar包资源的问题

  • 项目中的jar包资源(如JDBC驱动包)需要我们自己从网上下载,然后手动导入到项目中使用

    –> 一旦jar包资源过多,容易造成遗漏,且不好管理

  • 如果有两个项目,A和 B,如果 A需要用到 B中的某些资源,需要我们手动将 B中的资源导出为 jar包或者直接复制源码,然后手动导入到 A项目中

问题:都需要开发人员手动处理

解决:Maven项目资源管理工具

  • 管理(查找、下载、引入等)项目中的第三方jar包资源
  • 将自己项目中的某些资源导出为jar包对外提供服务

注意:Maven只能管理通过Maven工具创建的项目(Maven项目)

1.2 基本原理图

运营管理科技创新孵化平台

1.3 专业术语

  • Maven:项目管理工具
  • Maven插件:给IDE工具集成用的
  • 本地仓库:Maven在本机电脑的硬盘中存储 jar文件的地方
  • 中央仓库:Maven在本地仓库中没有找到对应的资源后会自动的去云仓库中下载,云仓库就是所有的程序员开发好的jar包资源的在线存储仓库(如阿里云)
  • 资源坐标:可以唯一标识一个 jar文件(可以理解为 ID)
    • 资源的路径
    • 资源的版本号
    • 资源的名称

2. Maven的项目类型

  • Java文件:手动创建单个的Java文件,并在该文件中声明对应的功能代码,然后使用 java和 javac命令进行编译和运行
  • Java项目:将处理同一个功能的 Java文件放在一起
  • JavaSE项目:统一Java项目的目录结构体系,让不同的程序员之间沟通方便,由IDE工具帮我们创建(不同 IDE工具创建的项目体系结构不同)
  • JavaEE项目:是一个Web项目,该项目的运行不光需要JDK的支持,还需要服务器容器的支持,由IDE工具帮我们创建(不同 IDE工具创建的项目体系结构不同)

虽然不同的 IDE工具在开发阶段创建的项目体系结构不同,但是在上线阶段,最终运行的代码的项目结构体系是相同的。

  • Maven项目:通过 Maven工具创建的项目
    • POM类型:多模块间互相引用
    • WAR类型:相当于JavaEE项目
    • JAR类型:相当于JavaSE项目

虽然 Maven项目源码的结构体系和JavaSE、JavaEE都不同,但是它们编译后的项目结构体系是一样的,而项目运行的是编译后的内容

3. Maven安装和配置

  • 进入Maven官网

  • 选择对应的版本进行下载,建议选择 apache-maven-***-bin 格式的

    image-20240101154928476

  • 下载后放到合适的位置(虚拟机内的Linux可以通过xftp等工具进行上传)并解压

    Linux解压命令:tar -zxvf apache-maven-3.9.6-bin.tar.gz

  • 进入解压后的文件夹,查看对应的目录结构

    image-20240101161747122

  • 在 conf文件夹下编辑 setting.xml文件(Linux可以使用vim命令),第54行左右,声明本地仓库地址

    image-20240101162207176

  • 然后在第159行左右,配置maven的云仓库地址(此处使用阿里云)

    image-20240101162409306

    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>https://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
    
  • 可以在第218行,再配置下maven的 jdk版本(maven会自动从网上下载对应的jdk)

    image-20240101162815936

    <profile>
        <id>jdk-1.8</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
        </activation>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
        </properties>
    </profile>
    
  • 最后根据个人需要,看是否进行环境变量的配置

    • Windows:在环境变量中,增加 MAVEN_HOME(maven安装目录),然后在PATH下增加:%MAVEN_HOME%/bin

    • Linux:在 /etc/profile 文件中增加:

      export MAVEN_HOME=maven安装目录
      export PATH= P A T H : PATH: PATH:MAVEN_HOME/bin

      然后重新加载配置文件:source /etc/profile

在 IDEA中集成 Maven

4. Maven Project的创建和使用

4.1 Maven的jar类型项目

  • 使用 IDEA(2023.1版本为例),选择New Project,创建一个Maven项目

    image-20240101224613686

  • 点击 Create之后,IDEA会帮我们自动下载并导入依赖,如果没有自动导入,右下角可能有提示,选择“Auto-import”字样的即可

jar 类型项目的结构和特点

image-20240121221313657

  • 相当于之前的JavaSE项目(因此jar项目编译后的项目结构体系,和原有JavaSE项目编译后的结构体系相同)
  • 默认在 test目录下的测试代码不会编译到项目中

4.2 Maven的war类型项目

  • 使用 IDEA创建项目时,在 maven原型处,可以选择 webapp字样的选项

    image-20240121221946792

  • 点击 Create之后,IDEA会帮我们自动下载并导入依赖,如果没有自动导入,右下角可能有提示,选择“Auto-import”字样的即可

war 类型项目的结构和特点

image-20240121222959241

  • 相当于之前的JavaEE项目,完成web项目的开发
  • 项目编译后的结构体系和原有JavaEE项目编译后的结构体系相同(也就是maven的war项目编译后,可以直接在tomcat中使用)

5. Maven项目中 pom配置文件的使用

5.1 pom文件的作用

每个 maven项目默认有一个 pom文件。

pom 文件用来告诉 maven,当前项目中需要使用哪些资源。

我们只需在pom配置文件中,声明需要使用的资源的坐标即可,文件会被 maven自动加载识别。

每次修改 pom后,maven都会根据修改的内容,自动重新加载最新的资源

5.2 pom文件的配置内容

war类型项目的配置文件,jar类型项目的配置文件与之基本相同

<!-- xmlns、xsi:  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/maven-v4_0_0.xsd">

  <!-- 模块的版本 -->
  <modelVersion>4.0.0</modelVersion>

  <!-- 当前项目的资源坐标:给maven查看(主要提供给其他的maven项目来使用) -->
  <groupId>com.lwclick</groupId>
  <artifactId>warDemo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <!-- 此标签用来标识当前项目的"项目类型", 默认为jar -->
  <packaging>war</packaging>

  <!-- 声明 properties标签,对资源的版本号进行统一的管理 -->
  <properties>
    <!-- 自定义标签,声明版本号资源(标签名尽量阅读性比较高) -->
    <junit.version>3.8.1</junit.version>
  </properties>

  <!-- 声明要引入的第三方资源坐标 -->
  <!--  maven会根据坐标先在本地仓库中找,如果本地找不到,则自动从云仓中下载 -->
  <!--  可以在 https://mvnrepository.com/网址 搜索需要的资源坐标  -->
  <dependencies>

    <!-- 声明具体的第三方资源坐标;  一个资源配置一个dependency -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <!-- 使用自定义的标签 -->
      <version>${junit.version}</version>

      <!-- scope标签:用来告诉maven引入的第三方资源的 使用说明
             compile:默认值
                表示当前依赖参与项目的编译、测试、运行阶段,属于强依赖
                打包时,也会打到包内

             test:表示该资源专门给当前项目的测试代码使用,不参与打包

             provided:用于开发、测试阶段,但是不参与打包,运行时由运行的环境来提供对应的资源 -->
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <!-- 打包后的 war包名称 -->
    <finalName>warDemo</finalName>

    <!-- 引入第三方的插件资源 -->
    <plugins>
      <!-- 配置Tomcat插件,只为当前项目服务 -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <!-- 配置 tomcat启动的端口号 -->
          <port>8080</port>
          <!-- 配置项目的访问名称 -->
          <path>/warDemo</path>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

image-20240128165835285

image-20240128170941375

注意

  • 在以前的 JavaEE项目中,IDE会自动的的将 JDK及 tomcat的资源依赖到项目中

  • 而 maven中的 war类型项目,默认是没有引入任何第三方资源的

    因此,想完成最基本的 web开发,需要在 pom中配置最基础的资源坐标:servlet(scope为provided)、jsp(scope为provided)、jstl

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW动态数据交换实现数据通信

LabVIEW动态数据交换实现数据通信 介绍了LabVIEW软件在驱动一般多功能接口卡中的应用。LabVIEW作为一种图形化编程平台&#xff0c;被广泛应用于自动测量系统、工业过程自动化等领域。利用LabVIEW驱动实验室中常用的多功能接口卡&#xff0c;以实现数据采集和分析。 系统主要…

C#算法(11)—求三个点构成圆的圆心坐标和半径

前言 我们在上位机开发领域也经常会碰到根据三个点求出圆的圆心、半径等信息的场景,本文就是详细的介绍如何根据三个点使用C#代码求出三点构成的圆的圆心坐标、圆半径、三点构成的圆弧的角度。 1、3点求圆分析 A、B、C三个点都是圆上的坐标点,过向量AB做中垂线,过向量AC做…

HCIP寒假第十次作业

第一步&#xff0c;给pc配置IP192.268.1.2-192.168.1.4 第二步&#xff0c;在三个交换机上划分vlan [sw1]vlan 3 [sw1]interface e0/0/2 [sw1-Ethernet0/0/2]port link-type access [sw1-Ethernet0/0/2]port default vlan 3 [sw2]vlan 2 lsw2]interface e0/0/2 [sw2…

【c++】构造函数和析构函数

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器…

2024年第一篇博客

这是2024年的第一篇博客&#xff0c;2023年笔者经历了一连串的生活、工作、学习上的转折和调整&#xff0c;跌跌撞撞时光飞逝&#xff0c;转眼间就踏着元旦的钟声步入了2024年&#xff0c;前思后想、辗转反侧、犹豫再三不知道从哪里开始博客新的篇章&#xff0c;这个问题坦诚说…

【Spark系列3】RDD源码解析实战

本文主要讲 1、什么是RDD 2、RDD是如何从数据中构建 一、什么是RDD&#xff1f; RDD&#xff1a;弹性分布式数据集&#xff0c;Resillient Distributed Dataset的缩写。 个人理解&#xff1a;RDD是一个容错的、并行的数据结构&#xff0c;可以让用户显式的将数据存储到磁盘…

嵌入式Linux系统引导过程中的设备驱动加载

大家好&#xff0c;今天给大家介绍**嵌入式Linux系统引导过程中的设备驱动加载&#xff0c;**文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 **在嵌入式Linux系统的引导过程中&#xff0c…

杨占华主任:冠心病,中医好还是西医好

冠心病是一种慢性疾病&#xff0c;治疗时间相对较长&#xff0c;恢复缓慢。一般来说&#xff0c;冠心病患者也面临着巨大的心理压力。选择中药治疗好还是西药治疗好&#xff1f; 冠心病的西医治疗主要包括药物治疗、冠状动脉支架植入和冠状动脉搭桥术。 中医治疗冠心病的主要方…

Open CASCADE学习|读取STEP文件并显示

STEP文件是基于ISO 10303标准创建的三维模型数据交换文件&#xff0c;也称为产品模型数据交换标准&#xff08;Standard Exchange of Product data model&#xff09;。这种文件格式旨在提供一个不依赖具体系统的中性机制&#xff0c;实现产品数据的交换和共享。 STEP文件是一…

OJ_键盘输入问题

题干 c语言实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> #include<map> using namespace std;int main() {//记录每个字母需要花费多少时间map<char, int> inputTime {{a,1},{b,2},{c,3},{d,1},{e,2},{f,3},{g,1},{h,2…

RK3568平台开发系列讲解(Linux系统篇)中断线程化

🚀返回专栏总目录 文章目录 一、什么是中断线程化二、中断线程化接口函数三、使用案例沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是中断线程化 在Linux中,中断线程化(Interrupt Thread)是一种处理中断的方式,它允许将中断处理程序执行的部分移动到一个单…

C51 单片机学习(二):定时器与中断系统

参考 51单片机入门教程 1. 定时器 1.1 定时器定义 51 单片机的定时器属于单片机的内部资源&#xff0c;其电路的连接和运转均在单片机内部完成 C51 单片机学习&#xff08;一&#xff09;&#xff1a;基础外设 讲的都是单片机的 IO 口控制的外设 1.2 定时器作用 用于计时系…

Java算法---递归算法基础介绍

目录 一、递归算法 二、递归算法的典型例子 &#xff08;1&#xff09;阶乘 &#xff08;2&#xff09;二分查找 &#xff08;3&#xff09;冒泡排序 &#xff08;4&#xff09;插入排序 一、递归算法 计算机科学中&#xff0c;递归是一种解决计算问题的方法。其中解决方案…

yum指令——Linux的软件包管理器

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 什么是软件包yum指令1.yum 是什么&#xff1f;2.Linux系统&#xff08;Centos&#xff09;的生态 3.yum的相关操作安装卸载yum的相关操作小结 软件源安…

Python判断语句——布尔类型和比较运算符

一、引言 在Python编程语言中&#xff0c;布尔类型和比较运算符是基础而又至关重要的概念。它们是构建逻辑和决策的核心要素&#xff0c;让程序能够理解“真”与“假”、以及各种数量和值之间的关系。理解并掌握这些概念&#xff0c;对于编写高效、准确的代码至关重要。在本文…

OpenHarmony—仅允许在表达式中使用typeof运算符

规则&#xff1a;arkts-no-type-query 级别&#xff1a;错误 ArkTS仅支持在表达式中使用typeof运算符&#xff0c;不允许使用typeof作为类型。 TypeScript let n1 42; let s1 foo; console.log(typeof n1); // number console.log(typeof s1); // string let n2: typeof …

【极数系列】Flink集成DataSource读取集合数据(07)

文章目录 01 引言02 简介概述03 基于集合读取数据3.1 集合创建数据流3.2 迭代器创建数据流3.3 给定对象创建数据流3.4 迭代并行器创建数据流3.5 基于时间间隔创建数据流3.6 自定义数据流 04 源码实战demo4.1 pom.xml依赖4.2 创建集合数据流作业4.3 运行结果日志 01 引言 源码地…

基于Python 爬虫的房地产数据可视化分析与实现

摘要&#xff1a; 过去&#xff0c;不管是翻阅书籍&#xff0c;还是通过手机&#xff0c;电脑等从互联网上手动点击搜索信息&#xff0c;视野受限&#xff0c;信息面太过于狭窄&#xff0c;且数据量大而杂乱&#xff0c;爆炸式信息的更新速度是快速且不定时的。要想手动获取到海…

OpenAI、斯坦福大学提出Meta-Prompting,有效提升语言模型的性能

为了研究如何提高语言模型的性能&#xff0c;使其更充分有效地输出对于提问的回答&#xff0c;来自斯坦福和 OpenAI 的学者强强联手&#xff0c;通过提出一种名为元提示&#xff08;meta-prompting&#xff09;的方法来深入探索。元提示通过让单个语言模型&#xff08;如 GPT-4…

【JavaScript基础入门】04 JavaScript基础语法(二)

JavaScript基础语法&#xff08;二&#xff09; 目录 JavaScript基础语法&#xff08;二&#xff09;变量变量是什么声明变量变量类型动态类型注释 数字与运算符数字类型算术运算符操作运算符比较运算符逻辑运算符运算符的优先级 变量 变量是什么 在计算机中&#xff0c;数据…