Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 配置位置为Windows绝对路径时Spring Boot standalone jar崩溃_Java_Eclipse_Spring_Gradle_Spring Boot - Fatal编程技术网

Java 配置位置为Windows绝对路径时Spring Boot standalone jar崩溃

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。因为这就是我的应用

我构建了一个依赖于Spring引导的应用程序。当我们即将部署它时,我开始在Eclipse和Gradle之外测试该应用程序。这就是我们在Spring Boot的早期生命周期中遇到的崩溃问题。该应用程序在Eclipse中运行良好,并具有
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