1

我正在尝试使用 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>
4

1 回答 1

0

除了<artifact>, instead<moduleInfo>标签之外,您还需要覆盖moduleinfo.javausing的来源moduleInfoSource

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

你必须通过依赖结构com.esri.arcgisruntime来做到这一点,但 moditect 确实提供了一个generate-module-info目标,它将为你自动生成它。

然后您将更新requires javafx.baserequires transitive javafx.base(以及可能的其他javafx条目)以指示模块依赖于它,但应该从其他地方加载它。

于 2020-08-19T17:57:25.800 回答