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

news2024/11/14 13:48:46

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

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

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

相关文章

Android studio protobuf配置

第一步&#xff1a; id com.google.protobuf version 0.9.3 apply false 第二步&#xff1a; apply plugin: com.google.protobuf sourceSets {main {proto {srcDir src/main/protos}} }protobuf {protoc {artifact com.google.protobuf:protoc:3.19.2}generateProtoTasks …

JVM性能分析工具——Arthas及火焰图的使用

Arthas的使用 Arthas常用命令Arthas的安装Linux压测工具Apache Bench安装火焰图的使用火焰图如何分析火焰图的互动 Arthas常用命令 help &#xff1a;查看所有命令dashboard &#xff1a;仪表板&#xff0c;查看线程的CPU信息等heapdump &#xff1a;不同类对象占用内存比重&a…

windows pm2 执行 npm脚本或执行yarn脚本遇到的问题及解决方案

环境&#xff1a; 在windows上启动终端来运行一个项目&#xff1b;通过指令npm run start来启动&#xff0c;但是将终端一关&#xff0c;就无法访问了&#xff0c;所以想到用pm2来管理 1. 全局安装pm2 npm i pm2 -g2. 在项目根目录执行指令(大部分兄弟的错误使用方法) pm2 st…

微服务—Docker

目录 初识Docker Docker与虚拟机的区别 镜像与容器 Docker架构 常见Docker命令 镜像命令 容器命令 数据卷挂载 直接挂载 初识Docker 在项目部署的过程中&#xff0c;如果出现大型项目组件较多&#xff0c;运行环境也较为复杂的情况&#xff0c;部署时会碰到一些问题&…

Linux ---- Shell编程三剑客之AWK

一、awk处理文本工具 1、awk概述 awk 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。AWK是专门为文本处理设计的编程语言&#xff0c;也是行处理软件&#xff0c;通常用于扫描、过滤、统计汇总工作。用来处理列。数据可以来自标准输入也可以是管道或文件。…

EBC金融英国CEO:高波动性周期下,如何寻找市场的稳定性?

利率主导的市场&#xff0c;将在2024年延续。目前&#xff0c;固收市场对于降息的定价&#xff0c;正通过利率传导至不同资产中。尽管市场迫切利用通胀去佐证降息&#xff0c;但各国央行仍囿于通胀目标的政策桎梏。政策和市场预期的博弈将继续牵动市场脉搏&#xff0c;引发价格…

酷开科技依托酷开系统新剧热播,引领潮流风向

随着科技的不断发展&#xff0c;智能电视已经成为了家庭娱乐的主流&#xff0c;是消费者居家休闲放松的好帮手。其中&#xff0c;作为国内智能电视操作系统领军者的酷开系统&#xff0c;一直致力于为消费者提供丰富的内容和贴心的体验。近日&#xff0c;酷开系统新剧热播&#…

数组常见算法题-评委打分

签名&#xff1a;但行好事&#xff0c;莫问前程。 文章目录 前言一、计算数组的最大值、最小值、总和、均值二、评委打分总结 前言 学习记录一下数组常见的算法题。 一、计算数组的最大值、最小值、总和、均值 需求&#xff1a;定义一个int型的数组&#xff0c;分别赋予随机两…

Tensorflow2.0笔记 - where,scatter_nd, meshgrid相关操作

本笔记记录tf.where进行元素位置查找&#xff0c;scatter_nd用于指派元素到tensor的特定位置&#xff0c;meshgrid用作绘图的相关操作。 import tensorflow as tf import numpy as np import matplotlib.pyplot as plttf.__version__#where操作查找元素位置 #输入的tensor是Tr…

检测头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

左图:ResNet 的一个模块。右图:复杂度大致相同的 ResNeXt 模块,基数(cardinality)为32。图中的一层表示为(输入通道数,滤波器大小,输出通道数)。 1. 思路 ResNeXt是微软研究院在2017年发表的成果。它的设计灵感来自于经典的ResNet模型,但ResNeXt有个特别之处:它采用…

springboot 文件差异化对比以及可视化展示

maven依赖 <!-- 文件内容对比--><dependency><groupId>io.github.java-diff-utils</groupId><artifactId>java-diff-utils</artifactId><version>4.11</version></dependency>创建Diff 工具类 package com.system.ut…

大路灯和台灯哪个更适合学生?五款适合学生的大路灯分享

根据国家卫健委在上个月公布的数据&#xff0c;我国儿童青少年总体近视率为52.7%&#xff0c;其中&#xff0c;小学生为35.6%&#xff0c;初中生为71.1%&#xff0c;高中生为80.5%。随着这个数据公布以来&#xff0c;许多家长开始紧张自家孩子的近视问题&#xff0c;不少家长为…

Vue学习Element-ui

声明&#xff1a;本文来源于黑马程序员PDF讲义 Ajax 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是 互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2…

【FAS Survey】《Deep learning for face anti-spoofing: A Survey》

PAMI-2022 最新成果&#xff1a;https://github.com/ZitongYu/DeepFAS 文章目录 1 Introduction & Background1.1 Face Spoofing Attacks1.2 Datasets for Face Anti-Spoofing1.3 Evaluation Metrics1.4 Evaluation Protocols 2 Deep FAS with Commercial RGB Camera2.1 H…

幻兽帕鲁服务器游戏怎么升级版本?

幻兽帕鲁服务器游戏怎么升级版本&#xff1f;自建幻兽帕鲁服务器进入Palworld游戏提示“您正尝试加入的比赛正在运行不兼容的游戏版本&#xff0c;请尝试升级游戏版本”什么原因&#xff1f;这是由于你的客户端和幻兽帕鲁服务器版本不匹配&#xff0c;如何解决&#xff1f;更新…

pinctrl/gpio子系统(1)-pinctrl子系统介绍及驱动源码分析

1.简介 在如今的驱动开发工作中&#xff0c;实际上已经很少去对着寄存器手册进行驱动开发了&#xff0c;一般板子拿到手&#xff0c;已经有原厂的驱动开发工程师&#xff0c;在gpio子系统、pinctrl子系统中将自家芯片的引脚适配好了。 我们直接基于设备树已配置好的寄存器值&a…

jsonpath相关---JSONPath - 用于 JSON 的 XPath

一.简介 XML 的一个经常强调的优点是提供了大量工具来分析、转换和有选择地从 XML 文档中提取数据。XPath 就是这些强大的工具之一。 现在是时候想知道&#xff0c;是否需要像 XPath4JSON 这样的东西&#xff0c;以及它可以解决哪些问题。 无需特殊脚本&#xff0c;即可以交…

阿赵UE学习笔记——14、LOD

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法。这次看看虚幻引擎的Level Of Detail(LOD)的用法。 一、测试场景准备 用植物系统&#xff0c;在地形上面刷了好多草&#xff1a; 这个时候看一下网格&#xff0c;会发现网格比较多和密集。 …

中国的茶文化:历史、传统与生活

中国的茶文化&#xff1a;历史、传统与生活 一、引言 茶&#xff0c;这一神奇而古老的饮品&#xff0c;与中国的历史、文化和生活方式紧密相连。中国的茶文化&#xff0c;源远流长&#xff0c;博大精深&#xff0c;是中华文明的重要组成部分。它不仅是一种饮料&#xff0c;更是…

阿里云推出 3.x Java 探针,解锁应用观测与治理的全新姿势

作者&#xff1a;张铭辉、泮圣伟 前言 随着春节大促即将到来&#xff0c;为了确保线上业务高效稳定地运行&#xff0c;电商企业大多会对旗下关键业务应用进行多轮测试。通过模拟线上较高流量的请求&#xff0c;来观察服务性能的实际表现。以某企业的业务测试报告举例&#xf…