我如何为我的GeoTools项目发现正确的Java 11模块名称?



我正试图将我的应用程序转换为使用Java 11和Java模块系统,但我很难发现哪些"要求"。要添加到我的模块中的语句。我目前得到错误"The project was not built since its build path is incomplete. Cannot find the class file for org.locationtech.jts.geom.Envelope. Fix the build path then try building this project".

我已经通过https://github.com/geotools/geotools搜索过了,但是我找不到关于哪个模块暴露哪个包的任何提示。例如,有一个模块"org.geotools.tile_client",但是在存储库中搜索它得到零命中(所以我假设geotools模块不是通过配置文件处理的?)。

不幸的是,geotools Javadoc也没有帮助,因为geotools还没有使用命名模块。

https://docs.geotools.org/stable/userguide/tutorial/quickstart/java11.html提到使用与我的POM中声明的相同的要求,但对于我的项目要求(gt-shapefile, gt-swing, gt-tile-client, gt-epsg-hsql, gt-grid),这会导致错误:

The project was not built since its build path is incomplete. Cannot find the class file for org.opengis.referencing.crs.CoordinateReferenceSystem. Fix the build path then try building this project

通过深入挖掘maven依赖项,我发现了一些现在也显式需要的依赖项。这给我带来了更多的错误。

requires org.geotools.opengis;
requires org.geotools.referencing;
requires org.geotools.coverage;
requires org.geotools.main;
requires org.geotools.render;
requires org.geotools.epsg_hsql;
requires org.geotools.shapefile;
requires org.geotools.grid;
requires org.geotools.tile_client;
requires org.geotools.swing;
requires org.geotools.http;

然而,我确实找到了一个似乎不想工作的模块(gt-cql,依赖于gt-render)。要求org.geotools.cql无法解析。

所以,正如顶部所问的,我如何为我的GeoTools项目发现正确的Java 11模块名称?是否有一个具体的提示,我应该需要哪个模块,以摆脱org. locationtechnology .jts.geo . envelope问题?

花了一段时间来实现这一点,但我已经得到了以下解决方案,这要归功于jar——describe-module命令,是否有可能在同一个项目中混合Java 8和Java 9源代码而不使用编译器标志?

  1. 使用mvn dependency:copy-dependencies复制所有.jar文件到target/dependency.

  2. 在target/dependency中创建一个文件"module-report.cmd"内容如下:

    比;module-report.txt (For %%f in (%~dp0*.jar)Jar——file=%%f——describe-module()

只是运行"jar——file=…——describe-module"命令,将其输出到module-report.txt。

  1. 运行模块-报告。

文本文件的内容包含了所有的模块信息,包括包含的包,需要声明的一切。

使用该报告,我可以简单地搜索我无法访问的包,并轻松获得包含它们的模块的名称。

相关内容

  • 没有找到相关文章

最新更新