Maven基础知识与使用总结

一、Maven介绍

Apache Maven:https://maven.apache.org/what-is-maven.html

Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。

Maven主要目标是提供给开发人员:

  • 项目是可重复使用,易维护,更容易理解的一个综合模型。
  • 插件或交互的工具,这种声明性的模式。

Maven项目的结构和内容在一个XML文件中声明,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元。有关详细信息,请参阅Maven POM的部分。

中心仓库:https://mvnrepository.com/

sonatype:https://search.maven.org/

其他参考资料:

https://www.liaoxuefeng.com/wiki/1252599548343744/1255945359327200

http://c.biancheng.net/maven/

二、Maven安装

由于maven依赖jdk的运行,需要先在本地配置jdk的环境变量,然后在配置maven环境变量,本文暂就不叙述。

a)下载maven文件

JDK 环境安装好之后,接下来正式安装配置 Maven。

下载地址:https://maven.apache.org/download.cgi

解压后:

Maven基础知识与使用总结

b)配置maven环境变量

安装好后,接下来对 Maven 进行配置。配置内容同 JDK 的配置内容一样,也是两部分:一部分是在系统环境变量或者用户环境变量中配置一个 MAVEN_HOME;另一部分也是将 Maven 里面的 bin 目录添加到 Path 环境变量。

  • *配置 MAVEN_HOME

Maven基础知识与使用总结
  • *追加 Path

Maven基础知识与使用总结
  • 测试安装是否成功
    打开一个 CMD 窗口,输入”mvn-v”命令运行

Maven基础知识与使用总结

c)配置maven本地仓库

实际上我们可以将本地仓库理解”缓存”,目的是存放jar包。开发项目时项目首先会从本地仓库中获取 jar 包,当无法获取指定 jar 包的时候,本地仓库会从 远程仓库(或 中央仓库) 中下载 jar 包,并”缓存”到本地仓库中以备将来使用。

默认路径在我们C盘目录下。这里不建议放到C盘,那么如何修改这个默认配置呢。
打开maven安装目录\conf\setting.xml文件。我自己的路径:E:\maven_3.6.1\apache-maven-3.6.1\conf

某个jar包一旦被Maven下载过,即可永久地安全缓存在本地。

Maven基础知识与使用总结

最后检查一下配置是否正确。输入命令: mvn help:system

d)配置maven国内仓库源

Maven是当前流行的项目管理工具,但官方的库在国外经常连不上,连上也下载速度很慢。

在maven的配置文件 settings.xml 中添加


    alimaven
    central
    aliyun maven
    http://maven.aliyun.com/nexus/content/repositories/central/

三、Maven基本介绍

a)Maven坐标详解

一个完整的坐标信息,由 groupId、artifactId、version、packaging、classifier 组成,如下是一个简单的坐标定义。


        junit
        junit
        3.8.1
        test

groupId :属于组织的名称,类似Java的包名;

artifactId : 该jar包自身的名称,类似Java的类名;

version : 该jar包的版本。

通过上述3个变量,即可唯一确定某个jar包。Maven通过对jar包进行PGP签名确保任何一个jar包一经发布就无法修改。修改已发布jar包的唯一方法是发布一个新版本。

注:只有以 -SNAPSHOT 结尾的版本号会被Maven视为开发版本,开发版本每次都会重复下载,这种SNAPSHOT版本只能用于内部私有的Maven repo,公开发布的版本不允许出现SNAPSHOT。

b)Maven 构建生命周期

生命周期阶段 描述 validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。 initialize(初始化) 初始化构建状态,比如设置属性值。 generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。 process-sources(处理源代码) 处理源代码,比如说,过滤任意值。 generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。 process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。 compile(编译) 编译项目的源代码。 process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。 generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。 process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。 generate-test-resources(生成测试资源文件) 为测试创建资源文件。 process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。 test-compile(编译测试源码) 编译测试源代码到测试目标目录. process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。 test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。 prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。 package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。 pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。 integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。 post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。 verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。 install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。 deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。

b)版本管理介绍

通常情况下,Maven 的版本号约定中包括如下几个部分:


  • 主版本号:主版本号表示该项目的重大升级。例如:Maven1 到 Maven2;
  • 次版本号:表示在该主版本下,较大范围的升级或变化。例如:Maven-3.0 到 Maven-3.1;
  • 增量版本号:增量版本通常是用来修复bug的版本。例如:Maven-3.1.1;
  • 里程碑版本号:用来标记里程碑版本。例如:Maven-3.0-alpha-3。

c)Maven依赖管理

packaging :定义Maven项目打包的方式,使用构件的什么包。首先,打包方式通常与所生成构件的文件扩展名对应,如上例中没有packaging,则默认为jar包,最终的文件名为junit-3.8.1.jar。也可以打包成war等。

classifier: 该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应,如上例中的主构件为junit-3.8.1.jar,该项目可能还会通过一些插件生成如junit-3.8.1-javadoc.jar,junit-3.8.1-sources.jar, 这样附属构件也就拥有了自己唯一的坐标。

上述5个元素中,groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar),而classfier是不能直接定义的,需要结合插件使用。

Maven定义了几种依赖关系,分别是 compiletestruntimeprovided

scope 说明 示例 compile 编译时需要用到该jar包(默认) commons-logging test 编译Test时需要用到该jar包 junit runtime 编译时不需要,但运行时需要用到 mysql provided 编译时需要用到,但运行时由JDK或某个服务器提供 servlet-api

d)Maven命令

如果我们运行 mvn package,Maven就会执行 default生命周期,它会从开始一直运行到 package这个phase为止:

  • validate
  • package

如果我们运行 mvn compile,Maven也会执行 default生命周期,但这次它只会运行到 compile,即以下几个phase:

  • validate
  • compile

Maven另一个常用的生命周期是 clean,它会执行3个phase:

  • pre-clean
  • clean (注意这个clean不是lifecycle而是phase)
  • post-clean

在实际开发过程中,经常使用的命令有:

mvn clean:清理所有生成的class和jar;

mvn clean compile:先清理,再执行到 compile

mvn clean test:先清理,再执行到 test,因为执行 test前必须执行 compile,所以这里不必指定 compile

mvn clean package:先清理,再执行到 package

e)Maven的pom.xml文件


    4.0.0

    com.onework

    onework-maven2

    war

    1.0-SNAPSHOT

    onework-maven

    http://www.one-work.net/

    A maven project to study maven.

        onework

        http://onework.cn

            Demo

            zhongkai1010@163.com

            zhongkai1010@163.com

            zhongkai1010@163.com

            zhongkai1010@163.com

            HELLO WORLD

            chaimm

            zhongkai1010@163.com

                Project Manager
                Architect

            demo

            http://onework.cn

                No

            -5

            Apache 2

            http://www.baidu.com/zhongkai1010/LICENSE-2.0.txt

            repo

            A business-friendly OSS license

            scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)

            scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk

        http://svn.baidu.com/banseon

        demo

        http://www.onework.cn

       ......

      ......

     Windows XP

     Windows

     x86

     5.1.2600

     mavenVersion

     2.0.3

     /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/

     /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/

         ......

        ......

     ......

    ......

      ......

    ......

   banseon-repository-proxy

            banseon-repository-proxy

            http://192.168.1.169:9999/repository/

            default

   ......

            org.apache.maven

            maven-artifact

            3.8.1

            jar

            test

                    spring-core
                    org.springframework

            true

    ......

   banseon-maven2
   banseon maven2
            file://${basedir}/target/deploy

   banseon-maven2
            Banseon-maven2 Snapshot Repository
            scp://svn.baidu.com/banseon:/usr/local/maven-snapshot

            banseon-site

            business api website

                scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web

四、构建Maven工程

a)Maven工程目录

一个使用Maven管理的普通的Java项目,它的目录结构默认如下:

a-maven-project
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   └── test
│       ├── java
│       └── resources
└── target• IDEA 配置 maven 目录

Original: https://www.cnblogs.com/zhongkai/p/15714547.html
Author: OneWork
Title: Maven基础知识与使用总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572984/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java内存问题分析与定位

    简介 JNI方法申请的native 内存,通常是在JDK库里;本地 C++ 方法直接通过 malloc申请的内存,不受JVM管控。 堆内内存: 指Java堆,GC算法管理的内存区域…

    Java 2023年5月29日
    079
  • Win10 系统中修改电脑 系统user 名称

    以下步骤来自于:南京邮电大学 ,22级,继教院,通信工程专业,王骏 同学的分享 1.win+R 输入regedit 回车,进入注册表。 2.定位到HKEY_LOCAL_MACHIN…

    Java 2023年6月14日
    078
  • Spring cloud gateway 如何在路由时进行负载均衡

    本文为博主原创,转载请注明出处: 1.spring cloud gateway 配置路由 在网关模块的配置文件中配置路由: 其中lb表示采用了负载均衡,user-server表示服…

    Java 2023年5月30日
    081
  • 3-面向对象(1)

    一、类与对象 1.面向对象学习的三条主线 Java类及类的成员:属性、方法、构造器;代码块、内部类 面向对象的大特征:封装性、继承性、多态性、(抽象性) 其它关键字:this、su…

    Java 2023年6月7日
    069
  • 设计模式笔记(二):策略模式

    应用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一…

    Java 2023年6月6日
    076
  • Swagger UI 与SpringMVC的整合

    关于 Swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学…

    Java 2023年5月30日
    079
  • 微软Microsoft RDC 手机连接远程服务器 安卓APP 使用教程

    RD Client是一款好用的远程控制工具, 一般来说RDclient中文版与微软远程桌面应用程序, 您可以连接到远程PC和您的工作资源, 这样就可以很方便地进行工作了, 有了它以…

    Java 2023年6月8日
    089
  • java面试——垃圾回收机制

    垃圾回收机制:——GC 初学java时。最经典的一句话是”java不像C,需要担心处理不用的内存,他有自己的垃圾回收,会自己处理的”,这是当时老师上课提过的…

    Java 2023年6月9日
    084
  • SpringDataRedis序列化的一些问题

    SpringDataRedis的序列化的一些问题 RedisTemplate可以接收任意Object作为值写入Redis,但是如果不实现设置序列化器的化默认是采用JDK序列化,序列…

    Java 2023年6月8日
    080
  • 从壹开始 [ Ids4实战 ] 之七 ║ 客户端、服务端、授权中心全线打通

    1、经过元旦两天的全力整改,终于在这新的一年,完成了我的布道生涯的第一个大步走 —— 那就是客户端(VUE)、服务端(ASP.NET Core API)、授权中心(Identity…

    Java 2023年5月30日
    074
  • AMD Software꞉ Adrenalin Edition闪退问题

    是因为连接了两个显示器的问题,拔掉其中一个显示器的接头,就可以正常使用了,至于往深了的问题,我就不知道了,反正这个情况可以给各位提供一个参考,不一定就都是这个问题导致的。 最近升级…

    Java 2023年6月13日
    0181
  • VMware安装虚拟机详细步骤

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    061
  • 一文搞懂 Spring事务是怎么通过AOP实现的 ,让你醍醐灌顶

    阅读此文章需要掌握一定的AOP源码基础知识,可以更好的去理解事务,我在另外一篇文章有提过。 spring事务其实就是根据事务注解生成代理类,然后在前置增强方法里获取connecti…

    Java 2023年6月7日
    076
  • 1、TCP四元组UDP二元组

    UDP是面向无连接的,对于服务器和客户端来说只有一个socket,只需要确定目的IP和Port(dst ip 和dsp port),把数据都发送给这一个socket,所以采用二元组…

    Java 2023年6月8日
    089
  • 制作自己的Docker镜像

    制作镜像有2种方式,一种是容器转换成镜像,另一种是使用dockerfile创建镜像,一般后者更常用。 使用 docker commit命令将容器转换成镜像 docker commi…

    Java 2023年6月7日
    070
  • Node.js(一)基本node.js读取删除

    npm init -y(初始化项目) npm uninstall (xxx模块名称)=>(移除模块) var text2=require(“./text2&#82…

    Java 2023年6月15日
    059
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球