使用moditect将模块信息添加到依赖项而无需下载依赖项

问题描述

我正在尝试使用moditect,以便在使用自动命名模块(ArcGIS)时创建运行时映像。 ArcGIS模块需要openjfx 11(由于它是JavaFX项目,因此我也添加了它作为依赖项)。但是,当我尝试构建运行时映像时,出现以下错误

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

我认为这是因为maven还在项目中添加了ArcGIS openjfx依赖项(这包括针对每个平台(win,mac,linux)的openjfx,这导致它具有重复的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>

解决方法

除了<artifact>之外,<moduleInfo>标签还需要使用moduleInfoSource覆盖moduleinfo.java的来源:

<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条目),以指示该模块依赖于该模块,但应从其他位置加载该模块。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...