【问题标题】:Ivy: Fetching Javadocs and SourcesIvy:获取 Javadocs 和源代码
【发布时间】:2012-08-31 13:29:45
【问题描述】:

我对 Ivy 还很陌生,但已经让它与 jar 依赖项一起工作。问题是尝试设置它,这样我就可以独立于 jar 获取 javadocs 和源代码。

我有一个简单的测试项目,但无论我在做什么,我都在获取包含类文件的 jar。

我有以下ivy.xml 文件:

<ivy-module version="1.0">
    <info
        organisation="com.vegicorp"
        module="test"
        revision="1.0"
        status="release"/>

    <configurations>
        <conf name="default" visibility="public" extends="runtime,master"/>
        <conf name="master" visibility="public"/>
        <conf name="compile" visibility="public"/>
        <conf name="provided" visibility="public"/>
        <conf name="runtime" visibility="public" extends="compile"/>
        <conf name="test" visibility="private" extends="runtime"/>
        <conf name="system" visibility="public"/>
        <conf name="sources" visibility="public"/>
        <conf name="javadoc" visibility="public"/>
        <conf name="optional" visibility="public"/>
    </configurations>

    <dependencies>
        <dependency org="commons-logging" name="commons-logging" rev="1.1.1"
            conf="compile->default"/>
        <dependency org="commons-logging" name="commons-logging" rev="1.1.1"
            conf="sources->default">
            <artifact name="commons-logging" type="sources" ext="jar"/>
        </dependency>
        <dependency org="commons-logging" name="commons-logging" rev="1.1.1"
            conf="javadoc->default">
            <artifact name="commons-logging" type="javadoc" ext="jar"/>
        </dependency>
    </dependencies>
</ivy-module>

还有以下build.xml

<project name="ivy-test" default="default" basedir="."
    xmlns:ivy="http://ant.apache.org/ivy">

    <property name="ivy.dir" value="${basedir}/ivy.dir"/>
    <import file="${ivy.dir}/ivy.tasks.xml"/>

    <property name="target.dir" value="${basedir}/lib"/>
    <target name="-resolve">
        <ivy:resolve/>
    </target>

    <target name="clean">
        <delete dir="${target.dir}"/>
        <ivy:cleancache/>
    </target>

    <target name="default"
        depends="-resolve">

        <fail message="ivy.conf is not defined">
            <condition>
                <not>
                    <isset property="ivy.conf"/>
                </not>
            </condition>
        </fail>

        <delete dir="${target.dir}"/>
        <mkdir dir="${target.dir}"/>
        <ivy:retrieve conf="${ivy.conf}"
            pattern="${target.dir}/[artifact]-[revision].[ext]"/>
    </target>
</project>

在命令行中,我将输入:

$ ant -Divy.conf=compile

而且,应该下载带有类的 jarfile。

但是,如果我这样输入:

$ ant -Divy.conf=sources

我想要包含源而不是类的 jar 文件,当我输入以下内容时:

$ ant -Divy.conf=javadoc

我想要包含 javadoc 而不是源代码的 jar 文件。

我很确定是我的ivy.xml 不太正确。我最初尝试过这个:

<dependencies>
    <dependency org="commons-logging" name="commons-logging" rev="1.1.1">
        <artifact name="commons-logging" type="jar" ext="jar" conf="compile->default"/>
        <artifact name="commons-logging" type="sources" ext="jar" conf="sources->default"/>
        <artifact name="commons-logging" type="javadoc" ext="jar" conf="javadoc->default"/>
    </dependency>

这下载了 jar、源代码和 javadoc,但无论我尝试哪种配置,都是一次下载。

【问题讨论】:

    标签: ant ivy


    【解决方案1】:

    好的,我想我已经想通了。我在想这整个过程。我的&lt;dependencies&gt; 部分应如下所示:

    <dependencies>
        <dependency org="commons-logging" name="commons-logging" rev="1.1.1"
            conf="javadoc->javadoc;sources->sources;compile->default"/>
    </dependencies>
    

    这会将我的 javadoc 映射到 Maven 的 javadoc 并将我的 sources 映射到 Maven 的 sources。当我映射conf="sources-&gt;default" 时,它将我的sources 映射到Maven 的default,这是编译依赖项。

    我可以在一行中指定所有配置,我不需要单独的&lt;artifact&gt; 实体。

    【讨论】:

    • 我发现如果我不将我的配置映射到默认值,无论我想要与否,我都会得到一切。在您的示例中,如果我说&lt;ivy:retrieve conf="compile"/&gt;,我将获得 jar、javadoc 和源代码。在这种情况下,我只想要类 jar。如果我说 &lt;ivy:retrieve conf="javadoc"/&gt; 我只想要 Javadoc。
    • 是的,对 :) 我忘了默认是单个 jar 的 maven 范围。所以我认为它可以缩短为 conf="javadoc;sources;compile->default"。
    • 不。我试过了,&lt;ivy:retrieve conf="compile"/&gt;&lt;ivy:retrieve conf="javadoc"/&gt; 都将使用类提取标准 jar。问题是您必须将您的compile 映射到Maven 的default,将您的javadoc 映射到Maven 的javadoc,并将您的sources 映射到Maven 的sources。因此conf="compile-&gt;default;sources-&gt;sources;javadoc-&gt;javadoc"。这会将我的所有三个配置映射到所有三个 Maven 范围。这很令人困惑。我研究了几个小时,在 SO 上询问,然后又研究了一个小时,然后才弄明白。
    • 可以指定configurations defaultconfmapping="compile-&gt;master;runtime-&gt;default;sources-&gt;@;javadoc-&gt;@",然后只使用conf="compile,javadoc,sources" 的依赖项,而不需要额外的映射。
    猜你喜欢
    • 2011-08-12
    • 2011-04-08
    • 2015-04-08
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多