使用Java从外部库修改文件

And*_*708 5 java spring maven spring-social-facebook

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

现在我知道了解决方案,但是我无法控制该库。我想自己修复此问题,直到用该修复程序更新该库为止,而不是等系统损坏后再等待几天。

我的问题是:在库本身有可用的修复程序之前,有什么简便的方法可以更改此库的源代码?建议这样做的方法是什么?当前想到两件事:分叉库,进行更改以及创建私有Maven存储库,并将依赖项替换为使用私有存储库的依赖项。如果可以的话,我想避免这种情况。我可以想到的另一种方法是,将库派生,进行更改,将更新的库编译为jar文件并替换Maven依赖项以使用jar文件。

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

A_D*_*teo 4

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

  • 修复源代码中的问题
  • 使用相同的 Maven 坐标再次打包
  • 添加一个分类器,通常是 companyname-patch(ed)
  • 将其放入企业Maven存储库(即Artifactory或Nexus)

因此,您将从

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.7</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.7</version>
  <classifier>company-patch</classifier>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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

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

此外,这实际上是对 Maven 功能的合法且良好的使用classifier

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