具有Spring Boot的Neo4j-Ogm:当部署为runnable jar时,Classpath扫描找不到DomainEntities

时间:2016-08-20 10:56:26

标签: spring-boot spring-data-neo4j spring-data-neo4j-4 neo4j-ogm spring-boot-gradle-plugin

我正在使用neo4j-ogm 2.0.4将现有应用程序从Spring-Data-Neo4j 3.x迁移到4.1。 克服了一些障碍后,它直接从IDE启动时运行正常。

然而,当我通过Spring Boot可运行的jar运行它时,它找不到任何DomainEntities:

(ClassPathScanner.java:132)    Classpath elements:
(ClassPathScanner.java:134)    D:\Programme\Project\myProject.jar
(DomainInfo.java:108)          Starting Post-processing phase
(DomainInfo.java:74)           Building annotation class map
(DomainInfo.java:87)           Building interface class map for 0 classes
(DomainInfo.java:136)          Checking for @Transient classes....
(DomainInfo.java:155)          Registering converters and deregistering transient fields and methods....
(DomainInfo.java:159)          Post-processing complete
(DomainInfo.java:69)           0 classes loaded in 40179 milliseconds

可执行jar是使用Spring Boot Gradle Plugin构建的,它允许jar可执行:

springBoot {
  executable = true
}

当jar启动时,我通过远程调试附加到应用程序,发现org.neo4j.ogm.scanner.ClassPathScanner#scan仅包含我的jar classPathElement。根据代码,现在应该将其扫描为zip / jar文件。但是,当执行classPathElement.isFile()时,此计算结果为false并跳过jar。 为什么会这样?可执行jar不是文件吗?

我可以采取哪些步骤来实现此目的?我可能会使用其他一些部署机制,但我发现这相当简单且工作正常。

1 个答案:

答案 0 :(得分:0)

我做了一些额外的调查,结果发现这根本与可运行的jar无关。这实际上是由于在jar文件的路径中有一个空格引起的。

我认为这是一个非常有效的案例,我不确定为什么这不起作用。在我的情况下,只需重命名相应的文件夹并删除空格即可。