java - 在Java中修改来自外部库的文件

标签 java spring maven spring-social-facebook

我有一个 Spring Framework 项目,它使用 Maven 来解决依赖关系。该项目依赖于另一个用于 Facebook 登录的 Spring 项目(Spring Social Facebook)。突然,我开始遇到很多错误,因为 Facebook 登录功能因 Facebook API 的更改而中断。该解决方案非常简单,但需要在外部库的文件中进行细微更改 - 将变量类型从整数更改为长整型。

现在我知道了解决方案,但我无法控制这个库。我想自己解决这个问题,直到用修复程序更新库,而不是在系统损坏的情况下等待几天。

我的问题是:有没有什么简单的方法可以更改这个库的源代码,直到库本身有可用的修复程序?这样做的推荐方法是什么?目前想到两件事: fork 库,进行更改,创建私有(private) Maven 存储库并将依赖项替换为使用私有(private)存储库的依赖项。如果可以的话,我想避免这种情况。我能想到的另一种方法是 fork 库,进行更改,将更新后的库编译成 jar 文件并替换 Maven 依赖项以使用 jar 文件。

有没有更好的方法?在这样的(临时)场景中,您会推荐什么?谢谢!

最佳答案

根据工作经验,我在不止一家公司看到过以下做法:

  • 修复源代码中的问题
  • 用相同的 Maven 坐标再次打包
  • 添加一个分类器,通常是companyname-patch(ed)
  • 把它放在enterprise Maven repository (即 Artifactory 或 Nexus)

因此,您将从

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.7</version>
</dependency>

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.7</version>
  <classifier>company-patch</classifier>
</dependency>

这将帮助您保持更多的可追溯性:

  • 分类器让内部开发人员和承包商清楚地知道这是公司补丁
  • 您确切知道补丁应用到哪个库和哪个版本(因此,部分 self 记录)

此外,它实际上是 Maven classifier 功能的合法且良好的用法。

重复使用相同的 Maven 坐标可能会影响可移植性(我在本地机器上有不同的行为,为什么?)和可维护性(让我们更新这个库,ops.. 它是修补过的,我不知道),而创建新的 Maven 坐标可能会产生误解(这是什么库?)和错误(我将用这个官方的替换,ops.. 它不再起作用了)。

关于java - 在Java中修改来自外部库的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34121725/

相关文章:

java - 绘制圆心和半径的圆

java - 如何在 Java 中获取最大 CPU 时钟

java - 如何使用 Spring + iBatis 解决我的应用程序中的设计问题

apache-flex - Flex 4 应用空白

java - 使用 maven-bundle-plugin 索引 JAR

java - 使用 jdbc 与 oracle 11.2 通信时 ResultSet.next() 挂起

java - 在 Java 中将基元数组转换为容器数组

java - 如何在原型(prototype)之间共享实例(Spring LoC)

java - 如何使用 Spring Boot 配置文件

java - 如何在 EAR 中创建文件夹