JPMS / Jigsaw keycloak-spring-boot-starter (неверное имя модуля и ResolutionException) - PullRequest
1 голос
/ 01 апреля 2020

приложение maven Java 11 модульно с JPMS / Jigsaw.

Проблема 1: недопустимое имя модуля адаптера keycloak-spring-boot-2-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: ?

Спасибо за вашу помощь и наилучшими пожеланиями,

Пьер

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Решением проблемы 2 является создание собственного автоматического c модуля.

Создайте новый модуль и добавьте POM со следующими подключаемыми модулями и зависимостями.

<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-spring-boot-2-adapter</artifactId>
    <version>9.0.2</version>
    <exclusions>
        <exclusion>
        <groupId> org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        </exclusion>
        ...
    </exclusions>
</dependency>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-clean-plugin</artifactId>
        </plugin>
        <!-- Maven Assembly Plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
                <!-- get all project dependencies -->
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <appendAssemblyId>false</appendAssemblyId>
                <outputDirectory>../mods</outputDirectory>
                <archive>
                    <manifestEntries>
                        <Automatic-Module-Name>modulename</Automatic-Module-Name>
                    </manifestEntries>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id> <!-- this is used for inheritance merges -->
                    <phase>package</phase> <!-- bind to the packaging phase -->
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.5.2</version>
            <executions>
                <execution>
                    <id>install-external</id>
                    <phase>install</phase>
                    <configuration>
                        <file>${project.basedir}/../mods/modulename-1.0-SNAPSHOT.jar</file>
                        <repositoryLayout>default</repositoryLayout>
                        <groupId>com.xyz.assembly</groupId>
                        <artifactId>modulename</artifactId>
                        <version>1.0-SNAPSHOT</version>
                        <packaging>jar</packaging>
                        <generatePom>true</generatePom>
                    </configuration>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

You можно добавить зависимость через com.xyz.assembly в качестве groupID для других модулей.

Но имейте в виду! Он будет использовать информацию о модуле. java из log4j, если вы этого не сделаете исключите его в этом модуле сборки.

0 голосов
/ 02 апреля 2020

Существует билет ( KEYCLOAK-12499 ) с двумя подзадачами, описывающими две проблемы, с которыми вы сталкиваетесь: KEYCLOAK-9072 (Проблема 1) и KEYCLOAK- 9073 (задача 2).

Первая проблема является тривиальной, как с вашей точки зрения, так и с точки зрения сопровождающих Keycloak.

Вторая проблема , однако, требует больше работы, потому что два (фактически три) артефакта совместно используют один и тот же пакет и экспортируют его, когда они используются в качестве автоматических c модулей (потому что автоматические c модули экспортируют все свои пакеты ).
Экспорт одного и того же пакета из более чем одного модуля, однако, не разрешен (http://openjdk.java.net/projects/jigsaw/spec/reqs/#non -интерференция ).
Три проблемы, связанные с этой проблемой: keycloak-spring- загрузочный адаптер-ядро , keycloak-spring-boot-адаптер и keycloak-spring-boot-2-адаптер . Артефакт ядра адаптера работает как абстрактная реализация для двух других модулей, а предоставляет закрытые классы и методы пакета, которые используются двумя другими модулями .
Подчеркнутый текст является ядром второго проблема: совместное использование пакета между различными артефактами работает для classi c Java без модулей, но система модулей блокирует это, потому что нарушает инкапсуляцию.
Для решения второй проблемы необходимо сделать копии keycloak-spring-boot-adapter-core и keycloak-spring-boot-2-adapter и корректируйте их код - по крайней мере, пока не появятся исправления для официальных артефактов.

...