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


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

    问题解决的思路与尝试

    1. 【失败】使用maven-jar-plugin插件,添加依赖项,为META-INF/MANIFEST.MF添加dependencies节点
          <dependency>
                <groupId>org.infinispangroupId>
                <artifactId>infinispan-coreartifactId>
                <scope>providedscope>
            dependency>
    ...
    ...
          <plugin>
             <groupId>org.apache.maven.pluginsgroupId>
              <artifactId>maven-jar-pluginartifactId>
              <configuration>
                  <archive>
                      <manifestEntries>
                          <Dependencies>org.infinispan,org.infinispan.jboss-marshallingDependencies>
                      manifestEntries>
                  archive>
              configuration>
          plugin>
    
    1. 【失败】使用maven-shade-plugin插件,在生产keycloak-services包时,直接把org.infinispan打到包里
      <plugin>
          <groupId>org.apache.maven.pluginsgroupId>
          <artifactId>maven-shade-pluginartifactId>
          <version>3.2.4version>
          <configuration>
              <artifactSet>
                  <includes>
                      <include>org.infinispan:*include>
                  includes>
              artifactSet>
              <promoteTransitiveDependencies>truepromoteTransitiveDependencies><! 是否打包间接依赖 >
    
          configuration>
          <executions>
              <execution>
                  <phase>packagephase>
                  <goals>
                      <goal>shadegoal>
                  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节点下添加依赖,如

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

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

  • 相关阅读:
    Microsoft Office for Mac最新版本安装教程,亲测可用!!!
    新发现,新挑战,技术出海的机遇与挑战丨PingCAP DevCon 2022 出海专场
    Redis进阶
    2 开源鸿蒙OpenHarmony4.1源码下载和编译流程
    前端关于对象中套用对象传参的小问题
    50道Redis面试题及答案,你能答出来几道?
    vue3基础学习
    tomcat的部署以及优化
    springboot罗亚方舟考研资料库网站设计与实现 毕业设计-附源码302302
    软件测试大环境求职难,跳槽难?我在大军中异军突起
  • 原文地址:https://www.cnblogs.com/lori/p/17797639.html