在常春藤中找到隐藏的依赖项

Bar*_*lom 10 java log4j ivy dependency-management

我正在使用Apache Ivy + IvyDE获取项目的依赖项,它们是:

    <dependency org="com.google.guava" name="guava" rev="r08" />

    <!-- logging -->
    <dependency org="org.slf4j" name="jcl-over-slf4j" rev="1.6.1" />
    <dependency org="ch.qos.logback" name="logback-classic" rev="0.9.27" />

    <!-- database -->
    <dependency org="org.hibernate" name="hibernate-entitymanager" rev="3.6.2.Final" />
    <dependency org="org.hibernate" name="hibernate-validator" rev="4.1.0.Final" />
    <dependency org="org.hibernate" name="hibernate-c3p0" rev="3.6.2.Final" />
    <dependency org="mysql" name="mysql-connector-java" rev="5.1.14" />
Run Code Online (Sandbox Code Playgroud)

源代码是Maven和JBoss(Hibernate)存储库.

正如您所看到的,我正在使用logback + SLF4J进行日志记录,但出于某种原因,Ivy也会下载log4j和slf4j-log4j,这会在我的应用程序中引起一些小问题.

有没有办法看到为什么会发生这种情况,看看上面哪个依赖项依赖于log4j?我可以从Ivy/IvyDE生成依赖图/树吗?

那么有没有办法防止这种情况发生?

Tho*_*mas 20

我们有一个蚂蚁目标,如下所示:

<target name="report" depends="init">
    <mkdir dir="report" />
    <!-- 
     The type attribute is optional, we're using it to exlude other dependcy types we're not interested in. 
     Note that each resolve uses that list (via a property) in our build. 
    -->
    <ivy:resolve type="jar,ejb,tld,bundle"/> 
    <ivy:report todir="report" />
</target>
Run Code Online (Sandbox Code Playgroud)

然后它只是一个调用ant report,Ivy将在给定目录中生成HTML报告.

看一下常春藤的常春藤文档:报告.

编辑:

要防止包含这些工件/依赖项,您可以尝试transitive="false"使用该<dependency ..>元素,或使用<exclude>.例如,我们使用Hibernate 3但不想拥有它JTA 1.1,因此我们将其包含ivy.xml在内:<exclude module="jta"/>排除所有传递JTA依赖项.