.jar冲突导致java.lang.RuntimeException:启动org.neo4j.kernel.EmbeddedGraphDatabase异常时出错
由于在不同的.jar文件中有不同的类版本,我得到了这个异常: java.lang.RuntimeException:启动org.neo4j.kernel.EmbeddedGraphDatabase时出错,E:\neo4j 位于org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:333) 位于org.neo4j.kernel.EmbeddedGraphDatabase。(EmbeddedGraphDatabase.java:63) 位于org.neo4j.graphdb.factory.GraphDatabaseFactory$1.newDatabase(GraphDatabaseFactory.java:92) 位于org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:198) 位于org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:69) 在neo4j_lucene.conflict_solver.ConfilctSolver.createDb(ConfilctSolver.java:55) 位于neo4j_lucene.conflict_solver.ConfilctSolver.main(ConfilctSolver.java:35) 尽管我使用.jar冲突导致java.lang.RuntimeException:启动org.neo4j.kernel.EmbeddedGraphDatabase异常时出错,java,maven,neo4j,lucene,classloader,Java,Maven,Neo4j,Lucene,Classloader,由于在不同的.jar文件中有不同的类版本,我得到了这个异常: java.lang.RuntimeException:启动org.neo4j.kernel.EmbeddedGraphDatabase时出错,E:\neo4j 位于org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:333) 位于org.neo4j.kernel.EmbeddedGraphDatabase。(Embe
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放在一个罐子里,对吧 问题是,因为Neo4j使用旧的Lucene版本
通过解决这个问题,你可以在这里找到他的解决方案-你试图把Neo4j和Lucene放在一个罐子里,对吧 问题是,因为Neo4j使用旧的Lucene版本
通过解决这个问题,您可以在这里找到他的解决方案-在我看来,问题是您正在用一个jar启动数据库。您需要确保在类加载器中加载了启动neo4j所需的所有jar。问题是,您是用一个jar启动数据库的。您需要确保在类加载器中加载了启动neo4j所需的所有jar
mvn安装
并创建~SNAPSHOT.jar
.jar
添加到您的项目中(存在冲突)neo4jmaven依赖项
mvn安装
并创建~SNAPSHOT.jar
.jar
添加到您的项目中(存在冲突)neo4jmaven依赖项
哪些课程不冲突?一些Neo4j和?您使用的是这两个库的哪个版本?我通过使用
maven shade plugin
解决了这个问题。哪些类发生冲突?一些Neo4j和?您使用的是这两个库的哪个版本?我通过使用maven shade plugin
@RaufAgayev解决了这个问题。您能告诉我们您的解决方案吗?因为我发现WebINF目录中的资源有问题,shade插件无法转换该目录。1。将此添加到eclipse-。2.使用mvn安装
并创建.jar
3。将.jar
添加到您的项目(存在冲突)4。从该项目中删除neo4j maven依赖项。@RaufAgayev您能告诉我们您的解决方案吗?因为我发现WebINF目录中的资源有问题,shade插件无法转换该目录。1。将此添加到eclipse-。2.使用mvn安装
并创建.jar
3。将.jar
添加到您的项目(存在冲突)4。从该项目中删除neo4j maven依赖项。