动态更新常春藤额外属性 [英] Dynamically updating Ivy extra attributes

查看:31
本文介绍了动态更新常春藤额外属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我计划在 ivy.xml 文件中使用额外的属性,以尝试能够访问修订号部分,我需要这样做,然后我可以将这些值用于 ivysettings 中的解析器模式.xml 文件:

I plan on using extra attributes in the ivy.xml files in an attempt to be able to get access to the revision number parts, which I need to do so that I can then use those values for the resolver pattern in the ivysettings.xml file:

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:e="http://ant.apache.org/ivy/extra" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
    <info organisation="MyCompany" module="MyModule" revision="1.2.3.4" e:shortrev="1.2.3" e:buildnum="4" publication="20120207140052" />
    ...
</ivy-module>

我想在构建过程中动态更新 shortrevbuildnum 额外属性,以便在发布此模块时,它们的值将与它一起保存,并且这样我可以将 ivysettings.xml 文件中的这些额外属性用于解析器模式.

I want to dynamically update the shortrev and buildnum extra attribute during the build so that when this module gets published their values will be saved with it and also so that I can use those extra attributes in the ivysettings.xml file for the resolver pattern.

<resolvers>
    <filesystem name="fs.resolver">
        <ivy pattern="${my.dir}/[organisation]/[module]/[shortrev]/[buildnum]/ivy.xml" />
        <artifact pattern="${my.dir}/[organisation]/[module]/[shortrev]/[buildnum]/[artifact].[ext]" />
    </filesystem>
</resolvers>

建议我可以尝试使用 Ivy 文件中的属性来动态设置它们的值,但我'我不清楚如何去做.

It was suggested that I could try to use properties within the Ivy file to dynamically set their values, but I'm not clear on how to go about doing that.

推荐答案

本示例使用标准 buildnumber 来自 ANT 的任务.不幸的是,ivy buildnumber 任务将无法正确解析模块在解析器定义中有额外的属性:-(

This example uses the standard buildnumber task from ANT. Unfortunately the ivy buildnumber task will not resolve properly for modules with extra attributes in the resolver definition :-(

$ tree
.
|-- build.xml
|-- ivysettings.xml
|-- ivy.xml
`-- src
    `-- main
        `-- HelloWorld.java

ivy.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
    <info organisation="MyCompany" module="MyModule" e:shortrev="${publish.target.revision}" e:buildnum="${publish.buildnumber}"/>

    <configurations defaultconfmapping="compile->default">
        <conf name="compile" description="Required to compile application"/>
        <conf name="runtime" description="Shared library needed at runtime" extends="compile"/>
        <conf name="test"    description="Required for test only" extends="runtime"/>
    </configurations>

    <publications>
        <artifact name="MyModule" type="jar" e:shortrev="${publish.target.revision}" e:buildnum="${publish.buildnumber}"/>
    </publications>

    <dependencies>
        <dependency org="commons-lang" name="commons-lang" rev="2.6"/>
        <dependency org="junit" name="junit" rev="4.8.2" conf="test->default"/>
    </dependencies>

</ivy-module>

注意事项:

  • 额外的属性与两者信息和工件定义相关联.
  • The extra attributes are associated with both the info and artifact definitions.
<project xmlns:ivy="antlib:org.apache.ivy.ant" name="publish-example" default="build">

    <!--
    ==========
    Properties
    ==========
    -->
    <property name="src.dir"     location="src/main"/>
    <property name="build.dir"   location="build"/>
    <property name="classes.dir" location="${build.dir}/classes"/>
    <property name="reports.dir" location="${build.dir}/reports"/>

    <property name="publish.target.revision" value="1.2.3"/>
    <property name="publish.status"   value="release"/>
    <property name="publish.resolver" value="custom.repository"/>

    <!--
    =======
    Targets
    =======
    -->
    <target name='init' description='Resolve project dependencies and set classpaths'>
        <ivy:resolve/>
        <ivy:report todir='${reports.dir}' graph='false' xml='false'/>

        <ivy:cachepath pathid="compile.path"  conf="compile"/>
        <ivy:cachepath pathid="runtime.path"  conf="runtime"/>
        <ivy:cachepath pathid="test.path"     conf="test"/>

        <mkdir dir="${classes.dir}"/>
    </target>

    <target name="compile" depends="init">
        <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false" classpathref="compile.path"/>
    </target>

    <target name="build" depends="compile">
        <ivy:info/>
        <jar destfile="${build.dir}/${ivy.module}.jar" basedir="${classes.dir}"/>
    </target>

    <target name="publish-revision" description="Determine the new published revision">
        <buildnumber/>

        <property name="publish.revision" value="${publish.target.revision}.${build.number}"/>
        <property name="publish.buildnumber" value="${build.number}"/>
    </target>

    <target name="publish" depends="build,publish-revision" description="Publish artifacts into repository">
        <ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${publish.revision}" status="${publish.status}"/>

        <ivy:publish resolver="${publish.resolver}" pubrevision="${publish.revision}" overwrite="true">
            <artifacts pattern="${build.dir}/[artifact].[ext]"/>
        </ivy:publish>
    </target>

    <target name="clean" description="--> clean project files">
        <delete dir="${build.dir}"/>
    </target>

    <target name="clean-all" depends="clean" description="--> clean ivy cache">
        <ivy:cleancache />
    </target>

</project>

注意事项:

  • ivy deliver 任务确保发布的ivy 文件已正确填充.
  • The ivy deliver task ensures that the published ivy file is properly populated.
<ivysettings>
    <settings defaultResolver="central"/>
    <resolvers>
        <ibiblio name="central" m2compatible="true"/>
        <filesystem name="custom.repository">
            <ivy pattern="${ivy.settings.dir}/repository/[organisation]/[module]/[shortrev]/[buildnum]/ivy.xml" />
            <artifact pattern="${ivy.settings.dir}/repository/[organisation]/[module]/[shortrev]/[buildnum]/[artifact].[ext]" />
        </filesystem>
    </resolvers>
</ivysettings>

注意事项:

  • 我总是将 Maven Central 设置为我的默认解析器,以便检索诸如 commons-lang 和 junit 之类的 3rd 方依赖项.
  • custom.repository 解析器在构建文件中配置为属性publish.resolver"
  • I always setup Maven Central as my default resolver, in order to retrieve 3rd party dependencies like commons-lang and junit.
  • The custom.repository resolver is configured within the build file as the property "publish.resolver"

这篇关于动态更新常春藤额外属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆