2012-09-06 67 views
6

我对常春藤来说相当陌生,但已经使它与jar依赖关系一起工作。问题是试图设置它,所以我可以独立于jar来获取javadocs和源代码。常春藤:获取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 

而且,这应该使用类下载jar文件。

但是如果我键入此:

$ ant -Divy.conf=sources 

我想包含源,而不是类的JAR文件,当我输入:

$ ant -Divy.conf=javadoc 

我想要的JAR文件包含javadoc而不是来源。

我很确定这是我的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> 

那下载的罐子,来源和javadoc,但一下子不管我试过哪些配置。

回答

4

好吧,我想我已经明白了。我一直在想这整个过程。我<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>实体。

+0

conf =“javadoc,sources,compile”也应该可以工作。 – oers

+0

我发现如果我没有将我的配置映射到默认值,我会得到一切,无论我是否需要它。在你的例子中,如果我说'',我会得到jar,javadoc和sources。在那种情况下,我只想要类jar。如果我说''我只想要Javadoc。 –

+0

对啊:)我忘了默认是单个jar的maven作用域。所以它可以缩短为conf =“javadoc; sources; compile-> default”我认为。 – oers