【问题标题】:How to get and use the version of artifact如何获取和使用artifact的版本
【发布时间】:2016-11-30 06:14:54
【问题描述】:

当存在依赖项时,即在 ivy.xml 中定义,例如像这样:

<dependency org="com.company" name="mypackage" rev="6.0.0"/>

在 build.xml 中,我让 ivy 检索它。然后它会下载一个名称中带有版本 ID 的文件。例如。 lib/mypackage-6.0.0.zip

我如何知道我的 ANT 版本中的版本 (6.0.0) 或全名,而无需手动/重复地从 ivy.xml 中重复版本?

我希望能够做类似的事情:

<unzip src="lib/mypackage-${version}.zip" ...

【问题讨论】:

    标签: ant ivy


    【解决方案1】:

    选项 1

    一种方法是使用artifactpropery 任务,根据类似于retrieve 任务工作方式的模式设置具有依赖版本的属性。

    <ivy:artifactproperty name="[artifact].ver" value="[revision]"/>
    
    <echo message="Version: ${slf4j-api.ver}"/>
    

    选项 2

    我的替代偏好是使用配置并简单地在构建工作区中创建一个文件名中没有修订的文件,如下所示:

    <ivy:retrieve pattern="target/zips/[artifact].[ext]" conf="zips"/>
    

    这需要一个 ivy 文件,该文件具有特殊的“zips”配置设置和依赖声明上的配置映射:

    <dependency org="org.slf4j" name="slf4j-api" rev="1.7.5" conf="zips->default"/>
    

    示例(选项 2)

    在本例中,在“lib”目录下设置了 3 个不同的类路径,并在 zips 目录中填充了一个 jar 文件,其文件名中没有修订:

    ├── build.xml
    ├── ivy.xml
    ├── lib
    │   ├── compile
    │   │   └── slf4j-api-1.7.5.jar
    │   ├── runtime
    │   │   ├── log4j-1.2.17.jar
    │   │   ├── slf4j-api-1.7.5.jar
    │   │   └── slf4j-log4j12-1.7.5.jar
    │   └── test
    │       ├── hamcrest-core-1.3.jar
    │       ├── junit-4.11.jar
    │       ├── log4j-1.2.17.jar
    │       ├── slf4j-api-1.7.5.jar
    │       └── slf4j-log4j12-1.7.5.jar
    └── target
        └── zips
            └── slf4j-api.jar
    

    build.xml

    <project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">
    
        <target name="resolve">
            <ivy:resolve/>
        </target>
    
        <target name="build" depends="resolve">
            <!-- Populate the "lib" directory -->
            <ivy:retrieve pattern="lib/[conf]/[artifact]-[revision](-[classifier]).[ext]" conf="compile,runtime,test"/>
    
            <!-- Populate the "target/zips" directory -->
            <ivy:retrieve pattern="target/zips/[artifact].[ext]" conf="zips"/>
        </target>
    
    </project>
    

    ivy.xml

    <ivy-module version="2.0">
        <info organisation="com.myspotontheweb" module="demo"/>
    
        <configurations>
            <conf name="compile" description="Required to compile application"/>
            <conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
            <conf name="test"    description="Required for test only" extends="runtime"/>
            <conf name="zips"    description="Additional configuration for demo"/>
        </configurations>
    
        <dependencies>
            <!-- zips + compile dependencies -->
            <dependency org="org.slf4j" name="slf4j-api" rev="1.7.5" conf="zips,compile->default"/>
    
            <!-- runtime dependencies -->
            <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.5" conf="runtime->default"/>
    
            <!-- test dependencies -->
            <dependency org="junit" name="junit" rev="4.11" conf="test->default"/>
        </dependencies>
    
    </ivy-module>
    

    注意:

    • slf4j-api 包含在“zips”和“compile”配置中。

    【讨论】:

    • 我尝试了选项 1,效果很好。感谢您的帮助!
    猜你喜欢
    • 2014-11-15
    • 1970-01-01
    • 2013-04-12
    • 2018-06-26
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2018-08-23
    相关资源
    最近更新 更多