Java项目依赖项
让我们假设我有一个名为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类。例如,您可以更改Java项目依赖项,java,Java,让我们假设我有一个名为a的动态web项目。这个项目a依赖于另一个名为B的项目,该项目使用dom4jjar。如果B将这个jar添加为依赖项,而我将项目B添加到项目a的构建路径中,并且在项目B中有一个方法抛出Dom4J异常,那么我如何避免将Dom4J添加到项目a中作为依赖项,这样我就不会在两个项目中都将Dom4J作为依赖项?您不能这样做,因为项目a需要知道Dom4J异常。唯一的方法是修改项目B以不引发dom4j异常。通常,这是通过捕获B中的异常并抛出一个更常见的异常或在那里处理异常来完成的。如果代码
throws
子句以扩展到适当的公共异常或包装异常
请注意,只有当项目A访问项目B中直接引用Dom4J的类时,才会出现此问题。对于不直接编译的内部类来说,这不是一个问题。当然,在运行时仍然需要Dom4J
最后,在Maven中,默认情况下,您还可以在编译时类路径中获得所有可传递的编译时依赖项。所以Dom4J已经存在了,您不应该得到构建错误。但是,如果要使用Dom4J(例如通过捕获异常),最好直接明确地包含它 这取决于您的构建系统。Maven和Gradle在默认情况下会这样做,如果您不想这样做,您必须显式地阻止它。大多数IDE还导出暂时依赖项。当您使用构建工具时?谢谢,我想这可能是一个解决方法。所以在两个类路径上添加jar是pnly的解决方案,对吗?我会尽快把你的回答标记为接受