Hoje o post está relacionado ao post anterior na qual ensinava como corrigir de maneira manual o problema gerado pelo weblogic 11g ao tentar deployar uma aplicação Grails.
Hoje vou mostrar como automatizar esse processo criando um script que deve ser executado toda vez que a intenção for gerar um war/ear.
Responsabilidades do script:
Gerar o arquivo application.xml.
- Corrigir o arquivo web.xml gerado dentro do war devido a uma falha no plugin do spring-ws. (Essa falha impedia do war ser deployado com sucesso)
- Empacotar os arquivos gerados mais o arquivo war em um arquivo ear.
- Localiza o arquivo ear dentro de DIR_PROJETO/target.
1 – Vamos criar o arquivo ear.sh dentro do diretório raiz de sua aplicação:
echo "Executando o script com o jdk $JAVA_HOME" cd aplicacao/ grails -Dgrails.env=production ear echo "Executando o script com o jdk $JAVA_HOME"
2 – Agora crie um arquivo chamado Ear.groovy. Esse arquivo será responsavel por fazer alterações necessárias no arquivo web.xml para que vc tenha sucesso ao deployar o war ou ear no weblogic 11g:
import org.apache.commons.io.FileUtils includeTargets << grailsScript("_GrailsClean") includeTargets << grailsScript("_GrailsWar") includeTargets << grailsScript("_GrailsSettings") includeTargets << grailsScript("_GrailsEvents") includeTargets << grailsScript("_GrailsClasspath") includeTargets << grailsScript("_GrailsArgParsing") earFile = "" target(ear: "Creates an EAR file from a Grails WAR") { clean() appPath = "${System.getProperty('user.dir')}" warPath = "${appPath}/target" warName = "${grailsAppName}-${metadata.'deploy.version'}.war" warFile = "${warPath}/${warName}" depends(parseArguments, defineContextRoot) def date = new Date().format('yyyyMMdd-HHmm') metadata.'deploy.date' = new Date().format('dd/MM/yyyy-HH:mm') metadata.persist() checkTargetExists() war() fixWebXml() event("StatusUpdate", ["Building EAR file"]) generateApplicationXml() if(argsMap.earDest){ new File(argsMap.earDest).mkdirs() earFile = "${argsMap.earDest}/${contextRoot}-beta-${date}.ear" }else{ earFile = "${projectTargetDir}/${contextRoot}-beta-${date}.ear" } ant.ear(destfile:earFile, appXml:appXml, update: true, ) { fileset(dir:warPath, includes:"*.war") fileset(dir:projectTargetDir, includes: "APP-INF/**") } ant.delete(dir:"${projectTargetDir}/war_temp") event("StatusFinal", ["Done creating EAR $earFile"]) } //Corrige o arquivo web.xml target(fixWebXml: "Corrige o arquivo web.xml") { ant.unzip(src: "${warFile}", dest: "${warPath}/war_temp") def xmlFile = FileUtils.toFile(new URL("file://${warPath}/war_temp/WEB-INF/web.xml")) def rootWebXml = new XmlParser().parse(xmlFile) ant.replace(file:xmlFile, token:"web-services", value:"") ant.zip(basedir: "${warPath}/war_temp", destfile: "${warFile}") ant.delete(dir: "${warPath}/war_temp") } target(defineContextRoot:"defines the context root") { contextRoot = "${grailsAppName}" } 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"?--> ${grailsAppName} ${warDest.name} ${contextRoot} """ }<a href="https://geekdeep.wordpress.com/wp-admin/edit.php">Posts</a> setDefaultTarget(ear) def checkTargetExists(basedir){ def f = new File(basedir+'/target') f.exists() ?: f.mkdirs() }
Espero ter ajudado.
@LucasBrum