Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Ivy中查找隐藏的依赖项_Java_Log4j_Ivy_Dependency Management - Fatal编程技术网

Java 在Ivy中查找隐藏的依赖项

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"

我使用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" />

源代码是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啊,那么我猜您已经创建了自己的配置,并且“默认”不存在。没有更多信息无法确认。哦!现在我明白了。是的,你是对的,我创建了编译、运行时、运行时测试配置。我不知道违约是从那里来的。我假设它是被支持的。谢谢你的帮助。