【问题标题】:AutoUpdate issues with Mavenized NetBeans Platform ApplicationMavenized NetBeans 平台应用程序的自动更新问题
【发布时间】:2015-04-15 06:52:59
【问题描述】:

我最近将基于 NetBeans 平台 (NBP) 的应用程序从 Ant 迁移到 Maven。我几乎想通了 Maven,但有一件事我仍然无法理解,那就是版本系统/约定。

似乎 Maven 世界中拥有由多个模块组成的大型 Maven 项目的每个人都使用一个父 pom,他们在其中定义一个版本,然后由所有子 pom 继承(即 Maven NetBeans RCP 项目中的所有 NBP 模块) .

例如,看一下 maven book 中示例项目的最终结果: http://books.sonatype.com/mvnex-book/reference/optimizing-sect-final-poms.html

您将看到由父 POM 定义的一个版本,

<groupId>org.sonatype.mavenbook.optimize</groupId>
<artifactId>simple-parent</artifactId>
<packaging>pom</packaging>
<version>1.0</version>

由每个子模块继承,通过指定父模块而不使用它自己的任何标签:

<parent>
    <groupId>org.sonatype.mavenbook.optimize</groupId>
    <artifactId>simple-parent</artifactId>
    <version>1.0</version>
</parent>

对于它的内部(项目内)依赖,每个子模块都定义了这个相对于项目的:

<dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>simple-weather</artifactId>
            <version>${project.version}</version>
</dependency>

这意味着您不能将一个模块更新到更高版本,因为它会查找具有相同版本号的依赖项,而这些依赖项不存在。更不用说在使用versions-maven-plugin时为任何子模块使用单独的版本会让您头疼,因为您最终会对依赖项进行微观管理。

这似乎完全违背了 NetBeans 平台的自动更新/生命周期/发布理念。在那里我可以更新一个模块并生成一个新的updates.xml(“Package as NBMs”),当上传到 AutoUpdate 存储库时,客户端只会看到那个更新。似乎如果您以 Maven 方式 (mvn nbm:autoupdate) 执行此操作,所有模块都会出现版本提升,因此通过模块自动更新的整个模型都会付诸东流。

我希望我弄错了,有一个功能可以恢复平台附带的强大的自动更新功能,某种额外的版本号会自动添加到major.minor.revision 号或一些智能的覆盖方式OpenIDE-Module-Specification-Version = major.minor.revision 在两个版本之间。对于客户端模块的每次微小更新,我是否必须发布新版本的应用程序?

【问题讨论】:

    标签: java maven netbeans auto-update netbeans-platform


    【解决方案1】:

    没有灵丹妙药。

    当您将整个内容一起发布时,将版本保存在一个地方是有意义的,例如。当你的东西是一个网络应用程序时。然后,在您一起构建和部署内容时,保持版本完整会更简单。对于 Netbeans 平台,您应该以同样的方式思考。如果某些内容是您发布的基础应用程序的一部分,请使其与基础应用程序版本的版本相同,并且仅在以后交付给客户的补丁程序中使用不同的版本。这或多或少是 netbeans 本身采用的模型(虽然在基于 ant 的代码库中,但所有模块在主要版本之后都会出现版本提升)

    如果一个插件或一组插件是可选的,或者在基础应用的多个版本中工作,或者与多个不同的应用一起工作,则将它们放在具有自己版本控制的单独存储库中。

    例如,在 git 存储库中发布单个模块(使用 maven:release)可能会带来它自己的问题。例如。维护多个不同的分支时(旧版本的补丁等) 尝试一下这个组合,看看哪些东西适合你的工作流程和发布周期。

    请注意,应用程序的最终组装是在 nbm-application 项目中完成的,而不是在 maven reactor 中完成。也许管理依赖项的最简单方法是将 nbm-application 最终程序集分开(单独的 maven 构建,单独的 git 存储库)。

    将每个 netbeans 模块保留在它自己的存储库中允许您对版本控制进行微观管理,但您仍然需要在发布期间更新模块的 pom,而且还需要作为 nbm-application 依赖项将新版本包含在自动更新或应用程序中。因此,您可以将插件发布与插件部署分离给客户,这可能是一件好事。这些多个步骤可以在您的 CI 服务器中自动执行,但确实会增加构建的复杂性。

    因此,您的里程可能会根据您的应用程序的分布方式、模块间依赖关系的紧密程度等而有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      相关资源
      最近更新 更多