Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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项目依赖项_Java - Fatal编程技术网

Java项目依赖项

Java项目依赖项,java,Java,让我们假设我有一个名为a的动态web项目。这个项目a依赖于另一个名为B的项目,该项目使用dom4jjar。如果B将这个jar添加为依赖项,而我将项目B添加到项目a的构建路径中,并且在项目B中有一个方法抛出Dom4J异常,那么我如何避免将Dom4J添加到项目a中作为依赖项,这样我就不会在两个项目中都将Dom4J作为依赖项?您不能这样做,因为项目a需要知道Dom4J异常。唯一的方法是修改项目B以不引发dom4j异常。通常,这是通过捕获B中的异常并抛出一个更常见的异常或在那里处理异常来完成的。如果代码

让我们假设我有一个名为a的动态web项目。这个项目a依赖于另一个名为B的项目,该项目使用dom4jjar。如果B将这个jar添加为依赖项,而我将项目B添加到项目a的构建路径中,并且在项目B中有一个方法抛出Dom4J异常,那么我如何避免将Dom4J添加到项目a中作为依赖项,这样我就不会在两个项目中都将Dom4J作为依赖项?

您不能这样做,因为项目a需要知道Dom4J异常。唯一的方法是修改项目B以不引发dom4j异常。通常,这是通过捕获B中的异常并抛出一个更常见的异常或在那里处理异常来完成的。

如果代码直接调用一个声明抛出Dom4jException的方法,则需要在构建类路径上有Dom4j。这只是方法签名的一部分,编译器必须能够解析它

如果这是一个问题(即,您希望将Dom4j的存在作为项目B的“实现细节”隐藏),那么您需要确保项目B的面向公共的API没有公开任何Dom4j类。例如,您可以更改
throws
子句以扩展到适当的公共异常或包装异常

请注意,只有当项目A访问项目B中直接引用Dom4J的类时,才会出现此问题。对于不直接编译的内部类来说,这不是一个问题。当然,在运行时仍然需要Dom4J


最后,在Maven中,默认情况下,您还可以在编译时类路径中获得所有可传递的编译时依赖项。所以Dom4J已经存在了,您不应该得到构建错误。但是,如果要使用Dom4J(例如通过捕获异常),最好直接明确地包含它

这取决于您的构建系统。Maven和Gradle在默认情况下会这样做,如果您不想这样做,您必须显式地阻止它。大多数IDE还导出暂时依赖项。当您使用构建工具时?谢谢,我想这可能是一个解决方法。所以在两个类路径上添加jar是pnly的解决方案,对吗?我会尽快把你的回答标记为接受