原文合集地址如下,有需要的朋友可以关注
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 install
或mvn 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:prepare
和mvn 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),分别是repo1
和repo2
。每个配置文件中可以定义一个或多个仓库(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>
元素。