Java 使用maven程序集插件时找不到Geotools数据存储
我想使用Geotools(17.1版)访问不同的Geotools数据存储。在我的POM中,我使用maven assembly插件(3.0.0版)来聚合我的项目输出:Java 使用maven程序集插件时找不到Geotools数据存储,java,maven,maven-assembly-plugin,geotools,Java,Maven,Maven Assembly Plugin,Geotools,我想使用Geotools(17.1版)访问不同的Geotools数据存储。在我的POM中,我使用maven assembly插件(3.0.0版)来聚合我的项目输出: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.0.0</
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<archive>
<manifest>
<mainClass>de.my.project.MainClass</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
如果我使用生成的JAR运行相同的代码,我只会得到:
//org.geotools.data.shapefile.ShapefileDataStoreFactory@1188e820
//org.geotools.data.shapefile.ShapefileDirectoryFactory@40f08448
有什么想法会导致这个问题吗?Geotools使用Java的服务基础设施来加载实现某些接口的类,比如数据存储。Java的服务基础结构使用jar文件中位于/META-INF/services/中的文本文件 在构建具有依赖项的jar时,您可以将多个jar文件组合成一个jar文件。当多个jar文件为同一接口提供实现时,/META-INF/services/中的文本文件很可能会相互覆盖 您可以通过查看创建的“fat jar”中的服务目录来验证这一点,尤其是在条目/META-INF/services/org.geotools.data.DataStoreFactorySpi中。一些原始的Geotools jar文件将有这样一个具有不同内容的条目,但“胖jar”将只包含一个具有随机条目内容的条目(在您的示例中是用于shapefile的条目) 我对maven shade插件不是很熟悉,但还有其他问题(比如建议使用额外的转换器:
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
还可以看看GeoTools的一个类似的SO问题:GeoTools使用Java的服务基础结构加载实现某些接口的类,如数据存储。Java的服务基础结构使用位于jar文件中/META-INF/services/中的文本文件 在构建具有依赖项的jar时,您可以将多个jar文件合并为一个。当多个jar文件为同一接口提供实现时,/META-INF/services/中的文本文件很可能会相互覆盖 您可以通过查看创建的“fat jar”中的服务目录,特别是条目/META-INF/services/org.geotools.data.DataStoreFactorySpi来验证这一点。一些原始的geotools jar文件将包含具有不同内容的条目,但“fat jar”将只包含一个具有随机内容的条目(在您的示例中,是用于shapefile的) 我对maven shade插件不是很熟悉,但还有其他问题(比如建议使用额外的转换器:
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
还有一个与GeoTools类似的SO问题:谢谢,你说得对。
org.GeoTools.data.DataStoreFactorySpi
中的存储被覆盖。但顺序似乎不是随机的。请参阅常见问题解答()有关所需Maven Shade设置的详细信息谢谢,你说得对。org.geotools.data.DataStoreFactorySpi
中的存储被覆盖。但顺序似乎不是随机的。有关所需Maven Shade设置的详细信息,请参阅常见问题解答()
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />