Я столкнулся со следующим исключением в приложении, которое строится с помощью 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, который я запускаю.
Я видел аналогичную проблему, когда используется зависимость «net.openhft: compiler: 2.2.2», без проблем с 'net.openhft: компилятор: 2.2.1'. Я не знаю причины этой проблемы, но я подозреваю, что это может быть связано с OSGi и загрузкой классов. Также, если вы попытаетесь начать с '-ea' (утверждения включены), Slf4j настроен на максимальный уровень детализации и вставляет дополнительные выходы, это было бы полезно. – leventov
'-Dorg.slf4j.simpleLogger.defaultLogLevel = debug' – leventov
О редактировании 3: не удивительно, потому что Chronicle Map 2.x не использует динамическую загрузку классов. – leventov