我正在尝试使用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>
答案 0 :(得分:0)
除了<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
条目),以指示该模块依赖于该模块,但应从其他位置加载该模块。