首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你怎么强迫maven MOJO在构建结束时只执行一次?

在 Maven 构建过程中,有时我们需要在构建结束时执行一些特定的操作,例如执行一些测试或者部署任务。为了实现这一目标,我们可以使用 Maven 的插件(Plugin)和执行器(Mojo)。

在 Maven 中,插件是一种特殊的工具,它可以扩展 Maven 的功能。插件通常包含一个或多个执行器(Mojo),这些执行器是 Maven 构建过程中的一个步骤。执行器负责执行特定的任务,例如编译、测试、打包等。

要在构建结束时执行一个执行器,我们可以将该执行器绑定到 Maven 的特定生命周期阶段。Maven 的生命周期分为三个阶段:validate、compile 和 package。我们可以将执行器绑定到其中一个阶段,以便在构建过程中的该阶段执行该执行器。

例如,如果我们想要在构建结束时执行一个名为 my-executor 的执行器,我们可以在 Maven 的配置文件中添加以下代码:

代码语言:xml<build>
复制
 <plugins>
   <plugin>
     <groupId>com.example</groupId>
     <artifactId>my-plugin</artifactId>
     <version>1.0.0</version>
      <executions>
       <execution>
         <phase>package</phase>
          <goals>
            <goal>my-executor</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

在上面的代码中,我们将 my-executor 执行器绑定到了 package 阶段。这意味着在构建过程中的 package 阶段,Maven 会执行 my-executor 执行器。

如果我们只想让执行器在构建结束时执行一次,我们可以使用 Maven 的特性来实现。Maven 的特性是一种特殊的配置,它可以控制 Maven 构建过程中的一些行为。我们可以使用特性来控制执行器的执行次数。

例如,如果我们想要在构建结束时只执行一次 my-executor 执行器,我们可以在 Maven 的配置文件中添加以下代码:

代码语言:xml<build>
复制
 <plugins>
   <plugin>
     <groupId>com.example</groupId>
     <artifactId>my-plugin</artifactId>
     <version>1.0.0</version>
      <executions>
       <execution>
         <phase>package</phase>
          <goals>
            <goal>my-executor</goal>
          </goals>
         <configuration>
            <skip>${mojo.executed}</skip>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

在上面的代码中,我们使用了一个名为 skip 的配置项,它可以控制执行器是否要跳过执行。我们将 skip 配置项的值设置为 ${mojo.executed},这意味着如果 mojo.executed 属性已经存在,那么执行器将跳过执行。

mojo.executed 属性是 Maven 构建过程中的一个全局属性,它可以用来控制执行器的执行次数。当执行器第一次执行时,Maven 会将 mojo.executed 属性设置为 true。因此,如果我们将 skip 配置项的值设置为 ${mojo.executed},那么在构建结束时,执行器只会执行一次。

总之,要在构建结束时只执行一次 Maven 执行器,我们可以将执行器绑定到 Maven 的特定生命周期阶段,并使用 Maven 的特性来控制执行器的执行次数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

从青铜到王者,Maven全了解

2.配置仓库 Maven 仓库有三种类型: 本地(local) 中央(central) 远程(remote) 当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库: 步骤 1 -...本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。...也是按顺序执行的,一个phase被执行时,绑定到phase里的goal会按绑定的时间被顺序执行,不管phase己经绑定了多少个goal,自己定义的goal都可以继续绑到phase中 mojo: lifecycle...与phase与goal都是概念上的东西,mojo才是做具体事情的,可以简单理解mojo为goal的实现类,它继承于AbstractMojo,有一个execute方法,goal等的定义都是通过mojo里定义一些注释的...Clean生命周期一共包含了三个阶段: pre-clean 执行一些需要在clean之前完成的工作 clean 移除所有上一次构建生成的文件 post-clean 执行一些需要在clean之后立刻完成的工作

44720

从青铜到王者,Maven全了解

2.配置仓库 Maven 仓库有三种类型: 本地(local) 中央(central) 远程(remote) 当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库: 步骤 1 -...本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。...也是按顺序执行的,一个phase被执行时,绑定到phase里的goal会按绑定的时间被顺序执行,不管phase己经绑定了多少个goal,自己定义的goal都可以继续绑到phase中 mojo: lifecycle...与phase与goal都是概念上的东西,mojo才是做具体事情的,可以简单理解mojo为goal的实现类,它继承于AbstractMojo,有一个execute方法,goal等的定义都是通过mojo里定义一些注释的...Clean生命周期一共包含了三个阶段: pre-clean 执行一些需要在clean之前完成的工作 clean 移除所有上一次构建生成的文件 post-clean 执行一些需要在clean之后立刻完成的工作

47200

教小老弟 快速掌握 maven插件

插件是Maven的核心功能,它允许多个项目中重用通用的构建逻辑。他们通过项目描述(项目对象模型(POM))的上下文中执行“操作”(即创建WAR文件或编译单元测试)来实现此目的。...可以定义阶段,插件会使用它的 phase 元素开始处理。我们已经使用了 clean 阶段。 可以通过绑定到插件的目标的方式来配置要执行的任务。...第二列中,冒号前面是插件的前缀(prefix),是配置和使用插件的一种简化方式;冒号后面即是绑定的插件目标。 的仓库中有哪些maven插件? ?...Mojo指定有关目标的元数据:目标名称,它适合生命周期的哪个阶段,以及它期望的参数。 Mojo术语是maven2中引入,它是对如何编写插件的完整重写。...总结 Maven插件是Maven的核心功能,插件类型有构建类型和报告类型,插件可以有多个目标也就是可以理解为多个功能。自定义插件主要两步:依赖相关jar包和重写Mojo

46320

下一代构建工具:Gradle

多少次注视着XML 文件,只是想要弄清楚构建怎么工作的?而且为什么不能以更简单的方式向构建中添加定制逻辑?...而且,即使大费周折地这么做了,也无法改变构建过程需要适应工具,而不是工具去适应构建过程的事实。 也许现有的解决方案中,遇到一部分问题。通常,需要牺牲非功能性的需求来为企业级自动化领域建模。...如果你想要打破Maven 的约定,则需要写插件,叫作Mojo,这通常是唯一的解决方案。Mojo这个名字暗示了这是一种直接、简单和迷人的方式来扩展Maven。...但事实上,Maven 中写插件是累赘和非常复杂的。...不要改变一个正在运行的系统,说呢?的团队已经花费大量的时间来建立项目构建代码基础设施。Gradle并不强迫完全迁移所有的构建逻辑。

2.1K10

Maven进阶》1.maven 项目生命周期与构建原理

maven 设计上将生命周期阶段的抽象和对应阶段应该执行的行为实现分离开,maven这些实现放到了插件中,这些插件本质上是实现了maven留在各个生命周期阶段的接口。...如何修改默认的目录配置 maven项目工程对应project的 pom.xml中,-->节点下,可以指定自己的目录路径信息: <!...六、maven为生命周期阶段绑定特定行为动作的机制(即插件原理) 为maven生命周期的某些阶段绑定特定行为或动作,简单点就是调用一段代码而已,maven将需要执行的逻辑抽象成了一个接口,接口为 Mojo...maven通过为某一个项目的生命周期阶段绑定若干个Mojo,然后依次执行Mojo.execute()方法,从而实现特定生命周期应该执行的动作。...maven默认生命周期的工作机制,以及maven项目构建过程中的基本原理和机制。

87720

Mavenmaven 插件开发实战

而 @phase 是绑定插件执行的生成周期,比如你绑定在 clean 这个周期,那你执行 clean 的时候会自动触发的插件。 @parameter 用来指定插件的参数。...= , // 提示此Mojo是否线程安全,线程安全的Mojo支持并行构建中被并发的调用 threadSafe = ) /.../ (since Maven 3.0) // 何时执行Mojo @Execute( goal = "", // 如果提供goal,则隔离执行Mojo...我们写插件时,当然不会这样写,但是通过这个 demo,就掌握了 maven 插件的大部分知识,可以自己做一些很有趣的插件。 4....如果上面配置的都正确,那么 idea 右侧的 Maven 中,配置的项目的 Plugins 下会多了一个 demo(具体根据插件项目的名称),而 demo 里面会有一个 demo:hello,其中这个

1.7K40

让我们一起做Maven实战,纯干货

一、初识Maven Maven是Apache组织中的一个很成功的开源项目,Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。...优点: 1> 简单 2> 持续集成CI 3> 构建简单 4> 插件丰富 5> 约定优于配置 二、下载安装 下载:官网http://maven.apache.org/ 下载即可 安装:将下载好的包解压...本地jar包不在maven仓库中的,比如自己写的jar包其他项目想依赖怎么办:上传到私服,install到本地,add classpath 四、依赖原则 通过具体的列子解释,项目的结构图及依赖关系: ?...Maven把项目的构建划分为不同的生命周期,常见的生命周期有下图的:clean Lifecycle,Default Lifecycle ,Site Lifecyle,比如Clean Lifecycle中的...这个时候执行mvn compile该plugin是不会运行的,因为自定插件是LifecyclePhase.PACKAGE的,参考上面的生命周期图complie是package之前install是package

49530

Maven的这三个用法一定要会

1、自定义archeType模板 1.1、什么是archeType 我们创建maven项目的时候,会发现有这么多的apache提供的模板。...@Mojo定义插件的goal名字。 2.1.4、clean and install 执行mvn clean install,target目录下会生成这样一个jar包,这就是插件包。...这时候会发现maven插件中自动会添加一个plugins选项: 执行该插件:mvnmyprovide:fantj 或者直接点击: 3、Profile按环境打包 日常开发中,我们项目的开发环境和生产环境以及测试环境往往是不同的...项目上生产环境时,就需要修改这些参数,给开发造成不便。为了解决该问题,Maven 2.0引入了构建配置文件的概念(build profiles)。...在哪里声明呢它可以每个项目的pom.xml文件中声明,也可以maven的用户setting.xml下声明,也可以maven全局环境下设置setting.xml,详情如下。

64830

测试覆盖率 之 Cobertura的使用

代码覆盖率是对整个测试过程中被执行的代码的衡量,它能测量源代码中的哪些语句测试中被执行,哪些语句尚未被执行。 为什么要测量代码覆盖率? 众所周知,测试可以提高软件版本的质量和可预测性。...但是,知道的单元测试甚至是的功能测试实际测试代码的效果如何吗?是否还需要更多的测试? 这些是代码覆盖率可以试图回答的问题。...通常,我们应该采用合理的覆盖目标,力求代码覆盖率在所有模块中实现均匀覆盖,而不是看最终数字的是否高到令人满意。...举例:假设代码覆盖率某一些模块代码覆盖率很高,但在一些关键模块并没有足够的测试用例覆盖,那样虽然代码覆盖率很高,但并不能说明产品质量就很高。...插件的一些缺陷: 1、不支持lambda表达式,mvn命令的执行中会报错,即使通过git仓库下载最新Cobertura代码自己打包生成的jar包,虽然没有报错,但是依然不能正常产生报告 2、根目录下的测试覆盖率文件似乎只是随机选了底下一个

1.8K40

常用Maven插件介绍(收藏大全)

我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的。...接下来笔者根据自己的经验介绍一些最常用的Maven插件,不同的环境下它们各自都有其出色的表现,熟练地使用它们能让的日常构建工作事半功倍。...用户可以直接在该插件的配置以Ant的方式编写Target, 然后交给该插件的run目标去执行一些由Ant往Maven迁移的项目中,该插件尤其有用。...做一些基本配置后(例如Web应用的contextPath和自动扫描变更的时间间隔),只要执行 mvn jetty:run ,然后IDE中修改代码,代码经IDE自动编译后产生变更,再由jetty-maven-plugin...了解常用的Maven插件能帮助你事倍功半地完成项目构建任务,反之就可能会因为经常遇到一些难以解决的问题而感到沮丧。

3K10

自动化工具之Appium持续集成

背景 持续集成是老生话谈的事情,用的好不好,看自己公司与使用场景,但做为测试开发一种技能还是有必要掌握,虽然大家不怎么做,话说技多不压身,今天咱们谈一谈咱们把appium+maven+java...kill OperationalCmd.killServer(); //启动服务 OperationalCmd.startAppium(); try { //执行的类...注意: 简单配置上面选项即可,如果需要邮件,或者代码管理其他的自己选择配置,再这里就不介绍,保存上面选项; 选择构建 ? 左边看见开始构建: ? 点击日志: ? 显示编译信息: ? ? ?...写测试用例同学不用关心怎么封装的,只有写测试用例即可。 报告 ? 总结 总体上集成还是比较简单,关键是pom文件配置,工程怎么启动,还有jenkis怎么配置。...送大家一句话: 将来的一定会感谢现在依然健康拼搏的

65210

Java Maven POM配置参考

这些定义了特定包结构的每个相应构建生命周期阶段执行的目标的默认列表:请参阅Plugin Bindings for default lifecycle Reference详细信息。...大多数项目都依赖于其他项目来正确构建和运行。即便Maven所做的只是管理这个列表,也受益很多了。Maven在编译以及执行其它需要它们的插件目标时下载并链接依赖。...此外,Maven会自动引入这些依赖项的依赖项(传递依赖项),使的列表可以关注项目所需的依赖项。...以下情况中,假设正在使用maven-embedder,并且希望管理你使用的依赖项,因此排除了所有传递依赖项: <project xmlns="http://<em>maven</em>.apache.org/POM...<em>Maven</em>将对模块进行拓扑排序,这样依赖关系总是<em>在</em>依赖模块之前<em>构建</em>。

45630

Maven系列第10篇:设计自己的maven插件【高手必备】

每个目标对应一个java类,这个类maven中叫做MOJOmaven提供了一个Mojo的接口,我们开发插件也就是去实现这个接口的方法,这个接口是: org.apache.maven.plugin.Mojo...对插件进行构建的时候会根据这个注解来找到这个插件的目标,这个注解中还有其他参数,后面详细介绍。...; } 安装插件到本地仓库 maven-chat10/pom.xml目录执行下面命令: mvn clean install -pl :demo1-maven-plugin 注意上面命令和在demo1...-maven-plugin/pom中执行mvn clean install效果是一样的,只是这个地方使用了maven裁剪的功能,对这块命令不熟悉的可以看:Maven系列第8篇:大型Maven项目,快速按需任意构建...,其他格式也可以,不过此处我们说这种格式,这个是最常用的格式。

3.3K30

程序员的31大Maven面试问题及答案

Maven 的主要功能主要分为 5 点: 依赖管理系统 多模块构建 一致的项目结构 一致的构建模型和插件机制 2.什么选用 Maven 进行构建? 首先,Maven 是一个优秀的项目构建工具。...使用 maven,可以很方便的对项目进行分模块构建,这样开发和测试打包部署时,效率会提高很多。 其次,Maven 可以进行依赖的管理。...codehaus/mojo/myproject/v1.0.0 8.Maven的依赖范围有哪些(scope中指定) compile:默认范围,如果未指定任何范围,则使用该范围。...它在编译和测试类路径上可用,不可传递。 runtime:此范围表示编译不需要依赖项,但需要执行依赖项。它在运行时和测试类路径中,但不在编译类路径中。...clean - 清理上一次build项目生成的文件。 post-clean - 执行完成项目清理所需的工作。 default: validate - 验证项目是否正确且所有必要的信息都可用。

19820

Maven中如何禁止插件(plugin)子模块(module)上执行

多模块工程下,父工程下执行的插件默认会在其所有的子模块上也执行一遍,大多数情况下这是合理的,比如像compiler这样的插件,但是有时候也种行为可能并不是开发人员所期望的,比如使用exec插件调用一个外部脚本或命令...,一般来说开发人员希望父工程下maven exec:exec来执行一次该命令即可,但在多模块下,会发现这个同样的命令被执行了多次,多出来的执行每个子模块上执行的,于是我们需要一种方法来禁用插件子模块上的执行...Disable plugin exec running on sub-modules -->                             org.codehaus.mojo...这样的插件,虽然插件被禁用了,但是maven的命令行还会输出INFO信息告知某某模块的exec被skip了,这些信息会干扰一个外部脚本或命令执行的输出,所以可以maven exec:exec的后面加上...-q参数来disable maven的日志信息。

2.2K20
领券