Scripts Groovy

Hoje vim compartilhar alguns scripts Groovy. Vou postar 3 scripts sendo que um é muito simples mas tem o seu valor e os outros dois tem mais utilidade prática, todos servem para que o leitor possa aprender mais sobre Groovy.

Atualmente se tenho que fazer um script para fazer alguma coisa eu não penso duas vezes e uso Groovy, por que é simples, fácil e o código fica limpo e claro.

Os scripts são esses:
  • wcSvnCls.groovy
  • pomDepReader.groovy
  • toJSlash.groovy
O primeiro script é de utilizada geral, o segundo script serve para quem mexe com o controle de versão Subversion e o terceiro para quem usa Maven 2. Esses scripts são válidos para windows ou Linux, não testei no Mac mas deve rolar também.



O primeiro Script o toJSlash.groovy normaliza as barras, sabendo que as barras do windows são "\" e as do Java e Linux "/" então esse scriptzinho faz essa conversão:

/**
*  Script Groovy que faz a conversao das barras do windows para as barras do java/linux
*  Esse script eh util para que vc faz essa conversao sem esforco no windows.
* 
*  @autor Diego Pacheco
*  @since 05/05/2009
*  @version 1.o
* 
*/

println args[0].replace("\\","/")

Então o args[0] é o primeiro parâmetro que é passado ao Groovy quando você executa esse código. Perceba que você não precisa criar um método main e declarar String []args, por que o Groovy já faz isso pra você.

Eu uso isso direto no windows para fazer replace de coisas que copio e colo. Esse script é muito simples mas em Java já ia dar mais código e seria mais chato de fazer :)

/** 
*  Script Groovy que deleta recursivamente todos os diretórios .svn de um working copy. 
*  Esse script eh util para caso voce queira limpar o seu working copy para criar um novo repositorio soh 
*  com o co nteudo do working copy ignorando o historico do svn. 
*   
*  @autor Diego Pacheco 
*  @since 05/05/2009 
*  @version 1.o 
*   
*/ 

def dirDigger 
dirDigger = { path ->  
new File(path.toString()).eachDir{ f -> 
dirDigger f.toString() 
}              
if (path.toString().contains(".svn")) { 
println "deletando: $path" 
deleteDir(new File(path.toString())) 
}       
} 

boolean deleteDir(File dir) { 
if (dir.isDirectory()) { 
String[] children = dir.list(); 
for (int i=0; i 

Esse script já mais trabalhado e tem bastante utilidade. Bom não sei se vocês já fizeram migrações no svn mas manter históricos é uma dor de cabeça e as vezes temos repositórios velhos ou que não queremos manter mais o histórico então dessa forma a coisa mais simples a se fazer e limpar uma working copy deletando todas as pastas .svn e commitando isso no novo repositório. 

Semana passada eu fiz isso direto. Então o script a cima faz essa tarefa para nos. O legal desse script é um closure recursivo para varrer o sistema de arquivos a procura das pastas do SVN. 

Por fim o terceiro script serve para quem trabalha com maven, esse script lista todas as dependências de um pom sem vc ter que abrir o arquivo isso poupa tempo quando você esta pelo Linux navegando na pasta .m2 ou em algum repositório do archiva. 

/** 
*  Script Groovy que le as dependencias de um pom atraves da api de xml e xmlns do Groovy. 
*  Esse script eh util para caso voce queira listar as dependencias de um pom. Quando vc estah conectado 
*  de forma remota no linux e nao queren abrir arquivo por arquivo no vim. 
*   
*  @autor Diego Pacheco 
*  @since 05/05/2009 
*  @version 1.o 
*   
*/ 

def ns   = new groovy.xml.Namespace("http://maven.apache.org/POM/4.0.0", 'ns') 
def root = new XmlParser().parseText(new File(args[0]).text) 

def finder = { nodo -> 
def lista = new ArrayList() 
nodo.each{ 
lista << (it.toString().substring(it.toString().indexOf("value=[") + 7,it.toString().length()).replace("]]",""))
} 
return lista 
} 

def listG = finder(root[ns.dependencies][ns.dependency][ns.groupId]); 
def listA = finder(root[ns.dependencies][ns.dependency][ns.artifactId]); 
def listV = finder(root[ns.dependencies][ns.dependency][ns.version]); 

def count = 0; 
println "Dependencias desse pom:\n"; 
listG.each{     
println "groupId: " + listG.get(count).padRight(50) + " artifactId: " + listA.get(count).padRight(50) + " version: " + listV.get(count); 
count++; 
} 
Esse script é bem trabalhado. Eu usei a API de xml do Groovy, eu primeiro pego o schema do Pom do Groovy e depois faço o parse do xml usando esse ns. Depois existe um closure generico que le o grupo, identificador e versão do artefato do maven. Isso tudo é armazenado em listas que são mostradas no fimal. Até o fim da semana vou disponibilizar esses scripts no meu repositório do Subversion e vou começar a adicionar mais scripts lá. Abraços.

Popular posts from this blog

C Unit Testing with Check

Having fun with Zig Language

HMAC in Java