Использование moditect для добавления информации о модуле в зависимость без загрузки зависимости

Я пытаюсь использовать moditect, чтобы разрешить создание образа во время выполнения при использовании автоматизированных именованных модулей (ArcGIS). Для модуля ArcGIS требуется openjfx 11 (который я также добавил в качестве зависимости, поскольку это проект JavaFX). Однако когда я пытаюсь создать образ среды выполнения, я получаю следующую ошибку

java.lang.IllegalArgumentException: duplicate element: javafx.base

Я думаю, это потому, что maven также добавляет в проект зависимость openjfx от ArcGIS (это включает openjfx для каждой платформы (win, mac, linux), что приводит к дублированию javafxs.

Как мне добавить информацию о модуле без добавления зависимостей openjfx?

Здесь часть pom.xml с плагином moditect, если это помогает

            <plugin>
                <groupId>org.moditect</groupId>
                <artifactId>moditect-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>add-module-info-to-dependencies</id>
                        <phase>package</phase>
                        <configuration>
                            <overwriteExistingFiles>true</overwriteExistingFiles>
                            <outputDirectory>${project.build.directory}/modules</outputDirectory>
                            <modules>
                                ...
                                <module>
                                    <artifact>
                                        <groupId>com.esri.arcgisruntime</groupId>
                                        <artifactId>arcgis-java</artifactId>
                                        <version>${arcgis.version}</version>
                                    </artifact>
                                    <moduleInfo>
                                        <name>com.esri.arcgisruntime</name>
                                    </moduleInfo>
                                </module>
                            </modules>
                        </configuration>
                        <goals>
                            <goal>add-module-info</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

1 ответ

В добавок к <artifact>вместо этого <moduleInfo> теги, вам нужно будет переопределить источник moduleinfo.java с помощью moduleInfoSource:

<module>
    <artifact>...</artifact>    
    <moduleInfoSource>
        module com.esri.arcgisruntime {
            requires ...;
            exports ...;
            provides ...
                with ...;
        }
    </moduleInfoSource>
</module>

Вам нужно будет пройти через структуру зависимостей com.esri.arcgisruntime для этого, но moditect предоставляет generate-module-info цель, которая автоматически сгенерирует это для вас.

Тогда вы обновите requires javafx.base к requires transitive javafx.base (и потенциально другие javafx Записи), чтобы указать, что модуль зависит от него, но должен загружать его откуда-то еще.

Другие вопросы по тегам