常春藤 - 在多个项目中获取模块及其修订的详细列表

时间:2012-08-01 19:37:05

标签: dependencies report ivy dependency-management

我们使用Ivy来管理我们的库依赖项,我们需要在某些配置中创建所有模块及其修订版的报告,并将其与大约30个项目相结合。只是一个简单的列表,没有依赖项。

“某些配置”我指的是我们在ivy.xml文件中使用配置“compile”,“runtime”,“test”,我们只想包含“compile”和“runtime”,因为我们只对实际随产品提供的库列表感兴趣。 / p>

我熟悉< ivy:report />任务,我们使用它为每个项目生成HTML报告。当然,有一个选项可以使用此输出并解析它或使用XSLT来实现所需的报告格式。但是,我想知道是否有更简单的方法?

谢谢!

1 个答案:

答案 0 :(得分:2)

artifactreport任务可用于生成详细说明配置中工件的XML文件:

<ivy:artifactreport tofile="build/runtime.xml" conf="runtime"/>

这是一个稍微不同的解决方案,它结合groovy和常春藤cachefileset任务,根据编译依赖关系生成Eclipse“.classpath”文件

<macrodef name="eclipse">
    <attribute name="srcdir"/>
    <attribute name="outputdir"/>
    <attribute name="classpathref" default="build.path"/>
    <attribute name="conf" default="compile"/>
    <sequential>
        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="@{classpathref}"/>

        <ivy:cachefileset setid="libfiles" conf="@{conf}"/>

        <groovy>
        <arg value="@{srcdir}"/>
        <arg value="@{outputdir}"/>

        import groovy.xml.MarkupBuilder

        //
        // Generate the classpath file
        //
        // The "lib" classpathentry fields are populated using the ivy artifact report
        //
        project.log("Creating .classpath")

        new File(".classpath").withWriter { writer ->
            def xml = new MarkupBuilder(writer)

            xml.classpath() {
                classpathentry(kind:"src",    path:args[0])
                classpathentry(kind:"output", path:args[1])
                classpathentry(kind:"con",    path:"org.eclipse.jdt.launching.JRE_CONTAINER")

                project.references.libfiles.each {
                    classpathentry(kind:"lib", path:it)
                }
            }
        }
        </groovy>        
    </sequential>
</macrodef>