常春藤:获取Javadocs和Sources

时间:2012-09-06 17:02:55

标签: ant ivy

我对Ivy很新,但已经让它与jar依赖项一起使用了。问题是尝试设置它,所以我可以独立于jar获取javadoc和源。

我有一个简单的测试项目,但无论我在做什么,我都会在其中获取带有类文件的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

并且,应该下载带有类的jar文件。

但是如果我输入它:

$ 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,但无论我尝试了哪种配置,都会立即下载。

1 个答案:

答案 0 :(得分:5)

好的,我想我已经明白了。我在想整个过程。我的<dependencies>部分应如下所示:

<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->default"时,它将我的sources映射到Maven的default,这是编译依赖项。

我可以在一行中指定所有配置,而且我不需要单独的<artifact>个实体。