使用dependencytree找library相依性

最近要做log4j的升級,因為有些libraries比較舊,怕會有間接相依的問題,因此想透過dependencytree的功能去找出可能有問題的地方。

這是我所使用的ivy設定,commons-logging會相依於其它libraries。我在這明確宣告transitive去告訴ivy要去把相依的libraries都抓進來:

<?xml version="1.0" ?>
<ivy-module version="2.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
    xmlns:e="http://ant.apache.org/ivy/extra">
    <info organisation="org.tonylin.practice" module="IvyAntPractice">
    </info>
    <configurations>
        <conf name="default" />
    </configurations>   
    <dependencies defaultconfmapping="*->default(*)">
        <dependency org="commons-lang" name="commons-lang" rev="2.6" transitive="true"/>
        <dependency org="commons-logging" name="commons-logging" rev="1.1" transitive="true"/>
    </dependencies>
</ivy-module> 
ant部分直接使用ivy:dependencytree的語法:
<project name="IvyAntPractice" default="init" xmlns:ivy="antlib:org.apache.ivy.ant" >
    <target name="init">
		<ivy:dependencytree transitive="true"/>
    </target>
</project>
執行後,就可以在console看到相依性被resolve出來了。沒錯,就是那該死的log4j:
[ivy:dependencytree] Dependency tree for org.tonylin.practice-IvyAntPractice
[ivy:dependencytree] +- commons-lang#commons-lang;2.6
[ivy:dependencytree] \- commons-logging#commons-logging;1.1
[ivy:dependencytree] |  +- log4j#log4j;1.2.12
[ivy:dependencytree] |  +- logkit#logkit;1.0.1
[ivy:dependencytree] |  +- avalon-framework#avalon-framework;4.1.3
[ivy:dependencytree]    \- javax.servlet#servlet-api;2.3
令人傷心的是,如果在ivy.xml設定transitive為false的話,就看不到它相依的內容了。dependencytree的transitive只能控制是否要呈現間接相依的項目出來,resolve還是要依照ivy.xml的內容:
[ivy:dependencytree] Dependency tree for org.tonylin.practice-IvyAntPractice
[ivy:dependencytree] +- commons-lang#commons-lang;2.6
[ivy:dependencytree] \- commons-logging#commons-logging;1.1