5

成分

  • Spring Boot 1.4.3(也尝试过使用 Spring Boot 1.5 RC1)
  • Mac OS Sierra 上的 Java 1.8.0_112
  • 摇篮 3.3 / Maven 3.3.9
  • 使用 Spring Boot Gradle 插件配置的简单 Java Web 应用程序(同样的问题似乎也适用于 Spring Boot Maven 插件)

问题

尝试通过之类的方法运行应用程序,gradlew clean build bootRun或者只是gradlew bootRun表明 gradle/java 进程在没有任何提示的情况下悲惨地退出/崩溃。除以下内容外,不会显示更多错误或日志:

“/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/bin/java 以非零退出值 1 完成”。

然而,运行gradlew bootRun --debug表明 BootRun(Gradle 的 JavaExec 的扩展)任务似乎想要生成一个非常非常长的 Classpath 条目,最终会破坏 Java 进程。

Spring Boot 文档指定:

要在不构建 jar 的情况下就地运行项目,您可以使用“bootRun”任务

http://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-gradle-plugin.html#build-tool-plugins-gradle-running-applications

但是如果插件要生成这么长的类路径,这种方法似乎不起作用。

复制

这里的这个项目可能会证明这个问题:

https://github.com/apereo/cas-gradle-overlay-template

cas/build.gradle文件中,可以添加一个依赖项来观察行为:

compile "org.apereo.cas:cas-server-support-json-service-registry:${project.'cas.version'}"

诊断

该项目包含以下依赖项:

dependencies { compile "somewhere:something:somehow@war" }

这对bootRun;完全没有问题。但是,当任何其他编译/运行时依赖项添加到项目中时,所有可传递或其他依赖项都将添加到类路径中bootRun以执行。

我还尝试创建一个“路径”JAR,希望插件/Java 可以简单地使用该Class-PathJAR 清单中的条目来运行 Web 应用程序,并且传递给 java 命令的类路径条目将被缩短。然而,这并没有产生任何影响,java 再次崩溃了。

请注意,将 Web 应用程序作为可执行 jar 运行,java -jar app.war与所有依赖项等完美配合。

其他人是否遇到过类似的问题?

4

0 回答 0