【问题标题】:resolving javadoc files with Ant and Ivy使用 Ant 和 Ivy 解析 javadoc 文件
【发布时间】:2011-10-05 03:43:02
【问题描述】:

我希望 Ivy 获取 log4j .jar 和 JavaDocs。现在,我处于死胡同。如果我在 ivy.xml 中使用它...

<dependency org="log4j" name="log4j" rev="1.2.16"/>

...然后我得到 .jar 文件。但是当使用这个 ivysettings.xml ...

<?xml version="1.0" encoding="UTF-8"?>
<ivysettings>
    <settings  
            defaultResolver="default"
            defaultConflictManager="all" />
    <resolvers>
        <url name="default" m2compatible="true">
            <artifact pattern="http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
            <artifact pattern="http://repo2.maven.org/maven2/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
        </url>
    </resolvers>
</ivysettings>

...还有这个 ivy.xml ...

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
    <info organisation="foo" module="bar"/>
    <dependencies>
        <dependency org="log4j" name="log4j" rev="1.2.16">
            <artifact name="log4j" type="jar" ext="jar"/>
            <artifact name="log4j" type="javadoc" ext="jar"/> 
        </dependency>
    </dependencies>
</ivy-module>

...然后我收到此错误消息: java.lang.RuntimeException: 模块 log4j#log4j;1.2.16 的多个工件被检索到同一个文件!更新检索模式以修复此错误。

我在这里缺少什么?如何让 Ivy 解析 JavaDoc 和 .jar 文件?

编辑: 感谢迄今为止所有快速而详细的回复。这是我更新的 ivy.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation=
                   "http://ant.apache.org/ivy/schemas/ivy.xsd">
    <info organisation="foo" module="bar"/>
    <configurations>
        <conf name="default" visibility="public"/>
        <conf name="compile" visibility="public"/>
        <conf name="master"  visibility="public"/>
        <conf name="javadoc" visibility="public"/>
    </configurations>

    <dependencies>
        <dependency org="log4j"             name="log4j"       rev="1.2.16" conf="default->master,javadoc"/>
        <dependency org="javax.servlet"     name="servlet-api" rev="2.5" />
        <dependency org="com.someother"     name="proprietary-core" rev="1.2.3" force="true"/>
        <dependency org="com.someother"     name="proprietary" rev="1.2.3" force="true"/>
        <dependency org="com.someother"     name="scanner"     rev="1.0"   force="true"/>
    </dependencies>
</ivy-module>

现在我收到此错误消息:

Buildfile: D:\workspace\foobar\build.xml

resolve:
[ivy:retrieve] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] :: loading settings :: file = D:\workspace\foobar\ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: foo#bar;working@myhost
[ivy:retrieve]  confs: [default, compile, master, javadoc]
[ivy:retrieve]  found log4j#log4j;1.2.16 in internal
[ivy:retrieve]  found javax.servlet#servlet-api;2.5 in internal
[ivy:retrieve]  found com.someother#proprietary-core;1.2.3 in internal
[ivy:retrieve]  found com.someother#proprietary;1.2.3 in internal
[ivy:retrieve]  found com.someother#scanner;1.0 in internal
[ivy:retrieve] :: resolution report :: resolve 332ms :: artifacts dl 10ms
    ---------------------------------------------------------------------
    |                  |            modules            ||   artifacts   |
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
    ---------------------------------------------------------------------
    |      default     |   5   |   0   |   0   |   0   ||   4   |   0   |
    |      compile     |   4   |   0   |   0   |   0   ||   4   |   0   |
    |      master      |   4   |   0   |   0   |   0   ||   4   |   0   |
    |      javadoc     |   4   |   0   |   0   |   0   ||   4   |   0   |
    ---------------------------------------------------------------------
[ivy:retrieve] 
[ivy:retrieve] :: problems summary ::
[ivy:retrieve] :::: WARNINGS
[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]      ::          UNRESOLVED DEPENDENCIES         ::
[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]      :: log4j#log4j;1.2.16: configuration not found in log4j#log4j;1.2.16: 'master'. It was required from foo#bar;working@myhost default
[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] 
[ivy:retrieve] 
[ivy:retrieve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS

Maven 范围似乎有问题。但我到底错过了什么?

【问题讨论】:

    标签: ant ivy ivyde


    【解决方案1】:

    问题在于您在 ivy 检索任务中使用的模式。它需要包含可选的“分类器”属性以确保文件名是唯一的:

    <ivy:retrieve pattern="lib/[conf]/[artifact](-[classifier]).[ext]"/>
    

    分类器是一个 Maven 事物,用于识别与 Maven 模块关联的其他人工制品。

    补充观察

    无需复杂的常春藤设置。配置映射控制从其他模块下载哪些工件。

    删除 ivysettings.xml 文件并在您的 ivy.xml 中尝试以下操作:

    <dependency org="log4j" name="log4j" rev="1.2.16" conf="default->master,javadoc"/>
    

    这会导致以下文件被下载:

    • log4j-1.2.16.jar
    • log4j-1.2.16-javadoc.jar

    它是如何工作的?

    对于 Maven 模块,ivy 创建一个匹配每个标准 Maven 范围的配置:

    • master : 仅限主 jar
    • compile : 主 jar,以及用于编译的 jar(这也是“默认”范围)
    • runtime : 主 jar,以及用于编译、运行时的 jars
    • test : 主 jar,以及用于编译、运行时、测试的 jar

    并为模块发布的每个附加工件(或分类器)额外创建一个配置:

    • 来源
    • javadoc

    这使您可以混合搭配。

    【讨论】:

      猜你喜欢
      • 2011-05-14
      • 2011-06-26
      • 2012-05-13
      • 1970-01-01
      • 2016-05-14
      • 2011-11-08
      • 2010-10-08
      • 2012-06-02
      • 2012-11-08
      相关资源
      最近更新 更多