2016-03-05 2 views
2

Я столкнулся со следующим исключением в приложении, которое строится с помощью Gradle и использует AspectJ. приложение отлично работает при запуске из в Eclipse, но не запускается, как только построен с Gradle:Хроника-карта: ClassNotFoundException с Gradle & AspectJ

Caused by: java.lang.AssertionError: java.lang.ClassNotFoundException: net.openhft.chronicle.hash.VanillaGlobalMutableState$$Native 
at net.openhft.chronicle.values.ValueModel.createClass(ValueModel.java:313) ~[chronicle-values-1.0.3-alpha.jar!/:na] 
at net.openhft.chronicle.values.ValueModel.createNativeClass(ValueModel.java:286) ~[chronicle-values-1.0.3-alpha.jar!/:na] 
at net.openhft.chronicle.values.ValueModel.nativeClass(ValueModel.java:268) ~[chronicle-values-1.0.3-alpha.jar!/:na] 
at net.openhft.chronicle.values.Values.nativeClassFor(Values.java:51) ~[chronicle-values-1.0.3-alpha.jar!/:na] 
at net.openhft.chronicle.values.Values.newNativeReference(Values.java:38) ~[chronicle-values-1.0.3-alpha.jar!/:na] 
at net.openhft.chronicle.hash.impl.VanillaChronicleHash.createGlobalMutableState(VanillaChronicleHash.java:324) ~[chronicle-map-3.5.0-rc.jar!/:3.5.0-rc] 
at net.openhft.chronicle.hash.impl.VanillaChronicleHash.initOwnTransients(VanillaChronicleHash.java:373) ~[chronicle-map-3.5.0-rc.jar!/:3.5.0-rc] 
at net.openhft.chronicle.hash.impl.VanillaChronicleHash.initTransients(VanillaChronicleHash.java:369) ~[chronicle-map-3.5.0-rc.jar!/:3.5.0-rc] 
at net.openhft.chronicle.map.VanillaChronicleMap.initTransients(VanillaChronicleMap.java:146) ~[chronicle-map-3.5.0-rc.jar!/:3.5.0-rc] 
at net.openhft.chronicle.map.VanillaChronicleMap.<init>(VanillaChronicleMap.java:102) ~[chronicle-map-3.5.0-rc.jar!/:3.5.0-rc] 
at net.openhft.chronicle.map.ChronicleMapBuilder.newMap(ChronicleMapBuilder.java:1703) ~[chronicle-map-3.5.0-rc.jar!/:3.5.0-rc] 
at net.openhft.chronicle.map.ChronicleMapBuilder.lambda$createWithFile$93(ChronicleMapBuilder.java:1449) ~[chronicle-map-3.5.0-rc.jar!/:3.5.0-rc] 
at net.openhft.chronicle.map.ChronicleMapBuilder$$Lambda$7/78866071.fileIOAction(Unknown Source) ~[na:na] 
at net.openhft.chronicle.map.ChronicleMapBuilder.lambda$fileLockedIO$92(ChronicleMapBuilder.java:182) ~[chronicle-map-3.5.0-rc.jar!/:3.5.0-rc] 
at net.openhft.chronicle.map.ChronicleMapBuilder$$Lambda$8/862681096.apply(Unknown Source) ~[na:na] 
at java.util.concurrent.ConcurrentHashMap.compute(Unknown Source) ~[na:1.8.0_45] 
at net.openhft.chronicle.map.ChronicleMapBuilder.fileLockedIO(ChronicleMapBuilder.java:179) ~[chronicle-map-3.5.0-rc.jar!/:3.5.0-rc] 
at net.openhft.chronicle.map.ChronicleMapBuilder.createWithFile(ChronicleMapBuilder.java:1447) ~[chronicle-map-3.5.0-rc.jar!/:3.5.0-rc] 
at net.openhft.chronicle.map.ChronicleMapBuilder.createPersistedTo(ChronicleMapBuilder.java:1400) ~[chronicle-map-3.5.0-rc.jar!/:3.5.0-rc] 

В моей build.gradle у меня есть:

compile "net.openhft:chronicle-map:3.5.0-rc" 

Я также попытался это с более ранними версиями , безуспешно.

Одна вещи, которую я заметил, когда начиная с Eclipse, что это новое предупреждение появляется, когда хроника кулака доступа:

warning: Supported source version 'RELEASE_7' from annotation processor 'org.neo4j.kernel.impl.annotations.ServiceProcessor' less than -source '1.8' 
warning: Supported source version 'RELEASE_7' from annotation processor 'org.neo4j.kernel.impl.annotations.DocumentationProcessor' less than -source '1.8' 

, но я не уверен, если это родственное. Я пропустил какую-то другую зависимость?

Редактировать: Я также хотел бы упомянуть, что я использую Spring и что моя карта хроники создается как часть весеннего боба.

Редактировать 2: Журналы отладки не принесли ничего полезного. Затем я попытаюсь перейти на более раннюю версию хроники.

Edit 3: Он работает при сборке

compile "net.openhft:chronicle-map:2.4.12" 

Edit 4: Та же ошибка с новым 3.6.0-RC

Edit 5: У меня есть

compile files(org.gradle.internal.jvm.Jvm.current().getToolsJar()) 

в моей сборки .gradle, чтобы добавить tools.jar (Gradle не предоставляет afaik). Это также часть полученного (жирного) файла jar, который я запускаю.

+0

Я видел аналогичную проблему, когда используется зависимость «net.openhft: compiler: 2.2.2», без проблем с 'net.openhft: компилятор: 2.2.1'. Я не знаю причины этой проблемы, но я подозреваю, что это может быть связано с OSGi и загрузкой классов. Также, если вы попытаетесь начать с '-ea' (утверждения включены), Slf4j настроен на максимальный уровень детализации и вставляет дополнительные выходы, это было бы полезно. – leventov

+1

'-Dorg.slf4j.simpleLogger.defaultLogLevel = debug' – leventov

+0

О редактировании 3: не удивительно, потому что Chronicle Map 2.x не использует динамическую загрузку классов. – leventov

ответ

1

Хроника карта версия 3.7.0-rc не имеет этой проблемы. Он испускает некоторые предупреждения о вреде, которые уходят со следующей выпущенной версией.

+0

3.10.1 - ошибка воспроизведена. Любые обходные пути? – jdoe

+1

@jdoe обходной путь: http://blog.siteos.de/java/javaee/chroniclemap/2016/05/16/How-To-Use-ChronicleMap-With-JavaEE.html Отход от динамической компиляции полностью включен в проект дорожная карта, которая должна полностью устранить такие проблемы. – leventov

+0

Спасибо за подтверждение! Ранее изучал его, но не знал, может ли сгенерированный вывод использоваться без дополнительных мер предосторожности. – jdoe