【问题标题】:Choose Rev from Ant Build File从 Ant 构建文件中选择 Rev
【发布时间】:2015-06-23 15:51:46
【问题描述】:

我希望通过使用 live 和 dev 限定符将 jar 发布到 ivy 来分离开发和生产环境。

我正在寻找一种方法来从具有这些依赖项的项目中触发 ivy,以根据 ant 构建文件自动从这些环境中获取最新信息。

我是 ant 和 ivy 的新手,我没有找到关于这是否可能的文档。

基本上,ant 中的build-live 会触发resolve-live,它会使用ref="[1.live.0,)",但是我们还需要一个默认的,以便Eclipse 环境中的开发人员通过插件自动获取依赖项。

【问题讨论】:

    标签: ant ivy


    【解决方案1】:

    您尚未指明您使用的存储库类型。我将假设您使用 Maven 存储库管理器来管理您的发布存储库。其中一些支持远程工作流来管理我喜欢称之为“候选发布”的内容(例如,看看 Sonatype Nexus 提供的staging 功能)

    对于纯常春藤解决方案,我首先建议阅读best practice documentation,特别是标题为“处理集成版本”的部分。

    发布新的 ivy 模块版本时,可以设置status 字段。开箱即用的 ivy 支持“集成”、“里程碑”或“发布”,但即使这些也可以是 extended。状态是出现在 ivy 存储库中已发布 ivy 文件的 info 字段中的标签或元数据属性。

    这是如何工作的?发布模块时如下:

    <ivy:publish resolver="???" pubrevision="1.0.1" status="integration">
       <artifacts pattern="build/artifacts/jars/[artifact].[ext]" />
       <artifacts pattern="build/artifacts/zips/[artifact].[ext]" />
    </ivy:publish>
    

    这表明版本 1.0.1 是一个集成版本。

    这会启用您正在寻找的功能。 Ivy 的dynamic revisions 功能可用于自动下载具有特定状态的最新版本,如下所示:

    <dependency org="acme" name="foo" rev="latest.integration" />
    

    更新

    模块一旦发布到存储库中,就无法更改。这样做可能会破坏依赖该版本的构建。想一想,如果您更改了构建的状态,如何传达该更改?相反,您使用“状态”来指示版本的稳定性。开源项目经常会在最终批准的主要版本之前发布几个“通用”或“里程碑”版本。

    做你想做的事需要服务器端的存储库文件管理。我建议查看 Sonatype Nexus 中的“登台”套件。此功能将每个待处理的版本保存在一个临时存储库中,直到它最终被批准并合并到主版本区域。

    【讨论】:

    • 我正在使用常春藤存储库。这个问题以及我以前做事的方式是,我正在寻找一种动态选择转速的方法。
    • 我正在使用常春藤存储库。这个问题以及我以前做事的方式是我正在寻找一种动态选择转速的方法。例如:rev="default.revision" 它将获取任何已发布依赖项中的最新版本,但在为生产构建时,ant 将覆盖"default.revision"(或通过其他机制)为"latest.live"。在某些情况下,我希望这样做的原因是因为有很多项目依赖于这些 jar。
    • @deano 我包含了一个指向 ivy 动态修订文档的链接。使用“latest.release”或“latest.milestone”。如果您真的想要,您可以扩展您的项目以包含“实时”状态,但我认为您并不需要它。
    • 那么你是说没有办法让常春藤根据上下文自动更改状态或修订?例如,无论如何我都希望始终获取最新的 jar,除非我正在为生产而构建,那么我会想要最新的 live jar。我没有看到这如何使我不必手动进入并更新修订或状态。
    • 我不确定我们是否仍然在同一页面上。为不同环境发布 jar 的过程已经全部设置好。对于生产,它发布为 1.live.. 对于开发,它发布 1.dev.. 在 Ivy.xml 我们有类似 &lt;dependency org="blah" name="blahblah" rev="[1.15.0,1.16.0[" conf="*-&gt;*"/&gt; 的东西我想要做的是将 rev="" 替换为类似 rev="[1.default.0,)" 的东西,它将抓住在大多数情况下开发除非我们为生产进行构建,在这种情况下它将覆盖默认为实时,所以我假设默认将是一个被覆盖的变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2011-03-23
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多