我們在對keycloak框架中的核心項目keycloak-services進行二次開發過程中,發現了一個問題,當時有這種需求,在keycloak-services中需要使用infinispan緩存,我們直接添加infinispan-core引用之後,在啟動keycloak進出錯了,提示我們沒有找到i ...
我們在對keycloak框架中的核心項目keycloak-services
進行二次開發過程中,發現了一個問題,當時有這種需求,在keycloak-services中需要使用infinispan緩存,我們直接添加infinispan-core引用之後,在啟動keycloak進出錯了,提示我們沒有找到infinispan.Cache,於是我嘗試瞭如下方法,最終解決了問題。
問題解決的思路與嘗試
- 【失敗】使用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>
- 【失敗】使用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><!– 是否打包間接依賴 –>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</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節點下添加依賴,如
<module name="org.infinispan"/>
-
修改Dockerfile文件,將這個module.xml文件也複製到上面的容器目錄,覆蓋原來的文件
-
重新構建鏡像,啟動容器,問題解決
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!