maven搭建

一、Maven简介

Maven翻译为"专家","内行"。Maven是Apache下的一个纯java开发的开源项目。
Maven 是一个项目管理工具,可以对Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如(#,Ruby,Scala和其他语言编写的项目。
Maven创始者希望能够更多的让Java开发人员的日常工作更加容易,帮助理解任何基于Java项目。

二、 Maven的两大功能

Maven不仅是一个项目构建工具,更是一个项目管理工具。它在项目构建工程中,比ant更全面,更灵活。 Maven在进行项目构建时,它对项目目录结构拥有约定,知道你的源代码在哪里,类文件应该放到哪里去。

它拥有生命周期的概念,Maven的生命周期是有顺序的,在执行后面的生命周期的任务时,不需要显示的配置前面任务的生命周期。例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程

1、项目构建

项目构建是一个项目从:源代码、编译、测试、打包、部署、运行的过程。
原来构建项目的过程如下:以web项目为例

  • 1)在idea中创建一个java web工程
  • 2)在工程中编写源代码及配置文件等
  • 3)对源代码进行编译,java源文件编译成.dlass文件
  • 4)执行Junit单元测试
  • 5)将工程打成war包部署至tomcat运行

 

Maven项目构建过程
Maven将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过程的一些阶段:

清理:删除以前的编译结果,为重新编译做好准备。
编译:将Java源程序编译为字节码文件。
测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
报告:在每一次测试后以标准的格式记录和展示测试结果。
打包:将一个包含诸多文件的工程封装为一个压综文件用于安装或部署。Java工程对应 jar 包,Web工程对应war包。
安装:在Maven环境下特指将打包的结果--jar 包或war 包安装到本地仓库中。
部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行

2、依赖管理

什么是依赖?一个java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个Java项目依赖了这些第三方的jar包。
例如javaWeb中需要的连接数据库的jar包、数据源的jar包等等。
什么是依赖管理?就是对项目所有依赖的jar包进行规范化管理。

传统项目的依赖管理
传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中。
手动拷贝jar包添加到工程中的问题是:
1、没有对jar包的版本统一管理,容易导致版本冲突。
2、从网上找jar包非常不方便,有些jar找不到。
3、jar包添加到工程中导致工程过大。

Maven项目的依赖管理

maven项目管理所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xml(maven工程的配置文件)添加jar包的坐标,自动从maven仓库下载jar包运行。

使用Maven依赖管理添加jar的好处:
1、通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。的
2、Maven团队维护了一个非常全的Maven仓库,里边包括了当前使用的jar包,Maven工程可以自动从Maven仓库下载jar包,非常方便。

三、 Maven的安装和配置

1、下载

Maven的下载:https://maven.apache.org/download.cgi
将下载好的Maven安装包解压到一个不含有中文和空格的目录中,解压安装包即可使用。

2、配置环境变量

配置maven的前提是你已经安装了JDK。

测试:maven -version 能够成功代码配置ok了

修改配置文件,常用的jdk是1.8,默认配置文件不是的话,我们手动去修改一下:

打开settings.xml,找到profiles那个标签,把注释的那一段复制出来,修改为以下配置

<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>

四、 Maven的目录结构

五、 Maven的仓库

在Maven中可以将仓库理解位一个位置,一个专门存放项目中依赖的第三方库的位置。

maven的仓库可以分为本地仓库和远程仓库。

1、本地仓库

本地仓库相当于一个缓存,在电脑上是一个文件夹,我们可以设置这个文件夹的路径(其体怎么设置会在下面的配置体现).工程第一次需要某种jar包时,会从远程仓库(互联网)下载并保存到本地仓库中(在程序员的电脑上),当第二次使用时,不需要去远程仓库下载,会先去本地仓库中找,如果找不到才会去远程仓库上下载。
本地仓库默认路径为 ${user.home}/.m2/repository可通过 settings.xml 自定义

2、远程仓库

远程仓库中分为中央仓库私服两类。

1.中央仓库

中央仓库中的jar包由专业团队(Maven团队)维护,中央仓库中存放了全世界大多数流行的开源软件的jar包,是Maven默认的远程仓库

  • 主仓库地址

    • https://repo.maven.apache.org/maven2 (Maven 超级 POM 默认地址)
    • https://repo1.maven.org/maven2 (历史常用地址,与主仓库等效)
  • ‌依赖搜索平台

    • https://central.sonatype.com:提供依赖坐标查询与下载引导(非实际仓库)
2.私服

私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。除了中央仓库和私服,还有很多其他公开的远程仓库,

常见的有java.net Maven库:https://maven.java.net/content/repositories/public/

jboss Maven库:http://repository.jboss.org/nexus/content/groups/public/

3、配置本地maven仓库

在settings.xml中配置

  <!-- localRepository  这个是默认配置,你不设置就使用默认的路径
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
    <!-- 配置本地仓库 -->
    <localRepository>C:\JavaLocalRepository</localRepository>

4、配置远程maven仓库

Maven默认的远程仓库是Maven团队维护的中央仓库,由于网络原因,去中央仓库下载jar包需要到国外的网站,不太便捷,速度慢,于是我们可以选择把国内的阿里云的Maven仓库作为中央仓库镜像。
修改 Maven 根目录下的 conf 文件夹中的 settings.xml 文件,在 mirrors 节点上,添加内容如下:

<mirror>
  <id>aliyunmaven</id>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
  <mirrorOf>central</mirrorOf>
</mirror>

其中各个标签的含义是:
id:当前镜像的唯一标识
mirrorof:将哪个远程仓库当做中央仓库镜像,中央仓库的id是central,所以将阿里云的Maven仓库设置为中央仓库镜像时,其值必须设置为central
name:为当前的中央仓库镜像起一个名字,便于开发者阅读
url:阿里云Maven仓库的地址

六、 Maven的核心文件pom.xml

POM( Project Object Model,项目对象模型)是 Maven 工程的甚本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

<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/xsd/Maven-4.0.0.xsd">
    <!-- Maven模型的版本 -->
    <modelVersion>4.0.0</modelVersion>
    
    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,
         Maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
    <groupId>com.xxx.Maven</groupId>
    
    <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
    <artifactId>HelloWorld</artifactId>
    
    <!-- 当前项目版本号:同一个项目开发过程中可以发布多个版本,此处标示0.0.1板 -->
    <!-- 当前项目版本号:每个工程发布后可以发布多个版本,依赖时调取不同的版本,使用不同的版本号
         当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本 -->
    <version>1.0.0-release</version>
    
    <!-- 打包类型,一般有jar、war、pom等 -->
    <packaging>jar</packaging>
    
    <!-- 名称:可省略 .常用于 Maven 生成的文档 -->
    <name>Hello</name>
    
    <!-- 项目描述:可省略,常用于 Maven 生成的文档 -->
    <description></description>
    
    <!-- 项目依赖构件配置,配器项目依赖构件的坐标 -->
    <dependencies>
        <!-- 依赖设置 ,可以有多个dependency节点 -->
        <dependency>
            <!-- 依赖组织名称  -->
            <groupId>junit</groupId>
            <!-- 依赖项目名称 -->
            <artifactId>junit</artifactId>
            <!-- 依赖版本名称 -->
            <version>4.12</version>
            <!-- 依赖范围:test包下依赖该设置 -->
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <!-- 项目构建配置,配置编译、运行插件等 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <showWarnings>true</showWarnings>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

七、 Maven的坐标

在Maven中坐标就是为了定位一个唯一确定的jar包。

Maven世界拥有大是构件,我们需要找一个用来难一标识一个构建的统一规范。拥有了统一规范,就可以把查找工作交给机器。
Maven坐标主要组成
groupld: 定义当前Maven项目组织名称
artifactld:定义实际项目名称
version:定义当前项目的当前版本或者是所依赖的jar包的版本

<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>

八、 Maven生命周期

Maven生命周期就是为了对所有的构建过程进行抽象和统一。包括项目清理、初始化、编译、打包、测试、部署等几乎所有构建步骤。生命周期可以理解为构建工程的步骤。

Maven拥有三套相互独立的生命周期,分别是clean、default和site.
clean Lifecycle:在进行真正的构建之前进行一些清理工作。 mvn clean
default Lifecycle:构建的核心部分,编译,测试,打包,部署等等。
site Lifecycle: 生成项目报告,站点,发布站点。

1、clean生命周期

clean的目的是清理项目。
每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn dlean,这个的clean是Clean生命周期的一个阶段。有Clean生命周期,也有Clean阶段。
包含3个阶段:

  1. pre-clean 执行一些清理前需要完成的工作
  2. clean 清理上一次构建过程中生成的文件,比如编译后的class文件等的
  3. post-clean 执行一些清理后需要完成的工作

2、default生命周期-构建项目

所有生命周期中最核心的部分,绝大部分工作都发生在这个生命周期中。
这里只介绍一些比较重要和常用的阶段:

generate-resources: 产生主代码中的资源在classpath中的包
process-resource: 复制并处理资源文件,至目标目录,准备打包
compile: 编译项目的主源码,一般来说:编译src/main/java目录下的java文件至项目输出的主classpath目录中
test-compile: 编译项目的测试代码,是编译src/test/java目录下的java文件至项目输出的测试classpath目录中
test:使用单元测试框架运行测试,测试代码不会被打包或部署
package: 打包成可发布的格式
install: 将包安装到Maven本地仓库,供本地其他Maven项目使用
deploy: 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用

运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install的时候,代码会被编译,测试,打包。
此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

参考资料地址: https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

3、site生命周期-生成项目站点

目的:建立和发布项目站点

pre-site:执行一些在生成项目站点之前需要完成的工作
site:生成项目站点文档
post-site:执行一些在生成项目站点之后需要完成的工作
site-deploy:将生成的项目站点发布到服务器上

九、 在idea中配置Maven环境

1、打开idea,进入settings配置

2、创建maven项目

使用骨架创建maven项目,按照我标记的顺序填写即可(第四步就是在选骨架)


 

posted @ 2025-07-12 13:52  我用python写Bug  阅读(49)  评论(0)    收藏  举报