gpt4 book ai didi

java - .jar冲突导致java.lang.RuntimeException : Error starting org. neo4j.kernel.EmbeddedGraphDatabase异常

转载 作者:行者123 更新时间:2023-12-01 18:10:30 25 4
gpt4 key购买 nike

由于不同的 .jar 文件中有不同的类版本,我得到了这个异常:

java.lang.RuntimeException: Error starting org.neo4j.kernel.EmbeddedGraphDatabase, E:\neo4j at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:333) at org.neo4j.kernel.EmbeddedGraphDatabase.(EmbeddedGraphDatabase.java:63) at org.neo4j.graphdb.factory.GraphDatabaseFactory$1.newDatabase(GraphDatabaseFactory.java:92) at org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:198) at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:69) at neo4j_lucene.conflict_solver.ConfilctSolver.createDb(ConfilctSolver.java:55) at neo4j_lucene.conflict_solver.ConfilctSolver.main(ConfilctSolver.java:35)

尽管我使用ClassLoader来解决这个问题,但我再次遇到同样的异常。这是我的代码:

try {
CustomClassLoader ccl = new CustomClassLoader();
Object object;
Class clas;
clas = ccl
.loadClass("org.neo4j.graphdb.factory.GraphDatabaseFactory");

object = clas.newInstance();

graphDb = ((GraphDatabaseFactory) object)
.newEmbeddedDatabase(DB_PATH);

} catch (Exception e) {
e.printStackTrace();
}

自定义类加载器代码:

public class CustomClassLoader extends ClassLoader {
private String jarFile = "C:/Users/RaufA/Desktop/test.jar"; // Path
// to
// the
// jar
// file
private Hashtable classes = new Hashtable(); // used to cache already
// defined classes

public CustomClassLoader() {
super(CustomClassLoader.class.getClassLoader()); // calls the parent
// class
// loader's
// constructor
}

public Class loadClass(String className) throws ClassNotFoundException {
return findClass(className);
}

public Class findClass(String className) {
byte classByte[];
Class result = null;

result = (Class) classes.get(className); // checks in cached classes
if (result != null) {
return result;
}

try {
return findSystemClass(className);
} catch (Exception e) {
}

try {
JarFile jar = new JarFile(jarFile);
JarEntry entry = jar.getJarEntry(className + ".class");
System.out.println(className+".class");
InputStream is = jar.getInputStream(entry);
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
int nextValue = is.read();
while (-1 != nextValue) {
byteStream.write(nextValue);
nextValue = is.read();
}

classByte = byteStream.toByteArray();
result = defineClass(className, classByte, 0, classByte.length,
null);
classes.put(className, result);
System.out.println(">>>>result: " + result);
return result;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

}

我还应该做什么?

最佳答案

您正在尝试将 Neo4j 和 Lucene 放在一个 jar 中,对吧。

问题是,因为 Neo4j 使用旧的 Lucene 版本。

Alessandro Negro来自GraphAware解决了这个问题,你可以在这里找到他的解决方案 - https://github.com/graphaware/neo4j-elasticsearch-tests

关于java - .jar冲突导致java.lang.RuntimeException : Error starting org. neo4j.kernel.EmbeddedGraphDatabase异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33419588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com