Skip to content

GeoTools service files not properly merged in R5 7.5 #992

@mattwigway

Description

@mattwigway

When trying to load raster cost data with R5 7.5, one gets the following familiar error:

INFO: 
org.opengis.referencing.NoSuchAuthorityCodeException: Authority "EPSG" is unknown or doesn't match the supplied hints. Maybe it is defined in an unreachable JAR file?
        at org.geotools.referencing.factory.ManyAuthoritiesFactory.noSuchAuthority(ManyAuthoritiesFactory.java:493)
        at org.geotools.referencing.factory.ManyAuthoritiesFactory.getAuthorityFactory(ManyAuthoritiesFactory.java:473)
        at org.geotools.referencing.factory.ManyAuthoritiesFactory.getCRSAuthorityFactory(ManyAuthoritiesFactory.java:548)
        at org.geotools.referencing.factory.AuthorityFactoryAdapter.createCoordinateReferenceSystem(AuthorityFactoryAdapter.java:808)
        at org.geotools.coverage.grid.io.imageio.geotiff.GeoTiffMetadata2CRSAdapter.createGeographicCoordinateReferenceSystem(GeoTiffMetadata2CRSAdapter.java:376)
        at org.geotools.coverage.grid.io.imageio.geotiff.GeoTiffMetadata2CRSAdapter.createCoordinateSystem(GeoTiffMetadata2CRSAdapter.java:184)
        at org.geotools.gce.geotiff.GeoTiffReader.getHRInfo(GeoTiffReader.java:355)
        at org.geotools.gce.geotiff.GeoTiffReader.<init>(GeoTiffReader.java:265)
        at org.geotools.gce.geotiff.GeoTiffFormat.getReader(GeoTiffFormat.java:331)
        at org.geotools.gce.geotiff.GeoTiffFormat.getReader(GeoTiffFormat.java:77)
        at com.conveyal.r5.rastercost.RasterDataSourceSampler.<init>(RasterDataSourceSampler.java:89)
        at com.conveyal.r5.rastercost.ElevationLoader.<init>(ElevationLoader.java:41)
        at com.conveyal.r5.analyst.scenario.RasterCost.resolve(RasterCost.java:67)
        at org.ipea.r5r.Network.NetworkBuilder.createNetwork(NetworkBuilder.java:160)
        at org.ipea.r5r.Network.NetworkBuilder.createR5Network(NetworkBuilder.java:67)
        at org.ipea.r5r.Network.NetworkBuilder.checkAndLoadR5Network(NetworkBuilder.java:42)
        at org.ipea.r5r.R5RCore.<init>(R5RCore.java:256)
Caused by: org.geotools.util.factory.FactoryNotFoundException: No factory of kind "CRSAuthorityFactory" found.
        at org.geotools.util.factory.FactoryRegistry.getFactory(FactoryRegistry.java:445)
        at org.geotools.util.factory.FactoryCreator.getFactory(FactoryCreator.java:137)
        at org.geotools.referencing.ReferencingFactoryFinder.getAuthorityFactory(ReferencingFactoryFinder.java:223)
        at org.geotools.referencing.ReferencingFactoryFinder.getCRSAuthorityFactory(ReferencingFactoryFinder.java:438)
        at org.geotools.referencing.factory.AllAuthoritiesFactory.fromFactoryRegistry(AllAuthoritiesFactory.java:108)
        at org.geotools.referencing.factory.ManyAuthoritiesFactory.getAuthorityFactory(ManyAuthoritiesFactory.java:458)
        ... 15 more

This is indicative of issues with merging the service entries in META-INF/services/ and is a common issue with shadow JARs using Geotools. Unfortunately with the move to Gradle 9 there have been some changes to the shadow JAR plugin that mean this merging doesn't work out of the box anymore. TL;DR to get the service files merged properly for a working shadowJar we need to add to build.gradle in the shadowJar section before the call to mergeServiceFiles:

    filesMatching("META-INF/services/**") {
        duplicatesStrategy = DuplicatesStrategy.INCLUDE
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions