maven打包全流程原理

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: maven打包全流程原理

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

本文地址

合集地址

Maven基础

打包流程

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

  1. 在项目的根目录下,创建一个pom.xml文件,这是Maven项目的核心配置文件。在pom.xml文件中,我们可以定义项目的基本信息、依赖项、插件和构建配置等。

  2. 在pom.xml文件中,定义项目的依赖项。通过在标签中添加所需的依赖项坐标,Maven将会自动下载这些依赖项,并将它们添加到项目的类路径中。

  3. 编译项目。使用Maven的编译插件,可以执行编译操作。执行mvn compile命令,Maven将会编译项目的源代码,并将编译后的类文件保存在target目录下。

  4. 运行测试。Maven具有内置的测试框架支持,可以自动运行项目中定义的测试用例。执行mvn test命令,Maven将会运行项目的测试,并生成测试报告。

  5. 打包应用程序。Maven支持多种打包方式,最常见的是生成可执行的JAR文件或WAR文件。执行mvn package命令,Maven将会根据项目的配置,将编译后的代码、资源文件和依赖项打包到一个可执行的归档文件中。

  6. 生成其他构建产物。除了打包应用程序外,Maven还可以生成其他构建产物,如文档、站点和分发包等。通过配置相应的插件,可以执行mvn installmvn deploy命令,将这些构建产物发布到本地或远程仓库中。

Maven中的命令

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

  1. mvn clean:清理项目目录,删除之前构建生成的目录和文件。

  2. mvn compile:编译项目的源代码,将源代码编译为字节码文件。

  3. mvn test:运行项目的单元测试,执行项目中定义的测试用例。

  4. mvn package:打包应用程序,将项目的编译结果和资源文件打包为可执行的归档文件,如JAR、WAR等。

  5. mvn install:安装构建产物到本地仓库,将打包的应用程序安装到本地Maven仓库,供其他项目引用。

  6. mvn deploy:发布构建产物到远程仓库,将构建产物发布到远程Maven仓库,供其他开发者或其他项目使用。

  7. mvn site:生成项目的站点文档,包括项目报告、测试覆盖率报告等。

  8. mvn dependency:tree:显示项目的依赖树,列出项目的所有依赖项及其传递依赖。

  9. mvn dependency:resolve:解析项目的依赖项,下载并解析项目所需的依赖项。

  10. mvn dependency:purge-local-repository:清理本地仓库中的依赖项,删除本地仓库中不再使用的依赖项。

  11. mvn archetype:generate:生成项目的脚手架,根据模板生成一个新的Maven项目。

  12. 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文件夹中。

服务器认证配置

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

本地仓库配置

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

代理服务器配置

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

镜像仓库配置

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

全局依赖配置

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

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

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

Maven中配置多个仓库

配置

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

<settings>
  <profiles>
    <profile>
      <id>repo1</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>https://repo1.example.com/maven-central</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
    <profile>
      <id>repo2</id>
      <repositories>
        <repository>
          <id>custom</id>
          <url>https://repo2.example.com/maven-custom</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>repo1</activeProfile>
    <activeProfile>repo2</activeProfile>
  </activeProfiles>
</settings>

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

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

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

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

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

使用

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

<project>
  ...
  <repositories>
    <repository>
      <id>central</id>
      <url>https://repo1.example.com/maven-central</url>
    </repository>
    <repository>
      <id>custom</id>
      <url>https://repo2.example.com/maven-custom</url>
    </repository>
  </repositories>
  ...
</project>

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

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

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

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
127 3
|
1月前
|
Java Maven Android开发
【Azure Developer】VS Code打包Java maven Project 遇见 BUILD FAILURE
Unknown lifecycle phase "lean". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
|
2月前
|
缓存 IDE Java
idea的maven项目打包时没有source下的文件
【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
107 1
|
6月前
|
Java 测试技术 Maven
Maven打包使用多线程加速构建过程
Maven打包使用多线程加速构建过程
1012 0
|
2月前
|
Java 测试技术 Maven
maven 打包命令
maven 打包命令
36 6
|
2月前
|
Java Linux Maven
IDEA如何用maven打包(界面和命令两种方式)
【10月更文挑战第14天】本文介绍了两种Maven项目打包方法:命令行与IDEA界面。首先确保已安装Maven并配置环境变量,通过`mvn -v`检查安装。命令行打包需进入项目目录,执行`mvn package`,之后在`target`目录查看结果。IDEA打包则需配置Maven路径,打开Maven Projects窗口,双击Lifecycle下的`package`阶段,同样在`target`目录查找生成文件,并在Build窗口查看日志以排查问题。
1364 1
|
2月前
|
Java Shell Maven
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
135 4
|
7月前
|
Java Maven
SpringBoot项目的用maven插件打包报Test错误
SpringBoot项目的用maven插件打包报Test错误
143 1
|
2月前
|
Java Maven
用graalvm将maven项目打包成可执行文件
本文介绍了如何使用GraalVM将Maven项目打包成可执行文件,包括引入依赖和插件、编写代码、执行打包命令以及运行查看结果的完整过程。
194 0
用graalvm将maven项目打包成可执行文件
|
2月前
|
Java Maven
maven打包出现没有主类的原因,详细分析并解决
本文分析了使用Maven打包Java应用时找不到或无法加载主类的问题,通常是由于未配置主类或打包时未包含依赖,并通过添加Maven插件解决了依赖问题,同时指出了JavaFX应用可能遇到的运行时组件缺失的错误。
190 0
maven打包出现没有主类的原因,详细分析并解决