spring-boot - JPMS/Jigsaw keycloak-spring-boot-starter(无效的模块名称和ResolutionException)
问题描述
Java 11 maven 应用程序使用 JPMS/Jigsaw 进行了模块化。
问题 1: keycloak-spring-boot-2-adapter 无效模块名 '2'
解决方案 1:由 maven 插件重命名,删除“-2”。但我不确定这是否是一个好的解决方案。
<plugin>
<!-- for copying dependent libraries to folder lib -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>../lib</outputDirectory>
<excludeGroupIds>com.xyz</excludeGroupIds>
<excludeArtifactIds>keycloak-spring-boot-2-adapter</excludeArtifactIds>
</configuration>
</execution>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifacItem>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-2-adapter</artifactId>
<overWrite>true</overWrite>
<outputDirectory>../lib</outputDirectory>
<destFileName>keycloak-spring-boot-adapter-9.0.2.jar</destFileName>
</artifacItem>
</artifactItems>
<!-- other configurations here -->
</configuration>
</execution>
</executions>
</plugin>
问题2: keycloak.spring.boot.adapter和keycloak.spring.boot.adapter.core的包名相同。
java.lang.module.ResolutionException: Modules keycloak.spring.boot.adapter and keycloak.spring.boot.adapter.core export package org.keycloak.adapters.springboot to module org.yaml.snakeyaml
解决方案2:?
感谢您的帮助和最诚挚的问候,
皮埃尔
解决方案
有一张票 ( KEYCLOAK-12499 ) 包含两个子任务,描述了您面临的两个问题:KEYCLOAK-9072(问题 1)和KEYCLOAK-9073(问题 2)。
第一个问题是一个微不足道的问题,无论是从您的角度还是从 Keycloak 维护者的角度来看。
然而,第二个问题需要更多的工作,因为两个(实际上是三个)工件共享同一个包,并且当它们用作自动模块时正在导出它(因为自动模块导出它们的所有包)。
但是,不允许从多个模块中导出同一个包(http://openjdk.java.net/projects/jigsaw/spec/reqs/#non-interference)。
这个问题涉及的三个工件是keycloak-spring-boot-adapter-core、keycloak-spring-boot-adapter和keycloak-spring-boot-2-adapter。适配器核心工件有点像其他两个模块的抽象实现,提供其他两个模块使用的包私有类和方法。
强调的文本是第二个问题的核心:跨不同工件共享包适用于没有模块的经典 Java,但模块系统阻止了这一点,因为它破坏了封装。
解决第二个问题需要您复制keycloak-spring-boot-adapter-core
并keycloak-spring-boot-2-adapter
调整他们的代码——至少在官方工件得到修复之前是这样。
推荐阅读
- c# - Linq to SQL,其中两列必须从列表中匹配
- mysql - 在sql上写查询
- python - 运行 conda update --all 时调试 menuinst_win32
- excel - 关于使用多个匹配项的 Excel ifs 语句的问题
- vba - 显示“插入图片”对话框时,“所有图片”文件名过滤器不包含 .svg 文件扩展名
- c - strtok 没有正确拆分字符串?
- java - 如何实现只接受可比较对象的列表类
- flutter - Flutter:Column 子级的背景颜色
- azure - 在 Azure 中,如何配置拉取请求,以便某些任务必须成功运行才能合并 PR?
- r - 使用多个类别随时间绘制箱线图