gpt4 book ai didi

java - 无需重新编译整个项目即可修改 Keycloak 源代码

转载 作者:行者123 更新时间:2023-12-05 05:35:14 27 4
gpt4 key购买 nike

我正在尝试通过自定义 SPI 向 Keycloak 添加一些后量子算法,为此,我需要使用我的代码从 Keycloak 修改一些核心类(主要是 Provider 类),以便系统识别新算法。

不幸的是,重新编译 Keycloak 是一项繁重的工作(需要花费大量时间),因此在开发时修改核心文件会使运行测试和其他东西变得不切实际。

我一直在研究 Keycloak 源文件并注意到我需要修改的提供程序(显然) 没有实现 ProviderFactory 接口(interface),所以(我想想)不可能用 SPI 方法修改这些文件。

我的问题是:是否可以在不重新编译整个 Keycloak 的情况下修改此类?我可以使用自定义 SPI 来解决这些问题吗?我应该尝试其他解决方案吗? (我有点没主意了)

顺便说一句,我需要修改的类之一是 BCPemUtilsProvider,我想做这样的事情:

    @Override
protected String encode(Object obj) {
if (obj == null) {
return null;
}

try {
StringWriter writer = new StringWriter();
JcaPEMWriter pemWriter = new JcaPEMWriter(writer);

/**
* MY CODE GOES HERE...
*/

pemWriter.writeObject(obj);
pemWriter.flush();
pemWriter.close();
String s = writer.toString();
return removeBeginEnd(s);
} catch (Exception e) {
throw new PemException(e);
}
}

最佳答案

我假设您有一份最终部署在某个服务器上的源代码副本。

如果是...

大多数 IDE 允许在调试 session 期间使用 JPDA、GDB 或其他任何工具进行热代码替换。

我使用 JPDA 连接到已部署的耳朵并添加一些代码,而无需编译、构建、重新部署等。

从技术上讲,它的作用是在服务器容器中托管的 jvm 上打开一个调试 session 。

显然,如果需要,您需要在服务器上启用 jvm 调试,并通过 socketAttach 或与您的设置兼容的任何方式附加调试器。

当您热替换代码时,您的 IDE 会上传一些代码并命令远程 jvm 重新编译不同的类,而不是将整个项目重新部署到服务器容器中。

如果您这样做,请记住最好的做法是(使用最新更改进行部署)- 最后上传您更改的所有内容,因为它是一个调试 API ...而且通常情况下,这取决于您如何处理它,它可能会或可能不会开始出现不可预测的行为。

关于java - 无需重新编译整个项目即可修改 Keycloak 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73547002/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com