2.配置仓库 Maven 仓库有三种类型: 本地(local) 中央(central) 远程(remote) 当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库: 步骤 1 -...为goal的实现类,它继承于AbstractMojo,有一个execute方法,goal等的定义都是通过在mojo里定义一些注释的anotation来实现的,maven会在打包时,自动根据这些anotation...dependencies 插件 plugins 执行目标 项目构建 profile 项目版本 项目开发者列表 相关邮件列表信息 具体的配置可以参考fastjson 的配置: https://github.com.../alibaba/fastjson/blob/master/pom.xml 7、POM有2个很重要的关系:聚合、继承 一、聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1...Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务,例如compile就是插件maven-compiler-plugin的一个插件目标。
本文主要讲解Maven的: 坐标与依赖、 仓库、 生命周期与插件、 模块聚合、 模块继承 等概念, 并通过一个开发Maven插件的实例来深入了解Maven的核心机制....而对于 如何配置Maven、Nexus私服、Jenkins持续集成、Maven测试、构建Web、资源过滤、自定义Archetype 等相对简单、讲解繁琐且网上有大量实践案例的内容没有涉及....有了依赖传递机制, 在项目中添加了spring-core依赖时就不用再去考虑它依赖了什么, 也不用担心引入多余的依赖....插件 生命周期的阶段phase与插件的目标goal相互绑定, 用以完成实际的构建任务....内置绑定 为了能让用户几乎不用任何配置就能使用Maven构建项目, Maven 默认为一些核心的生命周期绑定了插件目标, 当用户通过命令调用生命周期阶段时, 对应的插件目标就会执行相应的逻辑. clean
引言 Maven 是一个非常流行和强大的 Java 项目管理工具,它可以帮助我们自动化地处理项目的构建、依赖、文档、测试、发布等各个环节。...分模块设计、简洁易维护,欢迎大家点个 star、关注博主。...排除后,插件会自动在 pom.xml 文件中添加标签,来实现子依赖的排除。...全局 maven 命令使用,通过CTRL + SHIFT + ALT + R - “Run Maven Goal on Root Module” 窗口,可以在根模块进行 clean、package、install...支持全局的 maven run/debug 命令在当前文件或当前模块下运行。
在以下各节中,提出了满足以下条件的解决方案: 使用Maven作为构建工具。 该项目可以是多模块项目(微服务)。 单元测试和集成测试是每个模块的一部分。...Maven在Maven的构建生命周期阶段中的测试期间来运行这些测试。 集成测试运行配置必须手动完成。它存在可以提供帮助的Maven插件。...Maven的构建生命周期包含一个称为集成测试的阶段。在此阶段,我们要运行集成测试。幸运的是,当在POM中设置Maven故障安全插件的目标集成测试时,它会自动绑定到此阶段。...因此,该插件必须要准备两个单独的代理。然后他们在测试运行期间生成报告。Maven的构建生命周期包含自己的阶段,可以在测试阶段之前进行准备(测试和集成测试)。...因此,在成功构建之后,我们必须在我们的项目中运行Sonar Maven 3插件(命令mvn sonar:sonar)。
因此,如果在Maven项目中将单元测试(由Maven Surefire插件运行)和集成测试(由Maven Failsafe插件运行)分开进行测试,那么如何配置JaCoCo Maven插件呢?...在以下各节中,提出了满足以下条件的解决方案: 构建工具:Maven。 该项目可以是多模块项目。 单元测试和集成测试是每个模块的一部分。 测试覆盖率是通过JaCoCo Maven插件来衡量的。...Maven项目结构 首先,我们看一下默认的Maven项目结构在单个模块项目中的样子。...在Maven的构建生命周期阶段测试中运行这些测试。 集成测试运行配置必须手动完成,也有Maven插件提供方便。...Maven的构建生命周期包含一个称为集成测试的阶段。在此阶段,我们要运行集成测试。幸运的是,当在POM中设置Maven安全插件的目标集成测试时,会自动绑定到此阶段。
使用Maven来搭建项目,能够极大的方便我们构建项目的依赖关系,对于项目中需要依赖的Jar包,也只是简单的在pom.xml中进行配置即可。...provided: 提供范围,编译时依赖,但不会打包进去。如:servlet-api.jar runtime: 运行时范围,打包时依赖,编译不会。...聚合 聚合是指将多个模块整合在一起,统一构建,避免一个一个的构建。...属性继承 依赖继承 插件继承 注意:上面的三个配置子工程都可以进行重写,重写之后以子工程的为准。...${artifactId}-${version} 说明: defaultGoal:执行构建时默认的goal或phase,如jar:jar或者package
Maven 解决的问题就是在项目构建的过程中,消除重复,不再一圈一圈,一轮一轮的重复配置、重复编译、重复测试等等。 那么它是如何解决的呢?...实际上是在运行插件 maven-archetype-plugin,注意冒号的分割,其格式为 groupId:artifactId:version:goal。...classifier:帮助定义构建输出的一些附属构件,附属构件与主构件对应。注意,不能直接定义项目的 classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成。...Maven 中的父与子 ? 这里只是做了一个类比,实际上笔者引出的是 pom.xml 中的 Parent 的使用。 也就是,在 Maven 项目中是如何定义子模块的?...:表示父模块 POM 的相对路径,当项目构建时,Maven 会首先根据 relativePath 检查父 POM,如果找不到再从本地仓库查找。
相关的信息 [mvn install -Dmaven.test.skip=true]: 构建时跳过测试(不编译测试代码,不运行测试代码) [mvn package -DskipTests]: 构建时跳过测试...(编译测试代码,不运行测试代码) [mvn clean install -pl module1,module2]: 构建指定的模块 [mvn clean install -pl module -am]:...构建指定模块及其依赖的模块 [mvn clean install -pl module -amd]: 构建指定模块及依赖其的模块 [mvn clean install -rf module]: 在完整的反应堆构建顺序基础上指定从哪个模块开始构建...在settings.xml中设置的profile不允许修改大部分pom元素,比如声明依赖或修改插件,而在项目中pom.xml中的profile中,可以修改pom原始的配置,比如maven的那些默认路径配置...-- 是否可选,默认false,如果是ture,则当其他项目依赖此项目时,其他项目不会依赖这个jar包,不建议在项目中使用可选依赖 --> true</optional
classifier是不能直接定义的,只能存在附加的构件(插件)时,才能(必须)添加。...插件配置 命令行配置:$mvn install -Dt 插件相关参数 //适用于当每次运行时,这个插件的配置都会变的情况 pom中全局配置: ...父pom中的插件不想在子类中默认使用 跟依赖管理一样,被包裹的插件配置不会被子pom主动获取,只有当子pom中声明了该插件的groupId和artifactId后,才会被继承 一个pom文件既可以是聚合也可以是父...pom 反应堆 在聚合构建时,构件模块的先后顺序的排列。...按书写的先后顺序进行构建 加料区 如果同一个项目中存在多个模块相互依赖时候,version和groupId可以使用\${project.groupId}(当前模块的groupId)和${project.verison
前言 现在各类项目为了降低项目、服务模块间的高度耦合性,提出了“前后端分离”,而前后端分离的项目该如何打包呢?...通过Maven构建项目,针对子父项目结构创建前端、后端工程,结构如下: spring-boot-vue-parent |---spring-boot # spring boot后端工程...配置pom.xml文件 1、父工程的pom.xml文件 满足Maven 子父项目结构配置要求,配置spring-boot-maven-plugin插件。 <?...Maven自动打包,打包时,只需关注后端项目(spring-boot子工程)打包即可,就会将前端、后端一起打包到后端成功中。...在子工程后端工程中,执行打包命令mvn clean package -Dmaven.test.skip=true, 或采用IDE中相应的Maven直接打包。
它是由 Apache 组织的开源,主要服务 Java 平台项目的构建、依赖管理和项目信息管理。 有了 Maven 我们只需编写一些配置然后运行一条命令就可以自动完成项目编译、测试、打包、发布等流程。...scope test 是表示依赖只对测试有效,在主代码中引入 junit 会报错。...runtime 运行时依赖,对测试和运行时有效,在编译时无效,比如 jdbc 驱动实现,只有在需要运行的时候在需要特定的驱动实现。...checksumPolicy 是 Maven 下载构件时会校验构件,默认时 warn 警告,还有 fail 项目构建会失败,ignore 忽略。...mvn dependency:tree # 查看项目依赖# 当然我们将插件的 groupId artifactId version 都写上 我们知道插件有它的基本坐标,Maven 是如何通过 dependency
System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。...比如:项目依赖junit4.9,通过在pom.xml中定义junit4.9的依赖即使用junit4.9,如下所示是junit4.9的依赖定义: <!...二.插件(plugin)目标(goal) maven 管理项目生命周期过程都是基于插件完成的。...附属构件与主构件对应,如上例中的主构件为my-app-0.0.1-SNAPSHOT.jar,该项目可能还会通过一些插件生成如my-app-0.0.1-SNAPSHOT-javadoc.jar,my-app
这些插件可以帮助开发人员更方便地管理构建过程中所需的各种资源,提高软件构建的效率和质量。 ---- 开源项目中的使用 我们来看下nacos这个开源项目的plugin是如何使用的。...以下是一个具体的使用案例: 首先,在 Maven 项目中添加 maven-jar-plugin 插件。...执行 Maven 构建。在项目根目录下运行以下命令: mvn clean package 这将清理项目目录并构建 JAR 文件。 查看生成的 JAR 文件。...这个例子展示了如何简单地使用 maven-jar-plugin 来打包 Maven 项目。在实际项目中,你可能还需要配置其他参数以满足不同的需求。...通过添加默认实现入口和默认规范入口,可以确保应用程序能够正确地运行并提供一些额外的规范信息。这通常用于创建可执行 JAR 文件,其中包含应用程序的主类。
但是这次,有一个多模块项目,我负责其中一个模块的开发,开发完成之后,发现打的包直接执行报找不到主类,这就有点奇怪了,所以就有了这篇文章。...如果在项目 pom 文件中,没有继承 spring-boot-starter-parent 的话,那么 spring-boot-maven-plugin 插件就没有了继承关系,所以只能自己手动指定主类加载...功能说明: build-info:生成项目的构建信息文件 build-info.properties repackage:这个是默认 goal,在 mvn package 执行之后,这个命令再次打包生成可执行的...run:这个可以用来运行 Spring Boot 应用 start:这个在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理 stop:这个在 mvn integration-test...-- 只运行一次 --> single </executions
:提供标准的、统一的项目结构 Maven可以帮我们: 构建工程, 管理jar, 编译代码, 自动运行单元测试, 打包, 生成报表, 部署项目,生成web站点。...:将生成的站点文档部署到特定的服务器上 7、插件 插件与生命周期内各阶段的指令绑定,在执行相应命令的时候其实就是运行的插件。...maven默认在各个生命周期上都绑定有预设的功能。 我们也可以通过插件自定义功能。 <!...2、聚合 由于各模块之间存在资源依赖的关系,将项目按模块划分之后,当其中一个模块升级了依赖,其他模块没有升级,就会导致项目无法运行。...我们也可以新建一个项目来统一维护,让所有模块都依赖这个项目的资源,其他模块要使用什么资源都直接配置到这个父模块即可。 作用:通过继承可以实现子工程使用父工程中的配置。
大多数项目都依赖于其他项目来正确构建和运行。即便Maven为你所做的只是管理这个列表,你也受益很多了。Maven在编译以及执行其它需要它们的插件目标时下载并链接依赖。...optional 当此项目本身是依赖项时,将依赖项标记为可选。例如,假设一个项目A依赖于项目B来编译一部分可能在运行时不使用的代码,那么我们可能不需要所有项目都使用项目B。...包含模块的项目称为多模块或聚合项目。模块是本POM列出的项目,并作为一个组执行。pom 打包项目可以通过将一系列项目列为模块(项目目录或pom文件的相对路径)来聚合构建。...Maven将对模块进行拓扑排序,这样依赖关系总是在依赖模块之前构建。...在子POM中使用这些属性可以控制Maven如何将父级的插件配置与子级的显式配置相结合。
runtime:运行时依赖范围 对于测试和运行的 classpath 有效,但在编译主代码时无效。如:JDBC 驱动的实现包。只有在执行测试或者运行项目时,才需要具体的 JDBC 驱动。...但是 X、Y 两个依赖对于 B 来讲可能是互斥的,如 B 是数据库隔离包,支持多种数据库 MySQL、Oracle,在构建 B 项目时,需要这两种数据库的支持,但在使用这个工具包时,只会依赖一个数据库。...initialize 初始化构建状态,例如设置属性。 generate-sources process-sources 处理项目资源文件,处理项目主资源文件。...下面是默认绑定插件与生命周期关系图: 自定义绑定 自定义绑定允许我们自己掌控插件目标与生命周期的结合。以生成项目主代码的源码 jar 为例。...-- 指定执行绑定插件的哪些目标 --> jar-no-fork </execution
runtime:运行时依赖范围 对于测试和运行的 classpath 有效,但在编译主代码时无效。如:JDBC 驱动的实现包。只有在执行测试或者运行项目时,才需要具体的 JDBC 驱动。...其实这个是 dependency 插件的功能,默认采用的是复写的策略,当构建声明处于同一 pom 中,且 groupid 和 artifactId 一致时,以最新声明为准,后面的覆盖前面的。...但是 X、Y 两个依赖对于 B 来讲可能是互斥的,如 B 是数据库隔离包,支持多种数据库 MySQL、Oracle,在构建 B 项目时,需要这两种数据库的支持,但在使用这个工具包时,只会依赖一个数据库。...initialize 初始化构建状态,例如设置属性。 generate-sources process-sources 处理项目资源文件,处理项目主资源文件。...-- 指定执行绑定插件的哪些目标 --> jar-no-fork </execution
01 前言 在日常的maven项目开发中,我们自己开发maven插件的机会是比较少,因为市面上的maven插件基本上就可以满足我们的日常开发需求。...,compile就是目标的名称 @phase :默认将该目标绑定至default声明周期的某个阶段,这样在配置使用插件目标时,就无需声明phase,如maven-surefire-plugin的test...大部分插件目标需依赖一个项目才能运行,但是,maven-help-plugin的system目标例外,它用来显示系统属性和环境变量信息,无需实际项目。...false @aggregator:当mojo在多模块项目上运行时,该标注表示目标只会在顶层模块运行。...3.5 03 在项目中如何使用自定义的插件
领取专属 10元无门槛券
手把手带您无忧上云