我有一个eclipse中的mavenproject,它依赖于包括lucene在内的jars。
这是我的pom:
<dependency>
<groupId>org.dbpedia.spotlight</groupId>
<artifactId>core</artifactId>
<version>0.7</version>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-bolt</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-kernel</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-cypher</artifactId>
<version>3.0.3</version>
</dependency>问题是,如果包含dbpedia-聚光灯-jar,则无法创建/访问我的新数据库。
“守则”
graphDb = new GraphDatabaseFactory().newEmbeddedDatabaseBuilder( dir )
.setConfig( GraphDatabaseSettings.read_only, "true" )
.newGraphDatabase();给出错误消息
Exception in thread "main" java.lang.RuntimeException: Error starting org.neo4j.kernel.impl.factory.CommunityFacadeFactory, F:\DLs\DB
at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:144)
at org.neo4j.kernel.impl.factory.CommunityFacadeFactory.newFacade(CommunityFacadeFactory.java:40)
at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:108)
at org.neo4j.graphdb.factory.GraphDatabaseFactory.newDatabase(GraphDatabaseFactory.java:100)
at org.neo4j.graphdb.factory.GraphDatabaseFactory.lambda$createDatabaseCreator$203(GraphDatabaseFactory.java:89)
at org.neo4j.graphdb.factory.GraphDatabaseFactory$$Lambda$1/440434003.newDatabase(Unknown Source)
at org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:183)
at neo4j.Neo4j.startServer(Neo4j.java:26)
at countAnnotator.Main.main(Main.java:35)
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.extension.KernelExtensions@78d4b13a' failed to initialize. Please see attached cause exception.
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.init(LifeSupport.java:416)
at org.neo4j.kernel.lifecycle.LifeSupport.init(LifeSupport.java:62)
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:98)
at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:140)
... 8 more
Caused by: java.lang.VerifyError: Cannot inherit from final class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.neo4j.kernel.api.impl.labelscan.storestrategy.BitmapDocumentFormat.<clinit>(BitmapDocumentFormat.java:40)
at org.neo4j.kernel.api.impl.labelscan.LuceneLabelScanIndexBuilder.<init>(LuceneLabelScanIndexBuilder.java:34)
at org.neo4j.kernel.api.impl.labelscan.LuceneLabelScanIndexBuilder.create(LuceneLabelScanIndexBuilder.java:49)
at org.neo4j.kernel.api.impl.labelscan.LuceneLabelScanStoreExtension.getLuceneIndex(LuceneLabelScanStoreExtension.java:90)
at org.neo4j.kernel.api.impl.labelscan.LuceneLabelScanStoreExtension.newInstance(LuceneLabelScanStoreExtension.java:79)
at org.neo4j.kernel.api.impl.labelscan.LuceneLabelScanStoreExtension.newInstance(LuceneLabelScanStoreExtension.java:40)
at org.neo4j.kernel.extension.KernelExtensions.init(KernelExtensions.java:69)
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.init(LifeSupport.java:406)
... 11 more如果我把dbpedia-聚光灯作为依赖。
如果我没有把它作为一种依赖,它就运行得很好。我尝试手动添加jar作为外部存档,并将maven依赖项按Buildpath顺序放置到"Top“,但没有效果。
我在maven方面相当缺乏经验,所以我想知道如何解决这个问题?我需要两个jars来运行我的项目(第一步是使用dbpedia进行维基化--聚光灯,第二步是使用neo4j计算最短路径--只要不包括其他路径,这两种方法都能工作)。
将新4j部分放在不同的proejct中,将项目放在原始项目的构建路径中也没有帮助。
提前感谢!
因此,我确实找到了解决我的问题的办法,尽管我真的不明白为什么是这样--也许有人可以向我解释。
我仍然拥有dbpedia和新4j-jars的原始项目。我还创建了一个不同的空项目,该项目只有新4j依赖项,并将该项目添加到第一个项目构建路径中。
现在,我可以同时调用第一个项目中的维基化和neo4j,它们都能工作。我的假设是,这会导致5.5版本优先于3.6版本,而dbpedia是向上兼容的,而neo4j 5.5版本并不是向下兼容的。
这也可能是完全错误的,因为我对构建路径在优先级等方面的工作知之甚少,我偶然发现了这个解决方案。
不管怎么说,这很有效,这对我来说很重要。
edit2:合适的解决方案就像交换dbpedia-聚光灯和noe4j在POM中的位置一样简单。
发布于 2016-07-16 19:22:40
关于https://github.com/dbpedia-spotlight/dbpedia-spotlight/blob/master/pom.xml
版本0.7中的org.dbpedia.spotlight需要LuceneVersion3.6.0。
我发现,neo4j的唯一依赖于lucene的组件是新4j-lucene索引。您没有在pom中列出它,但是您可能将它作为一个传递(间接)依赖项。这适用于LuceneVersion5.5,请参阅新4j-lucene指数/3.0.3
因此,您现在所做的只是不合适,您必须找到使用相同版本lucene的dbpedia版本。
在上述两个链接中,您可以找到不同版本的dbpedia和neo4j及其依赖项。搜索这些版本,直到找到一些使用相同lucene版本的版本。
您也可以运行
mvn dependency:tree在您的项目中获取有关已使用版本的信息。版本冲突也应该显示在那里。
可以使用不同的版本吗?
简短答覆:否
Maven只使用依赖项来下载所需的jars,并将它们放到项目的类路径中。对于每个依赖项,它总是只将一个jar文件的一个版本放入类路径。
如果此jar包含类,那么其他jar之一(dbpedia或neo4j)与之不兼容,则会遇到问题(异常)。
这不是maven特有的问题,它只是java的工作方式。
在运行时,neo4j和dbpedia希望使用相同的lucene类实例,因此它们必须以某种方式共享lucene的相同版本。
但是,如果您找到一个接近dbpedia和neo4j使用的lucene版本,您可以尝试一下,有时它可以工作.
https://stackoverflow.com/questions/38413864
复制相似问题