【问题标题】:Which Maven goal to use as no-op (for scripting purposes)?哪个 Maven 目标用作无操作(用于脚本目的)?
【发布时间】:2012-07-10 20:04:09
【问题描述】:

我在 Jenkins CI 上有一个脚本,它可以选择依赖:去离线。另一种选择应该是什么都不做。但我不能把“”放在那里——它一定是一个目标。

那么 - 你会选择哪一个?它应该:

  • 位于中心,始终可达
  • 花费最少的时间
  • 输出最少
  • 没有副作用

我在想一些帮助:...目标,但那些往往有很多输出。有更好的吗?

【问题讨论】:

  • 为什么要通过脚本离线并使用 mvn -o 选项?出于什么目的?
  • go-offline 确保下载所有必要的依赖项,即使是那些没有它就无法下载的依赖项。主要是插件部门。不确定其背后的机制。目的是能够在其他无法访问我们公司 VPN 上的存储库的机器上构建。
  • 嗯。在 Maven 中没有存储库访问权限的构建是没有意义的。可能是我没有看到重点..
  • 在企业业务产品化中确实如此。想象一个项目有来自几十个来源的 1500 个依赖项。
  • 如果你有几十个来源,你应该使用你的内部存储库管理器。我真的不明白这一点。这是对生产的一种部署吗?如果是,那么这不是 Maven 的工作。

标签: maven plugins


【解决方案1】:

您可以使用此目标和选项:

mvn --quiet help:help

-q,--quiet 选项导致输出仅显示错误。

请注意,Jenkins 允许您添加 --quiet 之类的选项,如用法所示:mvn [options] [<goal(s)>]。您可以在 Jenkins 作业的“目标和选项”字段中配置这些。

查看mvn --help 输出以获取更多信息。

我知道这是一个老问题,但是当我有同样的要求时我遇到了这个问题并且仍然没有答案,所以我会为将来需要它的任何人发帖。

【讨论】:

  • 甚至 help:help 下载东西。如果真的有一个 noop 目标,那就太好了。例如,mvn help:evaluate -Dexpression=project.version 不需要下载任何东西来从根 pom 文件中提取版本...但是该命令需要很长时间,因为它仍然会下载很多...东西
【解决方案2】:

这仍然取决于当前项目,但如果您出于某种原因不想对特定插件进行硬编码,这可能会很有用:

mvn -pl ./ validate

-pl ./ 表示仅当前项目,忽略子模块。或者,您可以通过相对路径或[groupId]:artifactId 指定特定项目。
validateDefault Lifecycle 的第一阶段。不会改变或构建任何东西。

或者,如果您根本没有 maven 项目,则可以在没有它的情况下执行一些 maven 插件,或者更确切地说是特定的插件目标。例如:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:help

如果在当前目录中看到 POM,它仍然会扫描项目。当然,您仍然需要在本地存储库中拥有该插件。

【讨论】:

    猜你喜欢
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多