Java 在Ivy中查找隐藏的依赖项
我使用Apache Ivy+IvyDE获取项目的依赖项,这些依赖项是:Java 在Ivy中查找隐藏的依赖项,java,log4j,ivy,dependency-management,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"
<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" />
源代码是Maven和JBoss(Hibernate)存储库
正如您所看到的,我正在使用logback+SLF4J进行日志记录,但出于某种原因,Ivy也将下载log4j和SLF4J-log4j,这在我的应用程序中造成了一些小问题
有没有办法知道为什么会发生这种情况,看看上面的哪些依赖关系依赖于log4j?我可以从Ivy/IvyDE生成依赖关系图/树吗
那么有没有办法防止这种情况发生呢?我们有一个蚂蚁目标,看起来像这样:
<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>
然后只需调用ant report,Ivy将在给定目录中以HTML格式生成报告
看一看
编辑:
为了防止包含这些工件/依赖项,您可以在
元素上尝试transitive=“false”
,或者使用
。例如,我们使用Hibernate 3,但不希望使用JTA 1.1
,因此我们的ivy.xml
包含以下内容:
,以排除所有可传递的JTA依赖项。我想基于Thomas的答案,建议在依赖项中添加一个“conf”声明:
<dependency org="org.slf4j" name="jcl-over-slf4j" rev="1.6.1" conf="default"/>
<dependency org="ch.qos.logback" name="logback-classic" rev="0.9.27" conf="default"/>
这将减少对默认子集的可传递依赖,在Maven术语中,默认子集是“compile”范围上的JAR
如果没有此设置,您将获得所有依赖项,其中包括许多您不需要的可选内容。工作非常完美,报告以找到罪魁祸首(hibernate validator),排除以删除log4j等等,在使用Ant构建或从Eclipse运行时,我仍然会获得log4j,即使它没有显示在Eclipse中的ivy.xml[*]列表中,可能还有另一个依赖项将log4j作为可传递的dep。您是否全局排除了log4j,不仅仅是针对hibernate validator?我没有全局排除它,但根据报告,只有hibernate validator依赖它。@AnnKilzer是的,必须将此代码段添加到build.xml中。当然,您还必须添加常春藤插件/taskdefs。@马克:我尝试了以下内容,但没有效果:有帮助吗?@tejas您需要提供更多有关出错原因的详细信息。我的第一个猜测是你可能是网络代理的幕后黑手?我建议发布一个新问题。@tejas啊,那么我猜您已经创建了自己的配置,并且“默认”不存在。没有更多信息无法确认。哦!现在我明白了。是的,你是对的,我创建了编译、运行时、运行时测试配置。我不知道违约是从那里来的。我假设它是被支持的。谢谢你的帮助。