【问题标题】:Two dependencies containing same classes包含相同类的两个依赖项
【发布时间】:2013-05-23 23:16:42
【问题描述】:

我有一个使用 libosm-2.5.2-RC1 库的 maven 项目。该库包含渗透库。下载 libosm 时,osmosis 库已经打包在 libosm 库的 jar 文件中。问题是这个 osmosis 库太旧了,不能处理当前的 OSM 数据。在 maven 中,我可以添加新版本的 osmosis 作为依赖项,如果我将它放在比 libosm 库更早的 POM 文件中,则使用来自新 osmosis 的较新类。但是,当我构建项目时,两个库都包含在 lib 文件夹中。并且在部署之后,tomcat 服务器使用的是 libosm 中打包的旧 osmosis。

我想要实现的是使用 libosm 库,但如果 libosm 和新 osmosis 库中都有类,那么我想使用新 osmosis 库中的类。

一种可行的解决方案是手动解压 libosm 的 jar 文件并用新的渗透类重写旧的渗透类。但我想用 maven 实现同样的目标,因为我想共享项目,其他人手动添加我创建的更新的 jar libosm 文件并不方便。

【问题讨论】:

    标签: maven tomcat dependencies


    【解决方案1】:

    如果您不需要来自 libosm-2.5.2-RC1 的类,并且如果您知道不希望包含在此 jar 中的包/类,则可以在 maven-jar-plugin 中将它们删除s 封装阶段。此链接显示了如何执行此操作。让我知道这是否有帮助。 http://maven.40175.n5.nabble.com/Excluding-packages-and-classes-from-jar-td106688.html

    【讨论】:

    • 谢谢,但不是我想要的。如果可以仅排除一个依赖项的类(是吗?),那将很有帮助。在 libosm 中,我想排除包 org.openstreetmap.osmosis.core.customdb.v0_6.impl (以及许多其他包)。但是在新的渗透依赖(也有包)中,我不希望它被排除在外。为了更好地描述它,如果我解压了 libosm 和新 osmosis 的 jar,那么我将获取新的 osmosis 文件,并用它们替换 libosm 中旧 osmosis 中的所有现有文件。但是,如果旧 osmosis 有其他文件(新 osmosis 中不存在),我想保留这些文件。
    • 非常有趣的情况 :) 基本上你想先提取旧的 jar,然后在上面覆盖新的 :) 我认为使用一些插件重新打包一个 jar 是可能的。为什么不将其制作为您自己的自定义 jar 并将其部署到本地 maven 存储库?
    猜你喜欢
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多