好的,这可能是一个熟悉的问题,但是我仍然感到困惑,我正在努力寻找一个真正阐明细节的答案。
我有几个 Maven 项目的场景 ,大多数创建 JAR 工件,一个负责创建 WAR 工件。WAR 工件依赖于具有编译范围的 JAR 工件,以便将这些 JAR 包含在 WEB-INF/lib 文件夹中。
我仍然不清楚这个插件如何响应范围,即哪些依赖项和传递依赖项包含在 WARs lib 文件夹中。我的理解是,编译将导致包含一个 JAR 及其依赖项,这些依赖项也使用编译范围声明(以此类推递归),但是提供的责任停止了。具有提供范围的依赖项将不会被包含在内。
问题
举一个具体的例子,WAR项目war-a
依赖于一个内部JAR项目jar-a
,其范围为compile。jar-a
由于范围,将包含在 WARs lib 文件夹中。现在jar-a
依赖于具有编译范围的 3rd 方库 log4j。由于其作用域,log4j JAR 也包含在 lib 文件夹中。但是...... log4j 的依赖项也是如此,例如邮件等。我想要 log4j 但我不想要它的依赖项。如果我用提供的方式配置 log4j,它的依赖项将不会被包括在内,但本身也不会。
我已经考虑了选项,例如使用排除项,但是当有 40 多个内部 JAR 项目时,POM 文件中有很多排除项。此外,要使用排除项需要我了解第三方依赖项的具体知识,这感觉没有必要。
任何人都可以澄清,扩展,回答上述任何问题吗?任何输入将不胜感激。
更新除上述内容外,我还坚持做出决定。我是否应该允许将所需的 3rd 方 JAR 列表捆绑在 WAR 中,通过我们拥有的各种内部 Maven JAR 项目的编译范围依赖关系来解决。或者我应该声明内部 Maven JAR 项目中提供的所有 3rd 方依赖项,然后在 Maven WAR 项目上指定一个带有编译范围的明确集。
我更喜欢前一种方法,因为额外的第 3 方依赖项将通过传递依赖路径自动添加到 WAR 工件中。然而,第二种方法提供了确切知道将包含哪些 3rd 方库的确定性。