maven打包全流程原理

2023年 7月 14日 90.7k 0

原文合集地址如下,有需要的朋友可以关注

本文地址

合集地址

Maven基础

打包流程

Maven是一个常用的构建工具,它可以帮助我们管理项目依赖、编译代码、运行测试和打包应用程序。

  • 在项目的根目录下,创建一个pom.xml文件,这是Maven项目的核心配置文件。在pom.xml文件中,我们可以定义项目的基本信息、依赖项、插件和构建配置等。
  • 在pom.xml文件中,定义项目的依赖项。通过在标签中添加所需的依赖项坐标,Maven将会自动下载这些依赖项,并将它们添加到项目的类路径中。
  • 编译项目。使用Maven的编译插件,可以执行编译操作。执行mvn compile命令,Maven将会编译项目的源代码,并将编译后的类文件保存在target目录下。
  • 运行测试。Maven具有内置的测试框架支持,可以自动运行项目中定义的测试用例。执行mvn test命令,Maven将会运行项目的测试,并生成测试报告。
  • 打包应用程序。Maven支持多种打包方式,最常见的是生成可执行的JAR文件或WAR文件。执行mvn package命令,Maven将会根据项目的配置,将编译后的代码、资源文件和依赖项打包到一个可执行的归档文件中。
  • 生成其他构建产物。除了打包应用程序外,Maven还可以生成其他构建产物,如文档、站点和分发包等。通过配置相应的插件,可以执行mvn installmvn deploy命令,将这些构建产物发布到本地或远程仓库中。
  • Maven中的命令

    Maven提供了许多命令,用于执行各种构建任务和操作。

  • mvn clean:清理项目目录,删除之前构建生成的目录和文件。
  • mvn compile:编译项目的源代码,将源代码编译为字节码文件。
  • mvn test:运行项目的单元测试,执行项目中定义的测试用例。
  • mvn package:打包应用程序,将项目的编译结果和资源文件打包为可执行的归档文件,如JAR、WAR等。
  • mvn install:安装构建产物到本地仓库,将打包的应用程序安装到本地Maven仓库,供其他项目引用。
  • mvn deploy:发布构建产物到远程仓库,将构建产物发布到远程Maven仓库,供其他开发者或其他项目使用。
  • mvn site:生成项目的站点文档,包括项目报告、测试覆盖率报告等。
  • mvn dependency:tree:显示项目的依赖树,列出项目的所有依赖项及其传递依赖。
  • mvn dependency:resolve:解析项目的依赖项,下载并解析项目所需的依赖项。
  • mvn dependency:purge-local-repository:清理本地仓库中的依赖项,删除本地仓库中不再使用的依赖项。
  • mvn archetype:generate:生成项目的脚手架,根据模板生成一个新的Maven项目。
  • mvn release:preparemvn release:perform:用于自动化版本发布的命令,执行版本发布的准备和执行操作。
  • Maven的工作原理

    项目结构和配置

    在Maven中,项目通过一个特定的目录结构进行组织,其中包含源代码、资源文件和其他项目元数据。Maven使用项目根目录下的pom.xml文件进行配置,该文件定义了项目的基本信息、依赖项、插件和构建配置等。

    坐标和仓库

    在Maven中,每个项目都有一个唯一的坐标,它由组织名、项目名和版本号组成。Maven使用这个坐标来标识和管理项目及其依赖项。Maven通过中央仓库(Central Repository)和其他远程或本地仓库来获取和发布项目依赖项。

    生命周期和插件

    Maven定义了一组标准的构建生命周期,例如clean、compile、test、package和install等。每个生命周期由一系列的构建阶段组成,Maven插件可以绑定到这些阶段,并执行相应的任务。插件可以用于执行编译、测试、打包、部署等各种构建任务。

    依赖管理

    Maven提供了强大的依赖管理机制。通过在pom.xml文件中定义依赖项坐标,Maven可以自动下载所需的依赖项,并将它们添加到项目的类路径中。Maven还支持传递性依赖,即当一个依赖项依赖其他依赖项时,Maven可以自动解析和下载这些传递性依赖。

    构建过程

    当执行Maven构建命令时,Maven会根据项目的配置和命令执行相应的构建任务。它会根据生命周期的定义,按照指定的顺序执行各个构建阶段,并调用相应的插件来完成任务。在构建过程中,Maven会处理编译、测试、打包、文档生成等多个环节,并生成相应的构建产物。

    Maven中的插件

    Maven提供了许多插件,用于执行各种构建任务和增强构建过程。以下是一些在Maven打包中常用的插件:

    Maven Compiler Plugin

    用于编译Java源代码的插件。它可以配置Java版本、编译参数等,并将源代码编译为字节码文件。

    Maven Surefire Plugin

    用于运行项目的单元测试的插件。它可以自动运行测试用例,并生成测试报告。

    Maven JAR Plugin

    用于创建可执行的JAR文件的插件。它可以将编译后的类文件、资源文件和依赖项打包到一个JAR文件中,并指定JAR文件的入口点。

    Maven WAR Plugin

    用于创建Web应用程序的WAR文件的插件。它可以将Web应用程序的源代码、资源文件和依赖项打包到一个WAR文件中,并可以配置Web应用程序的部署描述符。

    Maven Assembly Plugin

    用于创建自定义归档文件的插件。它可以根据配置创建各种类型的归档文件,如ZIP、TAR等,可以包含多个文件和目录。

    Maven Shade Plugin

    用于创建可执行的Uber JAR文件的插件。它可以将项目及其所有依赖项合并为一个大的JAR文件,解决了传统JAR文件的依赖冲突问题。

    Maven Dependency Plugin

    用于管理和分析项目依赖的插件。它可以列出项目的依赖关系、解析依赖树、下载依赖项等。

    Maven Release Plugin

    用于自动化版本发布的插件。它可以自动更新版本号、打标签、发布到远程仓库等,简化了版本管理和发布过程。

    Maven中的配置

    Maven的settings.xml文件是Maven的全局配置文件,它通常位于用户的Maven安装目录下的conf文件夹中。

    服务器认证配置

    • 元素:用于配置Maven与远程仓库的身份验证信息,包括仓库ID、用户名和密码等。

    本地仓库配置

    • 元素:用于指定本地仓库的路径。

    代理服务器配置

    • 元素:用于配置访问远程仓库时的代理服务器,包括代理的协议、主机、端口、用户名和密码等。

    镜像仓库配置

    • 元素:用于配置镜像仓库,可以指定替代官方远程仓库的镜像仓库,加快下载速度。

    全局依赖配置

    • 元素:用于定义不同的构建配置文件,可以包含不同的依赖项、插件配置等。

    除了上述配置外,settings.xml文件还包含一些其他配置选项,如:

    • offline:设置是否离线模式,禁止从远程仓库下载依赖项。
    • mirrors:定义镜像仓库的详细配置。
    • profiles:定义构建配置文件的详细配置。
    • activeProfiles:定义激活的构建配置文件。

    Maven中配置多个仓库

    配置

    在Maven的配置文件(settings.xml)中,你可以配置多个仓库。下面是一种常见的配置方式:

    
      
        
          repo1
          
            
              central
              https://repo1.example.com/maven-central
              
                true
              
              
                false
              
            
          
        
        
          repo2
          
            
              custom
              https://repo2.example.com/maven-custom
              
                true
              
              
                true
              
            
          
        
      
      
        repo1
        repo2
      
    
    

    在上述配置中,我们定义了两个配置文件(profiles),分别是repo1repo2。每个配置文件中可以定义一个或多个仓库(repositories)。

    每个仓库配置包括以下信息:

    • :仓库的唯一标识符。
    • :仓库的URL地址。
    • :配置该仓库是否可用于发布版(release)依赖项。
    • :配置该仓库是否可用于快照版(snapshot)依赖项。

    中,我们指定了要激活的配置文件,这样Maven在构建过程中将会使用这些配置文件中定义的仓库。

    通过配置多个仓库,你可以同时使用多个远程仓库,从中获取所需的依赖项。这在项目中可能会有多个团队或多个依赖来源的情况下非常有用。

    使用

    如果你在settings.xml中配置了多个仓库,并想在pom.xml文件中使用其中某个仓库,可以通过在pom.xml的元素中指定该仓库的ID来引用它。以下是一个示例:

    
      ...
      
        
          central
          https://repo1.example.com/maven-central
        
        
          custom
          https://repo2.example.com/maven-custom
        
      
      ...
    
    

    在上述示例中,元素包含了两个子元素,分别引用了ID为"central"和"custom"的仓库。这些ID需要与settings.xml中配置的仓库ID对应。

    在使用这些仓库时,Maven将会根据配置的仓库ID在settings.xml中查找相应的仓库配置,并使用其中定义的URL地址来获取依赖项。

    请注意,如果在pom.xml中指定了仓库,那么将优先使用pom.xml中的配置,而不会使用settings.xml中的配置。因此,如果你只想使用settings.xml中的仓库配置,可以不在pom.xml中定义元素。

    本文使用 mdnice 排版

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论