Neo4j 嵌入式Jetty无法访问Spring Boot uber jar中jar中的静态web内容
我正在运行一个带有底层Neo4j数据库的Spring Boot web应用程序。为了能够查看Neo4j浏览器(直接在数据库上查看web),Neo4j web服务器使用以下配置嵌入到应用程序中Neo4j 嵌入式Jetty无法访问Spring Boot uber jar中jar中的静态web内容,neo4j,embedded-jetty,spring-boot,uberjar,Neo4j,Embedded Jetty,Spring Boot,Uberjar,我正在运行一个带有底层Neo4j数据库的Spring Boot web应用程序。为了能够查看Neo4j浏览器(直接在数据库上查看web),Neo4j web服务器使用以下配置嵌入到应用程序中 @Bean(initMethod = "start", destroyMethod = "stop") public WrappingNeoServerBootstrapper neo4jWebServer() { return new WrappingNeoServerBootstrapper((
@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>
Jetty无法匹配其资源列表中的任何内容,因为它正在查找名为/lib/neo4j-browser-2.0.2.jar的资源/浏览器/
,因为代码正在查找第一个/字符串中的code>
我将为此提交一个Jetty bug,并建议他们在代码中使用String.lastIndexOf(“!/”)
,这将解决问题
与此同时,除了生产我们的oun标准maven组件外,有人对我如何在Spring Boot uber jar中实现这一点有什么建议吗
非常感谢。Spring Boot uber jar使用一些特殊技术,允许从嵌套jar加载内容。Jetty(完全可以理解)假设jar URL只包含一个不幸的是,这里的情况并非如此
您最简单的解决方案可能是切换到。这将创建一个uber jar,方法是在将所有依赖项重新打包到单个jar中之前先将它们解包
如果您使用的是SpringBoot+Maven,则在中建议了一些其他替代方案,您可以添加以下内容:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<requiresUnpack>
<dependency>
<groupId>org.neo4j.app</groupId>
<artifactId>neo4j-browser</artifactId>
</dependency>
</requiresUnpack>
</configuration>
<executions>
...
</plugin>
org.springframework.boot
它与Tomcat一起工作吗?我没有尝试过使用Tomcat,因为社区NeoServer
明确使用Jetty 9 web服务器:ref创建了一个,那么我想它不是Spring Boot应用程序。你不能按照Neo4j的人告诉你的方式运行它吗?这是一个Spring Boot应用程序-有一个简化的示例项目,它使用SpringApplication
和EnableAutoConfiguration
,尽管目前没有演示任何Spring Boot starter web
控制器或任何东西。Neo4j浏览器部件只是查看数据库的附加界面。Spring Boot部件提供所有启动组件,例如Spring Boot starter jetty
,Spring Boot starter web
,Spring Boot starter test
,等等。这不是一个Spring Boot问题-这是一个Jetty问题-Spring Boot的行为符合我的预期。我只是想知道,在Jetty问题仍然存在的情况下,是否有一种变通方法可以让我部署(而不是maven程序集)来继续使用Spring Boot uber jar。我不认为有-只是想问这个问题。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<requiresUnpack>
<dependency>
<groupId>org.neo4j.app</groupId>
<artifactId>neo4j-browser</artifactId>
</dependency>
</requiresUnpack>
</configuration>
<executions>
...
</plugin>