使用Clojure中的Geotools - 未处理的java.lang.NoSuchFieldError METER

Ale*_*ham 2 java clojure geotools

好的,所以问题的核心是我收到了这个错误:

 Unhandled java.lang.NoSuchFieldError
 METER
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

               Parser.java:  560  org.geotools.referencing.wkt.Parser/parseSpheroid
               Parser.java:  656  org.geotools.referencing.wkt.Parser/parseDatum
               Parser.java:  867  org.geotools.referencing.wkt.Parser/parseGeoGCS
               Parser.java:  224  org.geotools.referencing.wkt.Parser/parseCoordinateReferenceSystem
               Parser.java:  204  org.geotools.referencing.wkt.Parser/parseCoordinateReferenceSystem
ReferencingObjectFactory.java: 1090  org.geotools.referencing.factory.ReferencingObjectFactory/createFromWKT
        PrjFileReader.java:   94  org.geotools.data.PrjFileReader/<init>
        PrjFileReader.java:   68  org.geotools.data.PrjFileReader/<init>
  ShapefileSetManager.java:  106  org.geotools.data.shapefile.ShapefileSetManager/openPrjReader
ShapefileFeatureSource.java:  519  org.geotools.data.shapefile.ShapefileFeatureSource/readAttributes
ShapefileFeatureSource.java:  475  org.geotools.data.shapefile.ShapefileFeatureSource/buildFeatureType
ShapefileFeatureStore.java:  132  org.geotools.data.shapefile.ShapefileFeatureStore/buildFeatureType
 ContentFeatureSource.java:  343  org.geotools.data.store.ContentFeatureSource/getAbsoluteSchema
 ContentFeatureSource.java:  312  org.geotools.data.store.ContentFeatureSource/getSchema
     ContentDataStore.java:  345  org.geotools.data.store.ContentDataStore/getSchema
NativeMethodAccessorImpl.java:   -2  sun.reflect.NativeMethodAccessorImpl/invoke0
NativeMethodAccessorImpl.java:   62  sun.reflect.NativeMethodAccessorImpl/invoke
DelegatingMethodAccessorImpl.java:   43  sun.reflect.DelegatingMethodAccessorImpl/invoke
               Method.java:  483  java.lang.reflect.Method/invoke
            Reflector.java:   93  clojure.lang.Reflector/invokeMatchingMethod
            Reflector.java:   28  clojure.lang.Reflector/invokeInstanceMethod
              geometry.clj:   40  grafter.tabular.geometry/store->dataset
              geometry.clj:   39  grafter.tabular.geometry/store->dataset
              geometry.clj:   51  grafter.tabular.geometry/eval17505/fn
              MultiFn.java:  233  clojure.lang.MultiFn/invoke
                common.clj:  191  grafter.tabular.common/dispatch-with-format-option
                common.clj:  180  grafter.tabular.common/dispatch-with-format-option
                common.clj:  197  grafter.tabular.common/eval1293/fn
              MultiFn.java:  233  clojure.lang.MultiFn/invoke
                common.clj:  200  grafter.tabular.common/read-dataset
                common.clj:  199  grafter.tabular.common/read-dataset
               RestFn.java:  410  clojure.lang.RestFn/invoke
                      REPL:   44  grafter.tabular.geometry/eval17511
                      REPL:   44  grafter.tabular.geometry/eval17511
             Compiler.java: 6927  clojure.lang.Compiler/eval
             Compiler.java: 6890  clojure.lang.Compiler/eval
                  core.clj: 3105  clojure.core/eval
                  core.clj: 3101  clojure.core/eval
                  main.clj:  240  clojure.main/repl/read-eval-print/fn
                  main.clj:  240  clojure.main/repl/read-eval-print
                  main.clj:  258  clojure.main/repl/fn
                  main.clj:  258  clojure.main/repl
                  main.clj:  174  clojure.main/repl
               RestFn.java: 1523  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   87  clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
                  AFn.java:  152  clojure.lang.AFn/applyToHelper
                  AFn.java:  144  clojure.lang.AFn/applyTo
                  core.clj:  646  clojure.core/apply
                  core.clj: 1881  clojure.core/with-bindings*
                  core.clj: 1881  clojure.core/with-bindings*
               RestFn.java:  425  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   85  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:   55  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:  222  clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
    interruptible_eval.clj:  190  clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
                  AFn.java:   22  clojure.lang.AFn/run
   ThreadPoolExecutor.java: 1142  java.util.concurrent.ThreadPoolExecutor/runWorker
   ThreadPoolExecutor.java:  617  java.util.concurrent.ThreadPoolExecutor$Worker/run
               Thread.java:  745  java.lang.Thread/run
Run Code Online (Sandbox Code Playgroud)

调用使用某些geotools功能的函数时org.geotools/gt-shapefile.我的起始版本是15.1.

奇怪的是,我们13.2在一个几乎相同的应用程序中使用这个项目(版本),使用相同的调用代码和相同的命名空间来调用; 但是使用该版本在这里不起作用 - 抛出相同的错误.

我试过了:

  • 有问题的lib的多个版本,15.1从那里开始并从那里回滚
  • 多个版本的clojure
  • 我们的内部库的多个版本在两个项目之间有所不同

我从环顾四周看到这似乎是一个依赖问题,但我不确定它究竟发生在哪里.

Ale*_*ham 5

很长一段时间后,我设法解决了这个问题 - 并且希望确保它可以用于后代.问题出在javax.measure图书馆; 你可以看到这里的字段.maven 有两个 版本,2010年5月后的持续开发在其他地方.

许多项目混合使用,并且依赖性不匹配可以很容易地发生.在我们的例子中,Apache Tika是罪魁祸首.我们的一个内部库使用Tika,它使用:

[javax.measure/jsr-275 "0.9.3"]
Run Code Online (Sandbox Code Playgroud)

而Geotools使用:

[net.java.dev.jsr-275/jsr-275 "1.0-beta-2”]
Run Code Online (Sandbox Code Playgroud)

因此,将以下内容添加到您project.clj引用的任何项目javax.measure中将解决此问题:

 [library "x.x.x" :exclusions [javax.measure/jsr-275]]
Run Code Online (Sandbox Code Playgroud)

要识别这些,请使用它$ lein deps :tree来探索您的依赖项.