Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用maven程序集插件时找不到Geotools数据存储_Java_Maven_Maven Assembly Plugin_Geotools - Fatal编程技术网

Java 使用maven程序集插件时找不到Geotools数据存储

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</

我想使用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</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" />