让我们假设我有一个名为A的动态Web项目。此项目A依赖于另一个名为B的项目,该项目使用Dom4J jar。如果B将此jar添加为依赖项并且我在项目A的构建路径中添加项目B,并且在项目B中有一个抛出Dom4J异常的方法,我如何避免将Dom4J添加为项目A中的依赖项,以便我不是将两个项目中的Dom4J作为依赖项吗?
答案 0 :(得分:4)
如果您的代码直接调用声明抛出Dom4jException的方法,则需要在构建类路径中使用Dom4j。这只是方法签名的一部分,编译器必须能够解决它。
如果这是一个问题(即你想隐藏Dom4j作为"实施细节"项目B),那么你需要确保项目B没有公开-facing API公开任何Dom4j类。例如,您可以将throws
子句更改为适当的公共异常或包装异常。
请注意,仅当项目A访问项目B中直接引用Dom4J的类时,才会出现此问题。对于您不能直接编译的内部课程来说,这不是问题。当然,你仍然需要在运行时使用Dom4J。
最后,在Maven中,默认情况下,您还可以在编译时类路径中获得所有可传递的编译时依赖项。所以Dom4J已经存在,你不应该得到构建错误。但是,如果您要使用Dom4J(例如通过捕获异常),则直接明确地包含它是一种好习惯。
答案 1 :(得分:0)
你不能因为项目A需要知道dom4j异常。唯一的方法是修改项目B不抛出dom4j异常。通常,这是通过在B中捕获异常并抛出更常见的异常或在那里处理异常来完成的。