0

我正在运行一个带有底层 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()WebAppContextwhich 调用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 中工作有任何建议?

非常感谢。

4

2 回答 2

1

Spring Boot uber-jars 使用一些特殊的技术来允许从嵌套的 jars 中加载内容。Jetty(很容易理解)假设 jar URL 将只包含一个!,不幸的是这里不是这种情况。

您最简单的解决方案可能是切换到maven-shade-plugin。这通过在将所有依赖项重新打包到单个 jar 之前解压缩所有依赖项来创建一个 uber-jar。

Spring Boot 参考文档中建议了其他一些替代方案

于 2014-05-01T19:38:07.010 回答
0

如果您使用的是 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>

这个 gradle 建议中获得

于 2016-03-12T22:44:23.180 回答