Ошибка ClassFormatError в учебном пособии по функциям Geotools

#geotools #classformaterror

#geotools #ошибка classformaterror

Вопрос:

Я попытался разобраться с учебным пособием по функциям geotools. Все работало хорошо, пока я не добрался до кода, в котором функции должны храниться в шейп-файле:

 if (featureSource instanceof SimpleFeatureStore) {
            SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource;
            
            // List Features into Collection
            SimpleFeatureCollection collection = new ListFeatureCollection(TYPE, features);
            featureStore.setTransaction(transaction);
            try {
                featureStore.addFeatures(collection);
                transaction.commit();
            }catch (Exception problem) {
                problem.printStackTrace();
                transaction.rollback();
            }finally {
                transaction.close();
            }
            System.exit(0);
        }else {
            System.out.println(typeName   "does not support read/write access.");
            System.exit(0);
        }
  

Исключение среды выполнения ссылается на строку «featureStore.addFeatures(коллекция);
Это сообщение об ошибке:

 Exception in thread "main" java.lang.ClassFormatError: Illegal constant pool index 0 for method name in class file org/geotools/geometry/jts/JTS
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:821)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:719)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:600)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at org.geotools.feature.simple.SimpleFeatureImpl.getBounds(SimpleFeatureImpl.java:258)
at org.geotools.data.Diff.addToSpatialIndex(Diff.java:201)
at org.geotools.data.Diff.add(Diff.java:195)
at org.geotools.data.store.DiffContentFeatureWriter.write(DiffContentFeatureWriter.java:168)
at org.geotools.data.InProcessLockingManager$1.write(InProcessLockingManager.java:296)
at org.geotools.data.store.ContentFeatureStore.addFeature(ContentFeatureStore.java:302)
at org.geotools.data.store.ContentFeatureStore.addFeatures(ContentFeatureStore.java:254)
at de.topotools.topograph.Csv2Shape.main(Csv2Shape.java:121)
  

Я обновил проект maven и проверил, соответствует ли код коду учебника, но ничего не помогло. Я также не смог найти описания этой ошибки в отношении поиска geotools в Интернете.

Я использую Java 14.0.2.

Спасибо за вашу помощь.

Комментарии:

1. пожалуйста, добавьте версию кода и JVM, которую вы используете, и проверьте вывод mvn dependancy:tree, он должен содержать org.locationtech.jts:jts-core:jar:1.17.1:compile

2. Эта строка отсутствовала в выводе mvn dependancy:tree. Итак, я проверил файл pom и изменил версию geotools на 24-shapshot и обновил проект. Теперь я нахожу запись org.locantiontech.jts …. и все работает нормально. Я был смущен этой ошибкой, потому что раньше она работала хорошо, и ошибка возникла без изменения pom-файла. Спасибо за помощь.

Ответ №1:

Похоже, в вашем проекте отсутствует один или два jar. Кроме того, GeoTools на самом деле не поддерживает никаких JVM, кроме 1.8 и 11, но всегда рад слышать, что он работает в других версиях.