2016-03-05 71 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