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

打印 上一主题 下一主题

主题 861|帖子 861|积分 2583

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


  • 【失败】使用maven-jar-plugin插件,添加依赖项,为META-INF/MANIFEST.MF添加dependencies节点
  1.       <dependency>
  2.             <groupId>org.infinispan</groupId>
  3.             <artifactId>infinispan-core</artifactId>
  4.             <scope>provided</scope>
  5.         </dependency>
  6. ...
  7. ...
  8.       <plugin>
  9.          <groupId>org.apache.maven.plugins</groupId>
  10.           <artifactId>maven-jar-plugin</artifactId>
  11.           <configuration>
  12.               <archive>
  13.                   <manifestEntries>
  14.                       <Dependencies>org.infinispan,org.infinispan.jboss-marshalling</Dependencies>
  15.                   </manifestEntries>
  16.               </archive>
  17.           </configuration>
  18.       </plugin>
复制代码

  • 【失败】使用maven-shade-plugin插件,在生产keycloak-services包时,直接把org.infinispan打到包里
  1.   <plugin>
  2.       <groupId>org.apache.maven.plugins</groupId>
  3.       <artifactId>maven-shade-plugin</artifactId>
  4.       <version>3.2.4</version>
  5.       <configuration>
  6.           <artifactSet>
  7.               <includes>
  8.                   <include>org.infinispan:*</include>
  9.               </includes>
  10.           </artifactSet>
  11.           <promoteTransitiveDependencies>true</promoteTransitiveDependencies><!– 是否打包间接依赖 –>
  12.       </configuration>
  13.       <executions>
  14.           <execution>
  15.               <phase>package</phase>
  16.               <goals>
  17.                   <goal>shade</goal>
  18.               </goals>
  19.           </execution>
  20.       </executions>
  21.   </plugin>
复制代码
上面shade包打完之后,启动出现了发现”两个相同名称的类“,这时我知道,keycloak的jboss容器已经有一个org.infinispan模块了,所以解决问题的关键在于,如何使用它提供的infinispan模块

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

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

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表