2011-02-02 15 views
7

grails apoya la creación de la guerra. ¿Pero hay algún comando para crear una oreja a través de los griales?crear oreja en grial

Respuesta

9

No hay soporte directo en Grails, pero este script Gant hará el trabajo. Simplemente se agregó al scripts/ dir y se invoca como grails ear.

Guión Iniciado por 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

¿Alguna razón por la cual esto no es parte del framework de Grails? – kaskelotti

+3

Quizás esta secuencia de comandos funcionó para versiones anteriores de griales, pero para '2.3.4' recibí un error que indicaba que la propiedad warName no existe. Lo resolvió definiéndolo dentro del script como 'warName =" $ {basedir}/target/$ {grailsAppName} - $ {grailsAppVersion} .war "'. Comprobé desde las fuentes y parece que la propiedad warName está presente en WarCreator.groovy (y tal vez también en la secuencia de comandos _GrailsWar), pero no es visible para la secuencia de comandos Ear por alguna razón. – kaskelotti

+0

pero el oído de los griales se genera para el entorno de desarrollo, necesito crear para el entorno de producción – sirdaiz

2

Ésta es una respuesta muy tarde, pero hoy en día el plugin griales experto es bastante bueno. Así que podrías construir una oreja de la guerra producida por el plugin mails de Grails.

Cuestiones relacionadas