2011-02-02 13 views

risposta

9

Non c'è un supporto diretto in Grails, ma questo script Gant farà il suo lavoro. Semplicemente aggiunto alla scripts/ dir e invocato come grails ear.

script originariamente pubblicato da Graeme on mailing list

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) 
+0

Qualsiasi motivo per cui questo non fa parte del framework Grails? – kaskelotti

+3

Forse questo script ha funzionato per le versioni precedenti di Grails, ma per '2.3.4' ho ricevuto un errore che indicava che la proprietà warName non esiste. Risolto definendolo all'interno dello script come 'warName =" $ {basedir}/target/$ {grailsAppName} - $ {grailsAppVersion} .war "'. Ho controllato dalle fonti e sembra che la proprietà warName sia presente in WarCreator.groovy (e forse anche nello script _GrailsWar), ma non è visibile allo script Ear per qualche motivo. – kaskelotti

+0

ma i grails ear generano per l'ambiente di sviluppo, ho bisogno di creare per l'ambiente di produzione – sirdaiz

2

Questa è una risposta molto tardi, ma al giorno d'oggi il plugin Grails Maven è piuttosto buona. Quindi potresti solo costruire un orecchio dalla guerra prodotta dal plugin Maven dei graal.

Problemi correlati