首页 > 其他分享 >keycloak~为keycloak-services项目添加第三方模块(首创)

keycloak~为keycloak-services项目添加第三方模块(首创)

时间:2023-10-30 13:44:33浏览次数:22  
标签:maven 添加 模块 infinispan services org keycloak

我们在对keycloak框架中的核心项目keycloak-services进行二次开发过程中,发现了一个问题,当时有这种需求,在keycloak-services中需要使用infinispan缓存,我们直接添加infinispan-core引用之后,在启动keycloak进出错了,提示我们没有找到infinispan.Cache,于是我尝试了如下方法,最终解决了问题。

问题解决的思路与尝试

  1. 【失败】使用maven-jar-plugin插件,添加依赖项,为META-INF/MANIFEST.MF添加dependencies节点
      <dependency>
            <groupId>org.infinispan</groupId>
            <artifactId>infinispan-core</artifactId>
            <scope>provided</scope>
        </dependency>
...
...
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <configuration>
              <archive>
                  <manifestEntries>
                      <Dependencies>org.infinispan,org.infinispan.jboss-marshalling</Dependencies>
                  </manifestEntries>
              </archive>
          </configuration>
      </plugin>
  1. 【失败】使用maven-shade-plugin插件,在生产keycloak-services包时,直接把org.infinispan打到包里
  <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.2.4</version>
      <configuration>
          <artifactSet>
              <includes>
                  <include>org.infinispan:*</include>
              </includes>
          </artifactSet>
          <promoteTransitiveDependencies>true</promoteTransitiveDependencies>&lt;!&ndash; 是否打包间接依赖 &ndash;&gt;

      </configuration>
      <executions>
          <execution>
              <phase>package</phase>
              <goals>
                  <goal>shade</goal>
              </goals>
          </execution>
      </executions>
  </plugin>

上面shade包打完之后,启动出现了发现”两个相同名称的类“,这时我知道,keycloak的jboss容器已经有一个org.infinispan模块了,所以解决问题的关键在于,如何使用它提供的infinispan模块

  1. 【问题解决】 直接修改keycloak-services模块里的module.xml配置文件,即可实现,它的优先级更高,这也是为什么我在“1步“添加manifest未生效的原因所在

实现的具体步骤,在module.xml中,添加对应的模块即可

  1. 从keycloak容器里将/opt/jboss/keycloak/modules/system/layers/keycloak/org/keycloak/keycloak-core/main/module.xml复制出来,在文件的dependencies节点下添加依赖,如<module name="org.infinispan"/>

  2. 修改Dockerfile文件,将这个module.xml文件也复制到上面的容器目录,覆盖原来的文件

  3. 重新构建镜像,启动容器,问题解决

标签:maven,添加,模块,infinispan,services,org,keycloak
From: https://www.cnblogs.com/lori/p/17797639.html

相关文章

  • 【全志R128外设模块配置】USB外设功能配置
    USB外设功能配置USB功能简介USB功能模块包括了USBHost,USBDevice和OTG功能。USBHost目前已经支持上的功能有:MassStorage,UVC。USBDevice目前已经支持上的功能有:ADB,UAC。OTG主要用作Host与Device的切换,如当板子通过USB线连接到USB主机(PC)上时,此时OTG是......
  • Python常用模块-20个常用模块总结
    目录time模块datetime模块random模块os模块sys模块json和pickle模块hashlib和hmac模块logging模块numpy模块pandas模块matplotlib模块re模块typing模块collections模块pathlib模块shutil模块xml模块subprocess模块configparser模块Python常用模块小结time模块......
  • django基础到高手知识笔记总结 共4大模块50页md文档 第2章:django视图和模板的使用
    当你考虑开发现代化、高效且可扩展的网站和Web应用时,Django是一个强大的选择。Django是一个流行的开源PythonWeb框架,它提供了一个坚实的基础,帮助开发者快速构建功能丰富且高度定制的Web应用完整版笔记直接地址:请移步这里共10章,31子模块,总计18647字工程搭建学习目标......
  • python进阶14大模块200页知识体系md笔记,第3篇:linux命令进阶
    本完整笔记从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、html+css、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。完整版笔记直接地址:请移步这里......
  • Python 模块:创建、导入和使用
    什么是模块?将模块视为代码库。模块是一个包含一组函数的文件,您想要在应用程序中包含这些函数。创建一个模块要创建一个模块,只需将要包含在其中的代码保存在扩展名为.py的文件中:示例:将以下代码保存在名为mymodule.py的文件中:defgreeting(name):print("Hello,"+name)......
  • Python 模块:创建、导入和使用
    什么是模块?将模块视为代码库。模块是一个包含一组函数的文件,您想要在应用程序中包含这些函数。创建一个模块要创建一个模块,只需将要包含在其中的代码保存在扩展名为.py的文件中:示例:将以下代码保存在名为mymodule.py的文件中:defgreeting(name):print("Hello,"+name......
  • python__requests模块的session对象
    *****************************************************************************************************************************************************************************************************************面试时,面试官问我:自动化中,只需要登录一次,就可以跑其......
  • Spartacus lazy loading 模块中的配置管理
    如果在懒加载模块中提供了额外的配置,组合商店前端将其合并到全局应用配置中,以支持现有组件和服务的懒加载场景。在大多数情况下,尤其是当懒加载模块主要提供默认配置时,这种方式都能可靠地工作。然而,如果过度使用,特别是当两个模块为配置的同一部分提供不同的配置时,可能会导致问题。......
  • Angular 应用懒加载模块中的配置管理
    在Angular应用程序的开发中,懒加载模块(Lazy-LoadedModules)是一种重要的技术,它允许我们将应用程序划分为可延迟加载的模块,以提高性能和用户体验。然而,当我们在懒加载模块中提供额外的配置时,这会引发一些有趣的技术细节和挑战。本文将详细探讨懒加载模块中的配置管理以及相关的技术......
  • BOSHIDA 散热问题在DC电源模块设计中的重要性和解决方法
    BOSHIDA散热问题在DC电源模块设计中的重要性和解决方法随着电子科技的快速发展,直流(DC)电源模块被广泛应用于各种电子设备和系统中。但是,由于工作时会产生热量,高功率元器件的散热问题一直是DC电源模块设计和制造中的一个重要问题。如果不解决散热问题,会导致系统的性能下降、寿命缩......