Java 配置位置为Windows绝对路径时Spring Boot standalone jar崩溃
我构建了一个依赖于Spring引导的应用程序。当我们即将部署它时,我开始在Eclipse和Gradle之外测试该应用程序。这就是我们在Spring Boot的早期生命周期中遇到的崩溃问题。该应用程序在Eclipse中运行良好,并具有Java 配置位置为Windows绝对路径时Spring Boot standalone jar崩溃,java,eclipse,spring,gradle,spring-boot,Java,Eclipse,Spring,Gradle,Spring Boot,我构建了一个依赖于Spring引导的应用程序。当我们即将部署它时,我开始在Eclipse和Gradle之外测试该应用程序。这就是我们在Spring Boot的早期生命周期中遇到的崩溃问题。该应用程序在Eclipse中运行良好,并具有gradlew-run。但是,它在java-jar)方面存在问题,并启动了一个新的EclipseGradle项目。只有一个类文件。它是相当标准的,只是我用@RestController替换了@Controller,并删除了@ResponseBody。因为这就是我的应用
gradlew-run
。但是,它在java-jar)方面存在问题,并启动了一个新的EclipseGradle项目。只有一个类文件。它是相当标准的,只是我用@RestController
替换了@Controller
,并删除了@ResponseBody
。因为这就是我的应用程序所使用的
你好,java
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleController.class, args);
}
}
我有一个非常标准的build.gradle
文件
apply plugin: 'java'
apply plugin: 'eclipse'
buildscript {
repositories {
maven { url 'http://repo.spring.io/libs-snapshot' }
mavenLocal()
}
dependencies { classpath('org.springframework.boot:spring-boot-gradle-plugin:1.0.0.RC4') }
}
apply plugin: 'spring-boot'
repositories {
mavenCentral()
maven { url 'http://repo.spring.io/milestone' }
maven { url "http://repo.spring.io/libs-snapshot" }
}
dependencies { compile 'org.springframework.boot:spring-boot-starter-web:1.0.0.RC4' }
task wrapper(type: Wrapper) { gradleVersion = '1.11' }
使用这个testhello应用程序,我进行了gradlew clean build
,然后尝试了java-jarhello.jar
。想象一下,当我收到与上述相同的异常时,我会感到惊讶。也许我仍然缺少一些东西,但这个结果似乎表明Spring Boot可能有问题
我将非常感谢一个解决方案。。。任何解决方案(即使是肮脏的解决方案)
编辑1:
根据要求,我正在测试独立jar的机器在Windows(8.1)上
编辑2:
根据要求,我还测试了spring boot示例web ui
。同样的异常仍然发生
编辑3:向@DaveSyer致敬
我可能发现了一个潜在的原因。环境变量SPRING\u CONFIG\u LOCATION
似乎是导致异常的原因。未设置时,测试Hello
应用程序和spring引导示例web ui
应用程序按预期工作
编辑4:
对于其他感兴趣的人,我已将测试应用程序上载到GitHub()解决方案:您在SPRING\u CONFIG\u LOCATION
环境变量中有一个(Windows)绝对文件路径,因此Boot试图将其作为类路径资源解决,但失败了。修复方法是对任何作为文件(不在类路径上)的配置位置使用“file://”前缀
例外情况是神秘的,不应该是真的必要的,所以我提出了一张罚单来解决这个问题:
原创:适合我的作品:
$ cd spring-boot-samples/spring-boot-sample-web-ui
$ gvm use gradle 1.9
$ gradle clean build
$ java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
$ java -jar build/libs/*.jar
...
<happy app>
$cd spring启动示例/spring启动示例web ui
$gvm使用梯度1.9
$gradle清洁版
$java-版本
java版本“1.7.0_51”
Java(TM)SE运行时环境(build 1.7.0_51-b13)
Java HotSpot(TM)64位服务器虚拟机(构建24.51-b03,混合模式)
$java-jarbuild/libs/*.jar
...
我知道这个问题很老了,但是如果有人在Windows上的SPRING\u CONFIG\u LOCATION设置中遇到同样的问题:
要设置application.properties(或任何其他名称)的路径,应使用以下命令
set SPRING_CONFIG_LOCATION=file:C:/path/application.properties
(注意“file:”后面缺少的双斜杠)
您还可以将此路径设置到Windows环境变量中。此设置已在Spring boot 1.1.2中成功测试。它也可能适用于较旧的版本
如果你改写
set SPRING_CONFIG_LOCATION=C:/path/application.properties
Spring boot不会查找属性文件并忽略其设置
或者如果你写信
set SPRING_CONFIG_LOCATION=file://C:/path/application.properties
Spring boot将为驱动器号“C”抛出未知的hostException。您是否在命令行“Java-jar…”中使用不同版本的Java运行?(我可以在Java 1.6和1.7 JDK的源代码中看到throws子句,但行号不匹配。)@DaveSyer,这就是我在执行Java-version
时得到的结果<代码>Java(TM)SE运行时环境(build 1.7.0_51-b13)Java HotSpot(TM)64位服务器虚拟机(build 24.51-b03,混合模式)
我给出了一个答案(这样格式更好)。如果您可以测试该示例,并发布一个完整的项目进行复制,这将有所帮助。顺便说一句,您不需要在Boot知道的依赖项(在其父pom中)中提供版本号。只需尝试一下即可。我正在Windows上测试这个。因此没有GVM。但我下载了Gradle1.9,使用了那个版本并试着运行它。同样类型的异常。在Windows上也适用于我(花了一个上午的时间来安装虚拟机,呸!)。Oracle JDK 1.7.0_51和gradle 1.11。你确定你的JDK是犹太教的(那个行号)?不确定你所说的“JDK是犹太教的(那个行号)”是什么意思。你能告诉我吗?因为它在你的窗户上起作用,我深入研究了这个问题,可能已经发现了原因。我设置了环境变量SPRING\u CONFIG\u LOCATION=%UserProfile%\application.properties
。使之不安似乎可以解决问题。但是,需要设置该变量,因为它集中了所有应用程序的属性文件。“kosher”问题只是“你确定你的JDK是你所认为的吗?”(堆栈跟踪中的行号与我的行号不匹配)。
set SPRING_CONFIG_LOCATION=C:/path/application.properties
set SPRING_CONFIG_LOCATION=file://C:/path/application.properties