[SSM]Maven详解

news2025/2/9 9:09:22

目录

Maven 自动化构建工具

Maven简介

Maven的核心概念

maven约定的目录结构

仓库

POM文件

生命周期、命令、插件

Maven在IDEA中的应用

IDEA集成maven

IDEA创建Maven版java工程

IDEA创建Maven版web工程

IDEA中导入Maven工程(module)

依赖管理

Maven常用设置


maven相关资料放入评论区,需要的自提!

Maven 自动化构建工具

Maven简介

  • 完成一个java项目,需要做哪些工作?

    1. 分析项目要做什么,知道项目由哪些组成部分。

    2. 设计项目,通过哪些步骤,使用哪些技术,需要多少人,多长时间......

    3. 组件团队,招人,购置设备,服务器,软件,笔记本......

    4. 开发人员编写代码。开发人员需要测试自己的代码,重复多次的工作。

    5. 测试人员测设项目功能是否符合要求。过程:测试开发人员提交代码,如果测试有问题,需要开发人员修改,开发人员再提交代码给测试人员,测试人员再测试代码,如果还有问题,再提交给开发人员,开发人员再提交,再测试......直到测试代码通过。

  • 传统开发项目的问题(没有使用maven管理的项目)

    • 很多模块之间由联系,手动管理关系比较繁琐。

    • 需要很多第三方功能,需要很多jar文件,需要手工从网络中获取各个jar文件。

    • 需要管理jar的版本。

    • 管理jar文件之间的依赖,如果项目中的a.jar文件需要使用b.jar文件中的类,必须首先获取到b.jar文件才可以使用a.jar。a.jar需要b.jar这个关系叫做依赖。如果你的项目要使用mysql的驱动,则叫做项目依赖mysql驱动。

  • 改进项目的开发和管理需要使用maven

    • maven可以管理jar文件

    • 自动下载jar和他的文档、源代码

    • 管理jar之间的依赖,a.jar需要b.jar,maven会自动下载b.jar

    • 管理你需要的jar的版本

    • 帮你编译程序,把java编译为class

    • 帮你测试你的代码是否正确

    • 帮你打包文件,形成jar文件,或者war文件

    • 帮你部署项目

  • 项目的构建,项目的构建是指将源代码和相关资源文件转换为可执行的应用程序或库的过程。maven支持的构建包括有:

    1. 清理:把之前项目编译的东西删除掉,为新的编译代码做准备。

    2. 编译:把程序源代码编译为执行代码(将Java文件编译为class文件),maven可以同时把成千上万的文件编译为class文件,javac一次只能编译一个文件。

    3. 测试:maven可以执行测试程序代码,验证你的功能是否正确。maven可以同时执行多个测试代码,同时测试很多功能。

    4. 报告:生成测试结果文件。

    5. 打包:把你的项目中所有的class文件、配置文件等所有的资源放到一个压缩文件中。通常java程序的压缩文件的扩展名是.jar,web应用的压缩文件的扩展名是.war。

    6. 安装:将打包生成的文件jar、war安装到本地仓库。

    7. 部署:把程序安装好可以执行。

  • maven核心概念

    • POM(项目对象模型):一个文件,名称是pom.xml。控制maven构建项目的过程,管理jar依赖。maven把一个项目一个模型使用。

    • 约定目录结构:maven项目的目录和文件的位置都是规定的。

    • 坐标:是一个唯一的字符串,用来表示资源的。

    • 依赖管理:管理项目可以使用的jar文件。

    • 仓库管理(了解):资源存放的位置。

    • 生命周期(了解):maven工具构建项目的过程。

    • 插件和目标(了解):执行maven构建的时候用的插件。

    • 继承

    • 聚合

  • 学习maven的时候,是先难后易的。

    • 难:使用maven的命令,命令不容易记忆。

    • 易:再idea中可以直接使用maven,代替命令。

  • maven工具的安装和配置

    1. 从maven官网下载maven的安装包 apache-maven-3.3.9-bin.zip

    2. 解压安装包到一个非中文目录

      • bin:执行程序的目录,主要是mvn.cmd

      • conf:maven工具本身的配置文件 settings.xml

    3. 配置环境变量:在系统的环境变量中,指定一个M2_HOME的名称, 指定它的值是maven工具安装目录,bin之前的目录。

      M2_HOME=D:\maven_work\apache-maven-3.3.9

      再把M2_HOME加入到path之中,在所有路径之前加入 %M2_HOME%\bin

    4. 验证,新的命令行里,执行C:\Users\Administrator>mvn -v

      注意:需要配置JAVA_HOME,指定JDK路径。

      出现如下内容,maven安装,配置正确。

      Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
      Maven home: D:\maven_work\apache-maven-3.3.9
      Java version: 1.8.0_131, vendor: Oracle Corporation
      Java home: D:\java\JDK\jre
      Default locale: zh_CN, platform encoding: GBK
      OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

Maven的核心概念

maven约定的目录结构

约定是大家都要遵循的一个规则

Hello     根目录,也就是项目名
|---src   源代码
|---|---main   放置主程序的java代码和配置文件
|---|---|---java    程序包和包中的java文件
|---|---|---resources   java程序中要使用的配置文件
|---|---test    放置测试程序代码和文件的(可以没有)
|---|---|---java    测试程序包和包中的java文件
|---|---|---resources   测试java程序中要使用的配置文件
|---pom.xml maven的核心文件(maven项目必须有)
  • 第一个maven工程

    1. 在某个目录中创建文件夹Hello

    2. 在Hello中创建子文件

    3. 拷贝pom.xml到Hello目录和src是同级的

    4. 进入src目录,创建main,test目录

    5. 进入main目录,创建java,resources目录

    6. 进入java目录,创建目录 com/bjpowernode/HelloMaven.java文件

    7. 在HelloMaven文件中输入以下代码

      package com.bjpowernode;
      ​
      public class HelloMaven {
          public int add(int n1,int n2){
              return n1+n2;
          }
      ​
          public static void main(String[] args) {
              HelloMaven helloMaven = new HelloMaven();
              int res = helloMaven.add(10, 20);
              System.out.printf("10+20="+res);
          }
      }
       
    8. 进入到Hello目录中,在终端执行 mvn compile

    9. 进入到 target/classes 目录,执行 java com.bjpowernode.HelloMaven,出现以下截图证明运行成功。

  • 疑问: mvn compile 编译 src/main目录下的所有java文件。

    • 为什么要下载

      • maven工具执行的操作需要很多插件(java类的jar文件)完成的。

    • 下载了什么东西

      • jar文件叫做插件,插件是完成某些功能的。

    • 下载的东西存放到哪里了

      • 默认仓库(本机仓库):C:\Users\Administrator\.m2\repository

  • 执行mvn compile,结果是在项目的根目录下生成target目录(结果目录),maven编译的java程序,最后的class文件都放在target目录中。

  • 设置本机存放资源的目录位置(设置本地仓库)

    1. 修改maven的配置文件,进入D:\maven_work\apache-maven-3.3.9\conf,备份settings.xml文件。

    2. 打开settings.xml文件,修改 <localRepository> 指定的目录(不要使用中文目录)

      D:\work\maven_work\maven_repository

仓库

  • 仓库是是存放各种东西的,存放maven使用的jar和项目中使用的jar。

  • 仓库的分类

    • 本地仓库:个人计算机的文件夹,存放各种jar。

    • 远程仓库:在互联网上的,使用网路才能使用的仓库。

      • 中央仓库:最权威的,所有开发人员都共享使用的一个集中的仓库。中央仓库的地址:https://repo.maven.apache.org

      • 中央仓库的镜像:中央仓库的备份,在各大洲,重要的城市镜像。

      • 私服:在公司内部,在局域网中使用的,不是对外使用的。

  • 仓库的使用,maven仓库的使用不需要认为参与。

    开发人员需要使用mysql驱动--->maven首先查本地仓库--->私服--->镜像--->中央仓库

 

POM文件

即Project Object Modeal项目对象模型。Maven把一个项目的结构和内容抽象成一个模型,在xml中进行声明,以方便进行构建和描述,pom.xml是Maven的灵魂。所以,maven环境搭建好之后,所有的操作和学习都是关于maven的。

 

 

  • 坐标:唯一值,在互联网中唯一标识一个项目的

    <groupId>公司域名的倒写</groupId>
    <artifactId>自定义项目名称</artifactId>
    <version>自定义版本号</version>
     https://mvnrepository.com/ 是搜索用到的中央仓库,使用groupId或者artifactId作为搜索条件。

  • packaging:打包后压缩文件的扩展名,默认是jar,web应用是war。packaging可以不写,默认是jar。

  • 依赖:dependencies和dependency,相当于java代码中的import。

    <dependencies>
        <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.19</version>
    </dependency>
    </dependencies>
  • properties:设置属性

  • build:maven在进行项目的构建时,配置信息,例如指定编译java代码使用的jdk的版本等。

生命周期、命令、插件

  • maven的生命周期就是maven构建项目的过程,清理、编译、测试、报告、打包、安装、部署。

  • maven的命令:maven独立使用,通过命令完成maven的生命周期的执行(清理、编译、测试......)

    mvn clean 清理(会删除原来编译和测试的目录,即target目录,但是已经install到仓库里的包不会删除)
    mvn compile 编译主程序(会在当前目录下生成一个target,里面存放编译主程序之后生成的字节码文件)
    mvn test-compile 编译测试程序(会在当前目录下生成一个target,里面存放编译测试程序之后生成的字节码文件)
    mvn test 测试(会编译、编译测试、生成一个目录surefire-reports,保存测试结果)
    mvn package 打包主程序(会编译、编译测试、测试,并且按照pom.xml配置把主程序打包生成jar包或者war包)
    mvn install 安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
    mvn deploy 部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到 web 容器中)。

    注意:执行以上命令必须在命令行进入 pom.xml 所在目录!

  • maven的插件:maven命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类。

    <!-- 控制配置maven构建项目的参数设置,设置jdk的版本-->
    <build> 
        <!-- 配置插件-->
     <plugins> 
         <!-- 配置具体的插件-->
        <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
            <!-- 插件的名称-->
        <artifactId>maven-compiler-plugin</artifactId> 
            <!-- 插件的版本-->
        <version>3.8.1</version> 
            <!--配置插件的信息-->
        <configuration> 
                <!-- 告诉maven 我们写的代码实在jdk1.8上编译的-->
            <source>1.8</source> 
                <!-- 我们的程序应该运行在jdk1.8上-->
            <target>1.8</target> 
        </configuration> 
        </plugin> 
     </plugins> 
    </build>

  1. 单元测试:用的是junit,junit是一个专门测试的框架(工具)。junit测试的是类中的方法,每一个方法都是独立测试的。方法是测试的基本单位。

  2. 使用步骤

    1. 加入依赖,在pom.xml加入单元测试依赖

      <!-- 单元测试 -->
      		 <dependency>
      			<groupId>junit</groupId>
      			<artifactId>junit</artifactId>
      			<version>4.11</version>
      			<scope>test</scope>
      		</dependency>

    2. 在maven项目中的src/test/java目录下,创建测试程序

      推荐的测试类和方法:
      测试类的名称:Test+要测试的类名
      测试的方法名称:Test+方法名
      
      例如要测试HelloMaven,创建测试类TestHelloMaven
      @Test
          public void testAdd(){
          测试HelloMaven的add方法是否正确
      }
      其中testAdd叫做测试方法,它的定义规则是:
      方法必须是public
      方法必须没有返回值
      方法名称是自定义的,推荐是Test+方法名
      在方法的上面加入@Test

    3. mvn compile

      编译main/java/目录下的java为class文件,同时把class拷贝到target/classes目录下面,把main/resources目录下的所有文件都拷贝到target/classes目录下。

Maven在IDEA中的应用

IDEA集成maven

-DarchetypeCatalog=internal,maven项目创建时,会联网下载模板文件,比较大,使用 -DarchetypeCatalog=internal,不用下载,创建maven项目速度快。

 

 

 

IDEA创建Maven版java工程

 

 

 

配置完成页面

 

IDEA创建Maven版web工程

 

 

配置完成页面

 

 

  • pom.xml添加tomcat依赖

    <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>3.1.0</version>
     <scope>provided</scope>
    </dependency>
    <dependency>
     <groupId>javax.servlet.jsp</groupId>
     <artifactId>jsp-api</artifactId>
     <version>2.1</version>
     <scope>provided</scope>
    </dependency>

IDEA中导入Maven工程(module)

 

 

依赖管理

  • 依赖范围使用scope表示。

  • 依赖的范围:compile、test、provided,默认采用compile。

  • compiletestprovided
    对主程序是否有效
    对测试程序是否有效
    是否参与打包
    是否参与部署
  • 在项目中所用到的所有依赖(jar),必须在本地仓库中有,如果没有,必须通过maven下载。

  • servlet需要继承HttpServlet(provided),使用的HttpServlet是maven仓库中的。

  • 当写好的程序放到tomcat服务器中运行时,此时你的程序中不包含servlet的jar,因为tomcat提供了servlet的jar。

Maven常用设置

maven的属性设置

  • <properties> 设置maven的常用属性

    <properties>
     <maven.compiler.source>1.8</maven.compiler.source> 源码编译 jdk 版本
     <maven.compiler.target>1.8</maven.compiler.target> 运行代码的 jdk 版本
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 项目构建使用的编码,避免中文乱码
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 生成报告的编码
     </properties>

maven的全局变量

  • 自定义的属性

    1. 在<properties>通过自定义标签声明变量(标签名就是变量值)

    2. 在pom.xml文件中的其它位置,使用${标签名}使用变量的值

  • 自定义全局变量一般是定义依赖的版本号,当你的项目中要使用多个相同的版本号,先使用全局变量定义,再使用${变量名}

    定义全局变量
    <properties>
     <spring.version>4.3.10.RELEASE</spring.version>
    </properties>
    引用全局变量
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
    </dependency>

资源插件

<build>
<resources>
 <resource>
 <directory>src/main/java</directory><!--所在的目录-->
 <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
 <include>**/*.properties</include>
 <include>**/*.xml</include>
 </includes>
 <!—filtering 选项 false 不启用过滤器, *.property 已经起到过滤的作用了 -->
 <filtering>false</filtering>
 </resource>
 </resources>
</build>
  • 默认没有使用<resources>的时候,maven执行编译代码时,会把src/main/resources目录中的文件拷贝到target/classes目录中。对于src/main/java目录下的非java文件不处理,不会拷贝到target/calsses目录中。

  • 使用<resources>的时候,对于src/main/java目录下的非java文件可以处理,可以拷贝到target/classes目录中。

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

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

相关文章

Windows 离线安装mysql5.7

一、下载MySQL5.7最新版 1、官网地址 https://downloads.mysql.com/archives/community/ 2、下载MySQL5.7最新版 下载下图所示的安装包&#xff1a; 二、安装MySQL5.7 1、解压 将刚才下载压缩包解压搭配目录C:\software\mysql-5.7.41&#xff0c;&#xff08;路径大家可…

背完这195道软件测试面试题,帮你轻松拿下提前批offer

前言&#xff1a; 最近在整理字节&#xff0c;阿里&#xff0c;腾讯&#xff0c;京东的面试题&#xff0c;挑了一部分在四个大厂面试题中出现频率比较高的&#xff0c;发现还是基础知识比较多&#xff0c;废话不多说&#xff0c;你们自己看看&#xff0c;这里小编只放了面试题&…

电动超声波硅胶洁面仪单片机开发方案

近来&#xff0c;网红超声波洁面仪受到人们喜爱&#xff0c;特别是爱化妆的女性朋友&#xff0c;常用来清洁脸部肌肤。在本方案中&#xff0c;洁面仪IC采用宇凡微YF单片机&#xff0c;我们提供多种洁面仪方案&#xff0c;根据不同功能需求有多个洁面仪芯片可供选择。 一、超声波…

价值5k的软件测试企业级实战项目,只为了回答你软件测试如何学!

学习软件测试如何学&#xff0c;在回答这个问题之前&#xff0c;我先分析下&#xff0c;在企业中做项目整个测试流程是什么样的&#xff0c;你清楚了整个企业的测试流程&#xff0c;就会清楚企业做测试需要什么&#xff1f;从而也就会明白如何去学测试。 1、需求&#xff1a; …

JDBC --- Java的数据库编程

目录 &#x1f348;一、数据库编程的必备条件 &#x1f349;二、什么是 JDBC JDBC 的优势 &#x1f34a;三、JDBC 使用流程 以及 常用接口和类的讲解 &#x1f361;0. 前置工作 &#x1f36d;1. 引入依赖 &#x1f36c;2. 数据库连接Connection &#x1f36c;3. 创建操…

11-基于51单片机电子密码锁门禁(实物图+原理图+源程序+仿真+论文)全套资料

编号: 011 本系统采用 51单片机 24C02芯片矩阵键盘 继电器 开锁指示灯 LCD1602液晶 蜂鸣器 而成 1.单片机型号:STC89C52/51、AT89C52/51、AT89S52/51可以任选。程序通用 2.采用矩阵按键输入、1602液晶显示、继电器模拟开锁、发光二极管为开锁指示灯&#xff0c;继电器是可以外…

适配器模式(九)

不管怎么样&#xff0c;都要继续充满着希望 上一章简单介绍了建造者模式(八), 如果没有看过, 请观看上一章 一. 适配器模式 引用 菜鸟教程里面的 适配器模式介绍: https://www.runoob.com/design-pattern/adapter-pattern.html 适配器模式&#xff08;Adapter Pattern&#…

出海品牌直播带货:虚拟主播的优势与挑战,以及未来趋势揭秘

随着全球化的发展和网络技术的进步&#xff0c;海外直播带货成为了品牌拓展海外市场的一种新方式。而在这个数字化时代&#xff0c;虚拟主播的出现给海外直播带货带来了全新的可能性。 在传统直播带货中&#xff0c;品牌需要派遣代表或明星代言人亲自现场演示产品&#xff0c;…

15、Nginx---slice模块,大文件分片请求

Nginx的slice模块可以将一个请求分解成多个子请求&#xff0c;每个子请求返回响应内容的一个片段&#xff0c;让大文件的缓存更有效率。。 HTTP Range请求&#xff1a; HTTP客户端下载文件时&#xff0c;如果发生了网络中断&#xff0c;必须重新向服务器发起HTTP请求&#xff0…

2023年网络安全专业的前景怎么样?

网络安全与我们每一个人都息息相关&#xff0c;无论是企业还是个人&#xff0c;现在都非常重视网络安全。而且网络安全是一个新兴的行业&#xff0c;人才需求量远远大于供给&#xff0c;所以在薪资福利上具有很大的优势&#xff0c;并且对于初学者而言&#xff0c;很多人依旧担…

【JVM系列】GC算法介绍

文章目录 概述对象存活判断垃圾收集算法标记 -清除算法复制算法标记-整理算法分代收集算法 概述 垃圾收集 Garbage Collection 通常被称为“GC”&#xff0c;它诞生于1960年 MIT 的 Lisp 语言&#xff0c;经过半个多世纪&#xff0c;目前已经十分成熟了。 jvm 中&#xff0c;程…

企业操作手册有必要弄成在线版本吗?

企业操作手册是对企业运营的各个环节进行详细记录、说明和规范化&#xff0c;以指导企业各类人员在工作中的行为、方法和流程。 下面是编写企业操作手册的基本步骤&#xff1a; 1.明确编写内容。制定编写计划&#xff0c;明确需要编写哪些方面的操作手册和具体内容&#xff0…

抗战时期的15W电台竟能传送到千里之外?

我们大部分人应该都看过谍战影视剧&#xff0c;在剧中不管是敌方、友方还是我方&#xff0c;要想传递情报&#xff0c;基本都是通过无线电台进行联络的。而一旦离开无线电台&#xff0c;谍报人员之间的联络沟通就会变得十分困难。 在电影《永不消逝的电波》中&#xff0c;我们…

Hyper-V管理器无法连接到服务器,Hyper-V主机计算服务无法打开,vmcompute.exe应用程序无法正常启动(0xc0000606)的一种解决方法

Hyper-V无法连接到服务器&#xff0c;发现Hyper-V主机计算服务打不开&#xff0c;然后找到“C:\WINDOWS\System32\vmcompute.exe”&#xff0c;双击报错0xc0000606&#xff0c;用Microsoft 错误查找工具找到是程序不支持“控制流保护&#xff08;CFG&#xff09;”&#xff0c;…

vr消防隐患排查软件应用到加油站的好处

传统的隐患辨识排查安全培训方式主要以理论培训为主&#xff0c;现有的实操培训力量较弱且加油站涉及危险环境现有的实操培训难以满足实际需求&#xff0c;如何高效进行加油站安全隐患辨识与排查? 加油站火灾VR安全隐患排查系统是一种基于VR虚拟现实技制作术的智能化安全检查工…

Jmeter自定义函数二次开发

目录 前言&#xff1a; 开发步骤&#xff1a; 前言&#xff1a; JMeter自定义函数是一种使用Java编写的函数&#xff0c;它可以与JMeter脚本一起使用。如果JMeter原始函数不满足您的需求&#xff0c;您可以使用Java编写自定义函数来扩展其功能。 需求&#xff1a;读取本地存…

android 如何分析应用的内存(七)

android 如何分析应用的内存&#xff08;七&#xff09; 接上文&#xff0c;介绍六大板块中的第二个————malloc hook 上一篇的自定义分配函数&#xff0c;常常只能解决当前库中的分配&#xff0c;而不能跟踪整个app中的分配。 为此&#xff0c;android的libc库&#xff…

软件测试工程师的核心价值是什么?23年“我“要进阶高级测试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 与产品、研发相比…

面向制造业的IT管理

制造业的数字化和工业4.0技术的应用&#xff0c;使制造商能够优化生产&#xff0c;转变价值链&#xff0c;创造卓越的客户体验。随着行业采用新的技术&#xff0c;如人工智能(AI)、工业物联网(IIOT)和其他策略&#xff0c;制造商需要找到有效的方法来监控和管理他们的生产环境、…

一文彻底搞懂 Softmax 函数,数学原理分析和 PyTorch 验证

文章目录 1. Softmax 的定义2. Softmax 使用 e 的幂次的作用2.1 代码验证2.2 数学原理分析 3. 解决 Softmax 的数值溢出问题3.1 什么是数值溢出&#xff1f;3.2 解决数值上溢问题&#xff1a; x i − m a x ( x ) x_i-max(x) xi​−max(x)3.3 解决数值下溢问题&#xff1a;log_…