【问题标题】:How to skip the release or specific modules in the maven repo如何跳过 maven repo 中的版本或特定模块
【发布时间】:2012-12-27 02:21:15
【问题描述】:

嘿嘿,

我有一个采用这种结构的 maven 项目:

父母:

  • 列表项
  • API 模块
  • 模块2
  • ...
  • 模块5
  • 测试
  • 分发/组装

所以首先我运行父模块,然后我运行构建 api 的模块,然后是依赖于 api 的模块,然后是一个包含测试工具的测试模块,最后我运行一个程序集/分发,其中我将一些模块打包在档案中。 由于一些问题,我无法真正改变方式,到目前为止它工作得非常完美。

我使用 jenkins 将其发布到 maven 存储库,但我只想发布 API 和一些模块,而不是测试模块和分发模块。 有没有办法跳过它们? 不想发布我并不真正需要的东西:/

【问题讨论】:

  • 这是一个多模块构建吗?你父 pom.xml 有模块条目吗?像 API 模块这样的模块有父级(父级)吗?
  • 是的,多模块设置完美运行我只想从 maven repo 中排除模块:P

标签: maven deployment jenkins repository


【解决方案1】:

为了正确理解您,您仍然希望运行测试模块,但您不想部署/发布它们。 maven-deploy-plugin 来救援! To 工件仍将被构建,但不会被部署。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <skip>true</skip>
    </configuration>
  </plugin>

但是,jenkins 发布插件仍然会发布所有工件。与其使用 jenkins 发布插件,不如考虑使用 maven-release-plugin 发布,这很容易做到:

mvn release:prepare
mvn release:perform

由于default goalsdeploysite,应该没问题。

只要确保你的根 pom 中有一个scm 标签:

<scm>
    <connection>scm:svn|git:https://...</connection>
    <developerConnection>scm:svn|git:https://...</developerConnection>
</scm>

并且您的版本控制工具命令(git、svn、...)在 PATH 上可用。

【讨论】:

  • 我已经尝试过了,但我认为这是 jenkins 发布所有模块的问题:/
  • k 可以使用 deploy 插件进行“正常”部署,但使用 jenkins 插件可能不行:/
  • 我认为你应该调查一下。詹金斯可能只是在使用 Maven。 Jenkins 怎么能绕过 pom 中的设置?
  • @DanielKaplan hmm 似乎 jenkins 插件使用它自己的方式,因为它在构建完成后释放它。在控制台中它只列出所有模块,准备工件并上传它们。所以也许没有办法:/。所以解决方案可能是使用部署 maven 插件来完成。插件也没有设置:/
  • 这对我不起作用 - 我在根模块中定义了发布插件,并在子模块中部署了跳过配置的插件。当我运行mvn release:perform :'(
【解决方案2】:

聚合器项目的目的是结合简单项目的构建要求。如果您的基本项目有不同的构建要求,请考虑添加一个新的聚合器项目。

在您当前的聚合器项目中禁用部署到您的 Maven 存储库,并创建一个仅包含您希望部署的模块的新聚合器项目。

将此新项目添加到 Jenkins,使其依赖于您的原始项目并将其配置为部署到您的存储库。

【讨论】:

  • 您的术语似乎不正确,您所描述的似乎是父项目。父项目用于配置,聚合器项目定义要构建的项目组。有时父级和聚合器是同一个项目。
  • 构建要求 = 需要构建,而不是配置要求/共同点。不幸的是,一些文献未能区分聚合和父母身份,它们有不同的目的,最好分开。这导致人们认为他们的项目最多可以包含在一个聚合器中。 OP 似乎就是这种情况。
【解决方案3】:

您可以添加一个 maven 命令行选项来指定要在 jenkins 中构建的模块。

-pl,--projects <arg>                   Comma-delimited list of specified
                                       reactor projects to build instead
                                       of all projects. A project can be
                                       specified by [groupId]:artifactId
                                       or by its relative path.

【讨论】:

  • 这将完全排除项目,但我只想跳过 maven repo 中的部署
  • 在 Jenkins 中,您可以多次运行 maven。因此,您可以对所有项目进行编译,只发布您想要的项目。
  • @DanielKaplan hm jenkins 发布插件只对所有模块运行一次
猜你喜欢
  • 2019-12-15
  • 1970-01-01
  • 2017-09-26
  • 2014-07-10
  • 2021-02-25
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多