Восстановление leveldb в VS2017 для верблюда leveldb - PullRequest
0 голосов
/ 24 апреля 2019

Я использовал camel-leveldb в своем приложении java 8, и все работало нормально, пока я не обновил свою среду выполнения до распространяемого VC ++ 2017 по некоторым причинам безопасности.

Итак, среда выполнения VC ++ 10 будет удалена и заменена средой выполнения VC ++ 17.

camel-leveldb использует leveldb-jni из fusesource, который является jni для leveldb, написанного Google, который является кодом C ++. Первоначально он был построен и выпущен в 2010 году.

Следовательно, я обновил среду выполнения моей системы до 2017 года, мое java-приложение не запускается со следующей ошибкой

Java.lang.UnsatisfiedLinkError: Could not load library. Reasons: [no leveldbjni64-1.8 in java.library.path, no leveldbjni-1.8 in java.library.path, no leveldbjni in java.library.path, C:\Windows\Temp\leveldbjni-64-1-1629218473399727758.8: Can't find dependent libraries]
          at org.fusesource.hawtjni.runtime.Library.doLoad(Library.java:182)
          at org.fusesource.hawtjni.runtime.Library.load(Library.java:140)
          at org.fusesource.leveldbjni.JniDBFactory.<clinit>(JniDBFactory.java:48)
          at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
          at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
          at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
          at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
          at java.lang.Class.newInstance(Class.java:442)
          at org.apache.camel.component.leveldb.LevelDBFile.getFactory(LevelDBFile.java:189)
          at org.apache.camel.component.leveldb.LevelDBFile.start(LevelDBFile.java:174)
          at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75)
          at org.apache.camel.component.leveldb.LevelDBAggregationRepository.doStart(LevelDBAggregationRepository.java:411)
          at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
          at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75)
          at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
          at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:104)
          at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:90)
          at org.apache.camel.processor.aggregate.AggregateProcessor.doStart(AggregateProcessor.java:1317)
          at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
          at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75)

Я хочу сделать поддержку camel-leveldb только vs2017.

Это означает, что базовая библиотека leveldb C ++ должна быть перекомпилирована с использованием VS2017. Хотя я знаю, как это сделать, я хочу найти самый простой способ упаковать эту новую dll в jar leveljni и inturn внутри jar camel-leveldb.

Могу ли я просто распаковать банку, заменить dll и снова сжать ее? Будет ли этот хак работать, и самое главное это безопасно?

Документация в leveldbjni https://github.com/fusesource/leveldbjni/blob/master/releasing.md не так ясно.

Было бы здорово получить некоторое представление об этом.

Заранее спасибо

...