我正在运行一个带有底层 Neo4j 数据库的 Spring Boot Web 应用程序。为了能够查看 Neo4j 浏览器(直接 web 查看到 db),Neo4j web 服务器使用以下配置嵌入到应用程序中。
@Bean(initMethod = "start", destroyMethod = "stop")
public WrappingNeoServerBootstrapper neo4jWebServer() {
return new WrappingNeoServerBootstrapper((GraphDatabaseAPI) graphDatabaseService());
}
并通过在 maven pom 中包含以下内容:
<dependency>
<groupId>org.neo4j.app</groupId>
<artifactId>neo4j-server</artifactId>
<classifier>static-web</classifier>
<version>2.0.2</version>
</dependency>
从 STS(即未打包)运行时,这一切都很好。
当我使用spring-boot-maven-plugin
. 这将创建正确包含 uber-jarneo4j-server-2.0.2-static-web.jar
的 /lib 文件夹中的文件的 uber-jar。
当我直接使用 uber-jar 文件运行应用程序,然后尝试点击http://localhost:7474/browser/
Neo4j 浏览器的 URL 时,它返回 404。
原因是 JettyDefaultServlet
尝试getResource()
从WebAppContext
which 调用JarFileResource.exists()
which 尝试操作以下 URL 字符串:
jar:file:/home/dev/myapp/target/myapp-0.0.1-SNAPSHOT.jar!/lib/neo4j-browser-2.0.2.jar!/browser/
Jetty 无法匹配其资源列表中的任何内容,因为它正在寻找称为/lib/neo4j-browser-2.0.2.jar!/browser/
代码的资源,例如http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty- util/src/main/java/org/eclipse/jetty/util/resource/JarFileResource.java#n123(和其他几个地方)正在寻找!/
字符串中的第一个。
我将为此提交一个 Jetty 错误,并提出他们String.lastIndexOf("!/")
在代码中使用的建议,这将解决问题。
与此同时,除了生产我们的标准 maven 程序集之外,有没有人对我如何让它在 Spring Boot uber-jar 中工作有任何建议?
非常感谢。