【问题标题】:Ivy optional configuration mapping (source, javadoc)Ivy 可选配置映射(源代码,javadoc)
【发布时间】:2015-05-22 18:31:35
【问题描述】:

是否可以为 ivy 指定可选的默认配置映射?

我正在寻找的是在 defaultconfmapping 中指定以获取所有源 jar,但某些 lib 没有可用的源 jar,跳过这些也可以。

类似:

<dependencies defaultconf="default" defaultconfmapping="default->default,sources(?onlyifavailable)"  >

这在常春藤中可能吗?

还有没有办法只指定不获取 conf 目标? 即:

<dependency org="org.lib" name="example" rev="default->!sources" />

我正在寻找的主要是一种在 defaultconfmapping 中定义所有(大多数)配置映射的方法,而不是在单个项目上重复这些映射。 这意味着我正在寻找“获取但如果不存在则忽略”或“仅调整映射的这一部分而不必复制仍然相同的部分”的选项 (原因之一是我们有大量的依赖)

【问题讨论】:

    标签: ivy


    【解决方案1】:

    如果你有一个空的后备,它实际上使配置成为可选的:

    <dependencies defaultconf="default" defaultconfmapping="default->default,sources()" >
    

    【讨论】:

    • 这里的哪一部分是您提到的默认后备? '()' ?
    • 是的。 foo(bar) 表示“使用 foo,但如果不存在,请使用 bar”。 foo() 的意思是“使用 foo,如果它不存在,则什么都不使用”。
    【解决方案2】:

    默认配置映射在您的 ivy 文件中的可选 configuration declaration 上定义:

    例如

    <configurations defaultconfmapping="compile->default;sources;javadoc">
    ..
    ..
    

    这会创建 3 个配置映射(我认为这是您正在寻找的):

    1. 编译->默认
    2. 来源->来源
    3. javadoc->javadoc

    我个人更喜欢在每个依赖项上默认一个显式的配置映射,但这更加悬而未决。

    示例

    以下示例为每个配置生成一个 ivy 报告,并将源和 javadoc jar 保存在特定目录中:

    ├── build.xml
    ├── ivy.xml
    └── target
        ├── ivy-reports
        │   ├── com.myspotontheweb-demo-compile.html
        │   ├── com.myspotontheweb-demo-javadoc.html
        │   ├── com.myspotontheweb-demo-runtime.html
        │   ├── com.myspotontheweb-demo-sources.html
        │   ├── com.myspotontheweb-demo-test.html
        │   └── ivy-report.css
        ├── javadoc
        │   ├── junit-4.11-javadoc.jar
        │   ├── slf4j-api-1.7.5-javadoc.jar
        │   └── slf4j-log4j12-1.7.5-javadoc.jar
        └── sources
            ├── junit-4.11-sources.jar
            ├── slf4j-api-1.7.5-sources.jar
            └── slf4j-log4j12-1.7.5-sources.jar
    

    build.xml

    <project name="demo" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
    
        <!--
        ================
        Build properties
        ================
        -->
        <property name="build.dir" location="target"/>
    
        <target name="resolve" description="Use ivy to resolve classpaths">
            <ivy:resolve/>
    
            <ivy:report todir='${build.dir}/ivy-reports' graph='false' xml='false'/>
    
            <ivy:cachepath pathid="compile.path" conf="compile"/>
            <ivy:cachepath pathid="test.path"    conf="test"/>
    
            <ivy:retrieve pattern="${build.dir}/[conf]/[artifact]-[revision](-[classifier]).[ext]" conf="sources,javadoc"/>
        </target>
    
    </project>
    

    ivy.xml

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

    【讨论】:

    • 感谢您提供详尽的答案,但这不是我正在寻找的。我正在寻找某种方法来定义我想要源的 IN defaultconfMapping,如果可用,将更新问题以进一步澄清问题
    • 请再次检查我的答案。有一个“源”配置映射将远程“源”配置(在所有 Maven 模块中可用)与本地“源”配置相关联。仔细查看 ivy “retrieve” 任务,它被用于将这些文件保存到“target/sources”目录。
    • 也许我遗漏了一些东西,但我的问题是例如 org.slf4j-api 不会 java javadoc 目标。这将导致解析错误。这个解决错误我想避免这个解决问题,而无需将 org.slf4-api 显式标记为“*->default,sources”(因此如果较新版本具有 javadoc,则将检索 javadoc)
    • @pvgoddijn 我不明白你的要求,抱歉。
    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 2011-10-29
    • 2010-12-07
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多