2016-03-05 62 views
2

我在使用Gradle構建的應用程序中遇到以下異常,並使用AspectJ。在Eclipse中從開始,但無法啓動一次建有搖籃的時候 的應用程序正常工作:Chronicle Map:ClassNotFoundException with 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並且我的Chronicle地圖被實例化爲Spring bean的一部分。

編輯2:調試日誌沒有產生任何有用的東西。接下來我會嘗試降級到舊版本的編年圖。

編輯3:用新的3.6.0-RC同樣的錯誤

編輯5:它與

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

編輯4號樓工程時我有

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

在我的構建.gradle爲了添加tools.jar(Gradle沒有提供afaik)。它也是我開始生成的(胖)jar文件的一部分。

+0

我見過類似的問題,當使用'net.openhft:compiler:2.2.2'依賴時,'net.openhft:compiler: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

感謝您的確認!之前使用過Google,但不知道是否可以使用生成的輸出而無需額外的預防措施。 – jdoe