gradle bootRun 执行失败

Execution of gradle bootRun fails

我正在尝试 运行 我的 spring 启动应用程序...当我将 eureka spring-cloud 插件添加到我的 gradle.build 文件时,这一切都开始了:

编译'org.springframework.cloud:spring-cloud-starter-eureka'

当我 运行 "gradle bootRun" 时,我得到这个错误:

原因:java.io.IOException:无法运行编程"C:\Program Files\Java\jdk1.8.0_91\bin\java.exe"。 CreateProcess error=206,文件名太长。

我的build.gradle是:

import java.text.SimpleDateFormat

buildscript {
  ext {
    springBootVersion = '1.3.2.RELEASE'
    elasticSearchVersion = '2.2.0'
    groovyVersion = '2.4.5'
  }
  repositories {
    jcenter()
    mavenCentral()
  }
  dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    classpath 'io.spring.gradle:dependency-management-plugin:0.5.5.RELEASE'
    classpath 'com.github.ben-manes:gradle-versions-plugin:0.12.0'
    classpath 'org.kordamp.gradle:stats-gradle-plugin:0.1.5'
  }
}

apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'com.github.ben-manes.versions'
apply plugin: 'org.kordamp.gradle.stats'

def buildDate = new SimpleDateFormat('yyyyMMdd-hhmmss').format(new Date())
version = '1.0.RC1.' + buildDate

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
  jcenter()
  mavenCentral()
  maven { url "https://repo.spring.io/snapshot" }
  maven { url "https://repo.spring.io/milestone" }
}

ext['elasticsearch.version'] = elasticSearchVersion
ext['groovy.version'] = groovyVersion
ext['guava.version'] = '18.0'
ext['lombok.version'] = '1.16.6'

dependencyManagement {
  imports {
    mavenBom "org.springframework.boot:spring-boot-starter-parent:${springBootVersion}"
    mavenBom "org.springframework.cloud:spring-cloud-starter-parent:Brixton.M5"
    mavenBom 'io.spring.platform:platform-bom:2.0.2.RELEASE'
  }
}

dependencies {
  compile('org.springframework.boot:spring-boot-starter-actuator')
  compile('org.springframework.boot:spring-boot-starter-aop')
  compile('org.springframework.boot:spring-boot-starter-cache')
  compile('org.springframework.cloud:spring-cloud-starter-hystrix')    
  compile 'org.jadira.usertype:usertype.extended:5.0.0.GA'
  compile('org.springframework.boot:spring-boot-starter-data-jpa')
  compile('org.springframework.boot:spring-boot-starter-data-rest')
  //compile('org.springframework.data:spring-data-rest-hal-browser')
  compile('org.springframework.boot:spring-boot-devtools')
  compile('org.springframework.boot:spring-boot-starter-hateoas')
  compile('org.projectlombok:lombok')
  compile('org.springframework.boot:spring-boot-starter-thymeleaf')
  compile('org.springframework.boot:spring-boot-starter-web')
  compile "org.elasticsearch:elasticsearch:${elasticSearchVersion}"
  compile 'commons-lang:commons-lang'
  compile 'commons-codec:commons-codec'
  compile 'commons-collections:commons-collections'
  compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
  compile 'org.springframework.boot:spring-boot-starter-freemarker'  
  compile 'de.codecentric:spring-boot-admin-starter-client:1.3.2'    
  compile 'org.flywaydb:flyway-core'    
  compile('com.domingosuarez:oneltico:0.1.2')
  compile("org.springframework:spring-jms")
  compile("org.apache.activemq:activemq-broker")
  compile 'org.apache.activemq:activemq-pool'    
  compile 'org.springframework.cloud:spring-cloud-starter-eureka'
  compile 'com.mashape.unirest:unirest-java:1.4.9'      
  runtime "org.postgresql:postgresql:9.4-1203-jdbc42"
  testCompile('org.springframework.boot:spring-boot-starter-test')
}

eclipse {
  classpath {
    containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
    containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
  }
}

springBoot {
  executable = true
}

我把插件拿出来,它执行正确。

我知道这应该是一个 Windows 长路径问题,但我该如何给出解决方案?

tim_yates 说得对,谢谢!

我从 link 中获取代码并将其粘贴到我的 build.gradle 文件的末尾,它像 gem 一样工作!

我添加的代码是:

task pathingJar(type: Jar) {
    dependsOn configurations.runtime
    appendix = 'pathing'

    doFirst {
        manifest {
            attributes "Class-Path": configurations.runtime.files.collect {
                it.toURL().toString().replaceFirst('/file:/+/', '/')
                }.join(' ')
        }
    }
}

bootRun {
    dependsOn pathingJar
    doFirst {
        classpath = files("$buildDir/classes/main", "$buildDir/resources/main", pathingJar.archivePath)
    }
}

注意:我从 link代码中添加了一些简单的引号 (') 以使其正常工作..