gpt4 book ai didi

grails - war 创建时如何执行命令?

转载 作者:行者123 更新时间:2023-12-02 11:54:30 24 4
gpt4 key购买 nike

我的环境:Grails v2.1.1

我需要在 war 过程中运行一个小型实用程序应用程序。这个应用程序生成我想要包含在我的 war 文件中的文件。我尝试将代码放入 BuildConfig.groovy 的 grails.war.resources 中,但没有看到错误,也没有看到我期望创建的文件。

有谁知道我如何执行这个实用程序应用程序,以便它的输出在我的 war 中?

这是在终端实例内运行的命令:

sencha app build -e production -d $stagingDir/production

这是我尝试通过 BuildConfig.groovy 中的 grails.war.resources 运行它:

grails.war.resources = { stagingDir ->

//calling echo() does nothing. I don't see the comment in the build output
echo(message:'executing grails.war.resources')
def outputDir = new File("${stagingDir.getParentFile().getPath()}/target/ranForReal")

def command = """sencha app build -e testing -d ${outputDir.getPath()}"""

def executionDir = new File("${stagingDir.getParentFile().getPath()}/web-app")

def proc = command.execute(null,executionDir)

proc.waitFor()

//my desperate attempt to see if anything is happening. I'd expect an error here
def x = 1/0

// Obtain status and output
println "return code: ${ proc.exitValue()}"
println "stderr: ${proc.err.text}"
println "stdout: ${proc.in.text}" // *out* from the external program is *in* for groovy

//this for loop does work and does remove servlet jars, so I know this closure is called.
for (name in ['servlet']) {
delete {
fileset dir: "$stagingDir/WEB-INF/lib/",
includes: "$name*.jar"
}
}

}

grails.war.resources 是正确的选择吗?

更新

对于后代,这是我使用下面的答案的有点复杂的示例。

来自_Events.groovy文件

/**
* Generate an optimized version of the sencha app.
*/
eventCreateWarStart = {warName, stagingDir ->
//argsMap contains params from command line, e.g 'war --sencha.env=production'
def senchaEnvironment = argsMap["sencha.env"] ?: 'testing'

//println is the only way I've found to write to the console.
println "running sencha optimizer code for $senchaEnvironment environment..."

ant.exec(outputproperty: "cmdOut", executable:'sencha',
dir:"$stagingDir",failOnError:true){
arg(value:'app')
arg(value:'build')
arg(value:"-e $senchaEnvironment" )
}

println "${ant.project.properties.cmdOut}"

println'completed sencha optimization process.'

}

最佳答案

您可以将 eventCreateWarStart 放入 scripts/_Events.groovy 中。该事件接收两个参数,WAR 的名称和 stagingDir

eventCreateWarStart = { warName, stagingDir ->
// ..
}

您可以访问 ant 变量,为您提供 AntBuilder,这样您就可以执行类似的操作

ant.exec(executable:'sencha') {
arg(value:'app')
arg(value:'build')
// ...
}

关于grails - war 创建时如何执行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12585434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com