用grails创造耳朵

mah*_*ati 7 ear grails java-ee

grails支持创造战争.但有没有命令通过grails创建一个耳朵?

Bur*_*ith 9

Grails没有直接的支持,但是这个Gant脚本可以完成这项工作.简单地添加到scripts/dir并调用为grails ear.

脚本最初由Graeme在邮件列表中发布

includeTargets << grailsScript("_GrailsWar")

target(ear: "Creates an EAR file from a Grails WAR") {
    war()   
    event("StatusUpdate", ["Building EAR file"])
    generateApplicationXml()
    def warDest = new File(warName).parentFile
    def earFile = "${projectTargetDir}/${contextRoot}.ear"
    ant.ear(destfile:earFile, appxml:appXml, update:true) {
        fileset(dir:warDest, includes:"*.war")
    }
    event("StatusFinal", ["Done creating EAR $earFile"])
}
target(defineContextRoot:"defines the context root") {
    contextRoot = "${grailsAppName}${grailsAppVersion ? '-'+grailsAppVersion : ''}" 
}
target(generateApplicationXml:"Generates an application.xml file") {
    depends(defineContextRoot)
    def warDest = new File(warName)
    appXml = "${projectTargetDir}/application.xml"
    new File(appXml).write """\
<?xml version="1.0" encoding="UTF-8"?> 
<application 
xmlns=http://java.sun.com/xml/ns/j2ee
       xmlns:xsi="http://www.w3.org/ 2001/XMLSchema-instance" 
       xsi:schemaLocation="http:// java.sun.com/xml/ns/j2ee 
           http://java.sun.com/xml/ns/j2ee/ application_1_4.xsd" 
       version="1.4"> 
<display-name>${grailsAppName}</display-name> 

<module> 
    <web> 
        <web-uri>${warDest.name}</web-uri> 
        <context-root>${contextRoot}</context-root> 
    </web> 
 </module> 

</application>  
"""
}

setDefaultTarget(ear)
Run Code Online (Sandbox Code Playgroud)

  • 也许这个脚本适用于早期版本的grails,但对于`2.3.4`我得到一个错误,指出warName属性不存在.通过在脚本中将其定义为`warName ="$ {basedir}/target/$ {grailsAppName} - $ {grailsAppVersion} .war"`来解决它.我从源代码检查,似乎warName属性存在于WarCreator.groovy中(也可能出现在_GrailsWar脚本中),但由于某种原因,对于Ear脚本不可见. (3认同)