gradle bootRun 执行失败

Posted

技术标签:

【中文标题】gradle bootRun 执行失败【英文标题】:Execution of gradle bootRun fails 【发布时间】:2017-02-06 23:07:10 【问题描述】:

我正在尝试运行我的 springboot 应用程序...这一切都始于我将 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 错误=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 问题长路径,但我该如何给出解决方案?

【问题讨论】:

tuhrig.de/gradles-bootrun-and-windows-command-length-limit 感谢 tim_yates!我在这一行添加了简单的引号:it.toURL().toString().replaceFirst('/file:/+/', '/') 【参考方案1】:

tim_yates 是对的,谢谢!

我从链接中获取代码并将其粘贴到我的 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)
    

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

【讨论】:

以上是关于gradle bootRun 执行失败的主要内容,如果未能解决你的问题,请参考以下文章

如何创建将使用特定配置文件执行 bootRun 的 gradle 任务?

Gradle > 如何停止使用 gradle bootRun 启动的 Spring Boot 应用程序?

错误:Gradle:任务“:core:compileJava”执行失败。 > 编译失败

错误:任务 ':app:transformClassesWithDexForDebug' Gradle 执行失败

如何通过 gradle 任务使用 spring 配置文件运行 bootRun

Gradle:任务“:processDebugManifest”执行失败