我们有一个基于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