Spring Boot Maven / Gradle插件:bootRun任务生成很长的类路径?

时间:2017-01-19 07:56:15

标签: java gradle spring-boot spring-boot-maven-plugin spring-boot-gradle-plugin

部件

  • Spring Boot 1.4.3(并且还尝试过使用Spring Boot 1.5 RC1)
  • Mac OS Sierra上的Java 1.8.0_112
  • Gradle 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可以简单地使用该JAR清单中的Class-Path条目来运行Web应用程序,并且传递给java命令的类路径条目将是缩短了。然而,这并没有产生任何影响,java只是再次崩溃。

请注意,将Web应用程序作为带有java -jar app.war的可执行jar运行,可以很好地处理所有依赖项等。

让其他人遇到类似问题吗?

0 个答案:

没有答案