当前位置: 首页 > 面试题库 >

在我的Maven插件运行之前,如何执行一组目标?

习宸
2023-03-14
问题内容

我正在编写一个Maven插件(Mojo),该插件需要在运行之前执行一组标准的其他插件执行。

是否有一种机制可以在插件中声明所有目标,所以我不必依靠用户在其POM中定义所有目标?


问题答案:

您可以通过定义自定义生命周期并在通过execute注释执行Mojo之前调用该生命周期来做到这一点。

在您的Mojo中,在Javadoc中声明要执行的生命周期:

/**
 * Invoke the custom lifecycle before executing this goal.
 * 
 * @goal my-goal
 * @execute lifecycle="my-custom-lifecycle" phase="process-resources"
 */
public class MyMojo extends AbstractMojo {
...

然后在src / main / resources / META-INF / maven / lifecycle.xml中定义自定义生命周期。

生命周期有点像plexus的components.xml,但是允许您为这些目标指定配置。

请注意,语法与pom中的插件配置略有不同。您可以使用:作为分隔符,而不是指定单独的groupId,artifactId和version元素来定义目标,否则它与pom中插件配置的执行元素在很大程度上是相同的表示法。您甚至可以在lifecycle.xml中使用某些属性(尽管可能并非所有属性都受支持,但我需要检查一下)。

以下示例在流程资源阶段使用不同的配置两次调用了依赖插件:

<lifecycles>
  <lifecycle>
    <id>download-dependencies</id>
    <phases>
      <phase>
        <id>process-resources</id>
        <executions>
          <execution>
            <goals>
              <goal>
                org.apache.maven.plugins:maven-dependency-plugin:copy-dependencies
              </goal>
            </goals>
            <configuration>
              <includeScope>compile</includeScope>
              <includeTypes>war</includeTypes>
              <overWrite>true</overWrite>
              <outputDirectory>
                ${project.build.outputDirectory}/wars
              </outputDirectory>
            </configuration>
          </execution>
          <execution>
            <goals>
              <goal>
                org.apache.maven.plugins:maven-dependency-plugin:copy-dependencies
              </goal>
            </goals>
            <configuration>
              <includeScope>compile</includeScope>
              <includeTypes>jar</includeTypes>
              <overWrite>true</overWrite>
              <outputDirectory>
                ${project.build.outputDirectory}/jars
              </outputDirectory>
            </configuration>
          </execution>
        </executions>
      </phase>
    </phases>
  </lifecycle>
</lifecycles>

通过这种方法,在process-resources派生的生命周期阶段,每个配置将对依赖插件进行一次调用(所有插件都在Mojo中定义的执行中发生)。

在lifecycle.xml中,您可以定义生命周期的多个阶段,以及每个阶段的多个执行。可用阶段在Maven生命周期中定义。

您可以在Maven书籍的“ 创建自定义生命周期”部分中找到有关生命周期的更多信息。它没有给出允许的全部清单。我知道的唯一其他参考来自Maven 2
alpha
,所以可能不是最新的



 类似资料:
  • 我是maven的新手,学习如何以及何时在插件中执行阶段/目标 假设我的pom中有以下代码片段 现在,如果我执行mvn安装,安装之前的modello的所有阶段(以及每个阶段对应的所有目标)都将执行。正当 但是,如果进行以下修改以引入特定目标,则只会执行一个目标,即java目标(因为它位于安装阶段之前的生成源代码阶段)。对吗?

  • 我们使用maven surefire插件并行运行测试。由配置文件指定。 我希望在surefire并行运行我的测试之前,每次maven的整个执行过程中只能运行一次方法。我怎么能那么做?

  • 问题内容: 我有一个安装程序,其中我的大多数项目都需要同时运行xtend插件才能实现compile和testCompile目标。我在pluginManagement部分中对其进行描述: 现在,有些项目不需要一个目标或另一个目标。我尝试了继承的标签,使用了随机属性,但是没有用。如何覆盖执行以仅包含所需目标? 更新 :这个故事的结论是,个人目标不能残废。可以管理的最小范围是。 问题答案: 通常,您只能

  • 我一直在尝试重命名tika应用程序类。由于类路径上的重复类,存在加载冲突。当我尝试运行maven install-e时,它会抛出错误,我想使用 Apache.Tika组织 分类为 com.test1.tika pom.xml文件如下所示 mvn package命令的错误如下: null

  • 问题内容: 我有一个配置了执行的插件(antrun),该插件具有一个id,并且未绑定到任何阶段。我可以直接从命令行执行此执行吗? 用以下命令运行它: 或者至少 问题答案: 133 此功能已实现为MNG-5768,并且在Maven 3.3.1中可用。 更改将: 扩展直接插件调用语法,以允许可选的@ execution-id参数,例如org.apache.maven.plugins:maven-rem

  • 有问题的错误消息是 从文件夹中的工作正常。我的项目结构是 还有由定义 由下式定义 这是一个比这个问题中的版本修复升级晚得多的版本 插件在子模块pom而不是父pom中,因为这里的错误 我尝试删除