用gradle任务启动groovysh

时间:2018-02-27 10:36:02

标签: gradle groovy groovyshell

我们有一个基于Java的项目,用于质量控制科学数据,它使用gradle作为构建工具。

我想从gradle任务启动一个交互式groovy shell,用我的项目类路径引导,以便能够使用项目基础结构来执行操作系统中的数据等任务。

我查看了this question已接受答案,并尝试遵循该规则,但任务立即退出而不是等待输入。这是我当前的build.gradle:

configurations {
   console
}

buildscript {
   repositories {
       jcenter()
   }
   dependencies {
       classpath 'org.akhikhl.gretty:gretty:2.0.0'
   }
}

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'
apply plugin: 'eclipse-wtp'

war {
    webAppDirName = 'WebApp/WebContent'
}

gretty {
  servletContainer = 'tomcat8'
  enableNaming = true
}


repositories {
    jcenter()
    maven {
        url "http://repository.primefaces.org"
    }
}


dependencies {
    compile "org.primefaces:primefaces:6.0"
    compile "org.primefaces.themes:cupertino:1.0.10"
    compile 'joda-time:joda-time:2.7'
    compile 'javax.el:javax.el-api:3.0.0'
    compile 'mysql:mysql-connector-java:5.1.36'
    compile 'commons-validator:commons-validator:1.4.1'
    compile 'org.apache.commons:commons-email:1.4'
    compile 'org.apache.commons:commons-lang3:3.4'
    compile 'org.apache.commons:commons-math3:3.6'
    //
    compile 'commons-codec:commons-codec:1.3'
    compile 'commons-beanutils:commons-beanutils:1.8.3'
    compile 'commons-collections:commons-collections:3.2'
    compile 'commons-digester:commons-digester:1.8'
    compile 'commons-logging:commons-logging:1.1.1'
    //
    compile 'commons-fileupload:commons-fileupload:1.3.1'
    compile 'org.apache.myfaces.core:myfaces-api:2.2.8'
    compile 'org.apache.myfaces.core:myfaces-impl:2.2.8'
    compile 'org.apache.myfaces.core:myfaces-bundle:2.2.8'

  // gretty plugin handling the tomcat server
  gretty 'org.apache.tomcat:tomcat-dbcp:8.0.1'
  gretty 'org.apache.tomcat:tomcat:8.0.1'

    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'

  // console dependencies
  console 'commons-cli:commons-cli:1.4'
  console('jline:jline:2.14.+') {
      exclude(group: 'junit', module: 'junit')
  }
  console 'org.codehaus.groovy:groovy-groovysh:2.4.+'
}

sourceSets {
    main {
        java {
            srcDirs = ['WebApp/src', 'src/QC_Routines/src']
        }
        resources {
            srcDirs = ['WebApp/WebContent/resources']
        }

    }
    test {
        java {
            srcDirs = ['WebApp/junit']
        }
    }
}

task(console, dependsOn: 'classes') {
  doLast{

    def classpath = sourceSets.main.runtimeClasspath + configurations.console
    def command = [
        'java',
        '-cp', classpath.collect().join(System.getProperty('path.separator')),
        'org.codehaus.groovy.tools.shell.Main',
        '--color', '--terminal', 'unix'
    ]

    def proc = new ProcessBuilder(command)
        .redirectOutput(ProcessBuilder.Redirect.INHERIT)
        .redirectInput(ProcessBuilder.Redirect.INHERIT)
        .redirectError(ProcessBuilder.Redirect.INHERIT)
        .start()

    proc.waitFor()

    if (0 != proc.exitValue()) {
        throw new RuntimeException("console exited with status: ${proc.exitValue()}")
    }
  }
}

当我运行控制台任务时,它会在成功构建后退出:

  

$ ./gradlew console

     

在2s内建立成功

     

3个可操作的任务:1个已执行,2个是最新的

有关为什么不起作用或如何进行的任何建议?以下软件版本:

  

$ gradle --version

     

Gradle 4.4.1

     

建造时间:2017-12-20 15:45:23 UTC修订:10ed9dc355dc39f6307cc98fbd8cea314bdd381c

     

Groovy:2.4.12

     

Ant:2017年2月2日编译的Apache Ant(TM)版本1.9.9

     

JVM:1.8.0_151(Oracle Corporation 25.151-b12)

     

OS:Linux 4.13.0-32-generic amd64

0 个答案:

没有答案