2015-02-23 86 views
0

我有项目“A”,其中包括log4j.jar(log4j版本1.2)。 我将此项目“A”导出为A.jar如何导入/导出包含旧版本外部罐子的罐子?

当有人有log4j的更新版本(1.2.17),他进口我的一个项目(进口a.jar文件),他会找不到类错误(因为log4j的是不一样的版本)

是否有没有创建A.jar(使用更新的log4j jar)的新版本来解决这个问题的方法?

+0

项目A和依赖项目如何处理它们的依赖关系?如果您使用的是Maven或Gradle,则可以排除依赖关系(http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html和https://gradle.org/docs分别为/current/userguide/dependency_management.html#sub:exclude_transitive_dependencies)。如果你从Eclipse导出,这个问题可能会有所帮助http://stackoverflow.com/questions/15430333/how-to-pack-jar-file-without-containing-depedency-jar-libraries-using-eclipse – kuporific 2015-02-23 14:35:57

回答

0

听起来像你遇到了经典的依赖管理问题。

长期的解决方案是使用为此设计的构建工具 - 在Java中可能最好的开始是Maven,但也考虑Ivy作为更多的单一用途的工具。

您可以指定您依赖的库的版本(当您的构建/运行时生命周期中为时为),并根据需要从全局存储库中获取它们。

+0

谢谢。所以我将使用maven来构建A.jar, 其他人(使用我的A.jar)是否也需要使用maven? – user3668129 2015-02-23 16:36:44

+0

理想情况下,两者都可以。您希望您的构建能够_specify_它需要'log4j',但不需要_bundle_。 然后另一个项目可以直接拉你的JAR,或者如果他们使用Maven,它会从POM得知它需要'log4j',所以他们可以在_their_项目中指定包含(或排除)哪些版本来整理类没有发现错误。 – declension 2015-02-24 09:48:28