gpt4 book ai didi

maven - 创建新阶段

转载 作者:行者123 更新时间:2023-12-03 01:21:02 32 4
gpt4 key购买 nike

我正在使用 Maven 开发一个项目,我需要两个新阶段:“分析”和“评估”(用于数据分析的不同阶段)。我已经阅读了我能找到的所有文档,并创建了尽可能接近正确的 Components.xml 和 Lifecycle.xml 版本,但 Maven 拒绝运行新阶段。 (我应该强调,让我的插件工作没有问题,将它们绑定(bind)到默认生命周期提供的现有阶段也没有问题。我的问题是我创建的新阶段似乎被 maven 忽略了。)我该怎么办需要做什么才能让我的新阶段发挥作用?

lifecycles.xml:

<lifecycles>
<lifecycle>
<id>lenskit</id>
<phases>
<phase>
<id>analyze</id>
<executions>
<execution>
<goals>
<goal>greet</goal>
</goals>
</execution>
</executions>
</phase>
<phase>
<id>validate</id>
<executions>
<execution>
<goals>
<goal>greet</goal>
</goals>
</execution>
</executions>
</phase>
</phases>
</lifecycle>
</lifecycles>

组件.xml:

<component-set>
<components>
<component>
<role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
<role-hint>lenskit</role-hint>
<implementation>
org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping
</implementation>
<configuration>
<id>lenskit</id>
<phases>
<phase>get-data</phase>
<phase>analyze</phase>
<phase>eval</phase>
</phases>
<default-phases>
<verify> org.apache.maven.plugins:maven-resources-plugin:resources </verify>
<get-data> org.riedl:hello-lenskit-plugin:greet </get-data>
<analyze> org.riedl:hello-lenskit-plugin:greet </analyze>
<eval> org.riedl:hello-lenskit-plugin:greet </eval>
<package> org.riedl:hello-lenskit-plugin:greet </package>
</default-phases>
</configuration>
</component>
</components>
</component-set>

最佳答案

Maven 邮件列表上的一个向导向我指出了一个完整的工作示例,它完全符合我的要求:它创建一个自定义生命周期,其中的阶段可以命名为您想要的任何名称,并允许您从 Maven 命令行使用该生命周期。示例位于:

https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-scm-publish-plugin

缺少的关键见解是,components.xml 文件必须同时具有 LifecycleMapping 组件和 Lifecycle 组件。正确的、有效的 Components.xml 如下。

请注意,您只能定义一个附加生命周期(即三个默认生命周期之外的生命周期:构建、清理和站点生命周期)。原始生命周期及其阶段将始终存在,并且您不能在新生命周期中包含任何名称与现有生命周期匹配的阶段,这太糟糕了,因为这使得重新定义项目的完整生命周期变得更加尴尬。尽管如此,这仍然是一个很好的进步。

此外,请记住,当您使用新的生命周期时,必须将其标记为扩展:

<extensions>true</extensions>

因此允许插件重新定义生命周期。要指示您的 pom.xml 应使用新的生命周期,请将生命周期名称包含为项目的“打包”。

<component-set>
<components>
<component>
<role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
<role-hint>lenskit</role-hint>
<implementation>
org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping
</implementation>
</component>
<component>
<role>org.apache.maven.lifecycle.Lifecycle</role>
<implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
<role-hint>lenskit</role-hint>
<configuration>
<id>lenskit</id>
<phases>
<phase>get-data</phase>
<phase>analyze</phase>
<phase>eval</phase>
</phases>
<default-phases>
<get-data>org.riedl:hello-lenskit-plugin:greet</get-data>
<analyze>org.riedl:hello-lenskit-plugin:greet</analyze>
<eval>org.riedl:hello-lenskit-plugin:greet</eval>
</default-phases>
</configuration>
</component>
</components>
</component-set>

关于maven - 创建新阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12433120/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com