ivy:publish如何工作?

2022-09-01 17:47:57

我完全不知道蚂蚁任务ivy:publish应该如何工作。

我希望我做我的正常构建,这会创建一堆jar文件,然后我会将这些jar推送到(本地)存储库。

如何指定从何处检索构建的 jar,以及这些 jar 如何最终进入存储库?

更新:

<target name="publish-local" description="--> Publish Local">
    <ivy:retrieve />
    <ivy:publish resolver="local" pubrevision="${release.version}" status="release" update="true" overwrite="true">
        <artifacts pattern="${dist.dir}/[organisation]-[module].[ext]" />
    </ivy:publish>
</target>

这实际上有效,我之前没有包括检索。

但是我仍然有一些问题,假设我想发布3个jars,openscada-utils.jar,openscada-utils-sources.jar和openscada-utils-javadocs.jar作为openscada-utils-0.9.2.jar,openscada-utils-0.9.2-sources.jar和openscada-utils-0.9.2-javadocs.jar

我并不完全清楚实际名称是如何组合的,以及我可以在哪里指定它们应该获得哪些名称。(使用上面的片段,jars总是只被称为utils.jar)。

更新 1:

我让它工作(有点),但它仍然感觉不对劲。不知何故,所有教程都侧重于第三方项目的依赖项,但对我来说同样重要的一点是处理特定于项目的依赖项。

我有一堆子项目,它们以各种方式相互依赖。考虑到ivy:publish,我不清楚如何开始。

  1. 如何处理第一个版本?我有一个所有子项目的通用版本号,以指示它们属于一起(假设0.9)。因此,第一个修订版应该是0.9.0,但到目前为止,我的存储库中没有我的任何项目。我如何让艾薇分配这个修订版号。

  2. 在开发过程中,我想再次发布构建的文件,到目前为止不更改修订版号。

  3. 如果我完成了我的工作,我想把它推送到一个共享存储库(并将修订号从0.9.0增加到0.9.1),建议的方法是什么?

  4. 对于实际版本,我想制作具有依赖项和没有依赖项的发行版,不知何故,我想我可以使用不同的配置。我怎样才能利用它来发挥我的优势?


答案 1

您需要指定“解析程序”。像这样:

<ivy:publish resolver="local" pubrevision="1.0"/>

它由模式控制。这个页面很好地涵盖了它。看起来你希望你的是:

<artifacts pattern="${dist.dir}/[organisation]-[module]-[revision]-[type].[ext]" />

您需要将这三个罐子标识为常春藤.xml文件中的工件。像这样:

<publications>
    <artifact name="utils"/>
    <artifact name="utils" type="source"/>
    <artifact name="utils" type="javadocs"/>
</publications>

答案 2

首先,你需要一个常春藤.xml文件。

<ivy-module version="2.0">
    <info organisation="com.example.code" module="MyProject"
         revision="${project.revision}"/>
    <configurations>
        <conf name="runtime" description="" />
        ... other config elements here...
    </configurations>

    <publications defaultconf="runtime">
        <artifact name="MyProject" type="jar" ext="jar" conf="runtime" />
    </publications>

    <dependencies>
        ...
    </dependencies>
</ivy-module>

常春藤.xml中的信息元素和出版物元素允许您跳过构建.xml中常春藤元素的各种属性。

请注意 ivy.xml 中的 ${project.revision}。该物业在建筑.xml中被赋予了价值,但这似乎很好。然后,修订版可以很容易地具有所需的任何值(例如,夜间构建与本地构建)。

下面是如何设置生成的示例.xml文件

<property name="project.revision" value="1.0.0"/>

...

<target name="ivy">
    <ivy:resolve />

    <!-- Possible ivy:report, ivy:retrieve and other
    elements for managing your dependencies go here -->

    <ivy:deliver conf="*(public)"/> 
</target>

<target name="publish" depends="clean, ivy, jar">
    <ivy:publish resolver="local">
        <!-- possible artifacts elements if your artifacts
        are not in standard location -->
    </ivy:publish>
</target>

...

推荐