【问题标题】:How can I disable default lifecycle phases in Maven 3?如何禁用 Maven 3 中的默认生命周期阶段?
【发布时间】:2013-02-21 08:41:07
【问题描述】:

禁用我的意思是完全,完全从生命周期中删除阶段,因此它甚至不会被调用。

我可能需要自定义生命周期,但我找不到直接在 pom.xml 中定义它的简单方法。看来我需要编写一个插件来列出我想要的阶段。

例如,我希望 default-testResourcesdefault-testCompiledefault-test 阶段永远不会发生,并将我的构建日志从这里转为:

[INFO] ------------------------------------------------------------------------
[INFO] Building HelpDesk Webapp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helpdesk ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory d:\proj\HelpDesk\repo\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.0:compile (default-compile) @ helpdesk ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ helpdesk ---
[INFO] Not copying test resources
[INFO]
[INFO] --- maven-compiler-plugin:3.0:testCompile (default-testCompile) @ helpdesk ---
[INFO] Not compiling test sources
[INFO]
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ helpdesk ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-war-plugin:2.3:war (default-war) @ helpdesk ---
[INFO] Packaging webapp
[INFO] Assembling webapp [helpdesk] in [d:\proj\HelpDesk\repo\target\helpdesk]
[INFO] Processing war project
[INFO] Copying webapp resources [d:\proj\HelpDesk\repo\src\main\webapp]
[INFO] Webapp assembled in [40 msecs]
[INFO] Building war: d:\proj\HelpDesk\repo\target\helpdesk.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

进入这个:

[INFO] ------------------------------------------------------------------------
[INFO] Building HelpDesk Webapp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helpdesk ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory d:\proj\HelpDesk\repo\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.0:compile (default-compile) @ helpdesk ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-war-plugin:2.3:war (default-war) @ helpdesk ---
[INFO] Packaging webapp
[INFO] Assembling webapp [helpdesk] in [d:\proj\HelpDesk\repo\target\helpdesk]
[INFO] Processing war project
[INFO] Copying webapp resources [d:\proj\HelpDesk\repo\src\main\webapp]
[INFO] Webapp assembled in [40 msecs]
[INFO] Building war: d:\proj\HelpDesk\repo\target\helpdesk.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

【问题讨论】:

  • 问题是你为什么需要这样改变生命周期的目的是什么?
  • @khmarbaise 有点学术兴趣。我不喜欢 Maven 调用我知道没有工作可做的阶段和插件,消耗计算资源并添加无用的日志条目的想法。我知道单元测试被 Maven 认为是好的实践,但我仍然想知道我是否可以禁用它们。到目前为止,我发现的最佳方法是 maven.test.skip 变量,它将日志最小化为我发布的内容。这个问题源于我期望灵活调整 Maven 以适应我的项目、我的布局和我的构建阶段。我意识到它对性能的影响很小,甚至不明显。
  • @khmarbaise 为什么我不能maven.package.skip?我有配置文件,激活后会禁用我的验证插件。但这对我来说很危险,我想禁止 JAR/shade/source/etc 插件创建包,因为它们是不完整的。基本上我想停止构建
  • 虽然我不确定每个生命周期阶段,但可以在默认生命周期中使用 `` -Dmaven.skip.test=true 跳过 test 生命周期阶段``` 在这里查看更多:stackoverflow.com/questions/5784778/….

标签: maven maven-3


【解决方案1】:

如果您想继续使用预定义的包装(jar、war 等),您不能完全删除它们。您可以将包装保留为pom,并通过将您想要的目标绑定到所需阶段来定义自己的生命周期,或者您可以完全定义自己的生命周期。您还可以将默认目标绑定到阶段none,以防止目标执行任何实际工作,如图所示。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
        <execution>
            <id>default-testResources</id>
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

所有这些 - khmarbaise 的问题是一个很好的问题。通常,更改现有的预构建生命周期并不是最佳做法。

【讨论】:

  • 使用给定的解决方案,您只禁用特定插件,而不禁用生命周期本身。
  • 同意,将阶段设置为none 不会改变生命周期。如果有其他插件绑定到相同的生命周期阶段,它们仍然会运行。这也是我提供其他想法的原因。
  • 找到 goals listing 用于捆绑包装类型。该页面说我需要编写一个插件来定义自定义包装类型和它的生命周期。这是唯一的方法吗?我不能用一些&lt;lifecycle&gt; 标签直接在我的项目的 POM 中定义它吗?
  • 来自@Alex 的goals listing 链接已损坏。我在the internet archive找到了一个保存的版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2016-08-05
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多