Revivendo uma aplicação 1.1.1: "grails upgrade" nela pra 1.3.7 ou downgrade no ambiente pra 1.1.1?
15/11/2011 15:53
0
Olá, pessoal.

Faz um bom tempo que não desenvolvo em Grails e estou retornando agora pra colocar uma aplicação antiga minha pra rodar. O título já descreve a minha situação: ela está na versão 1.1.1 e meu ambiente eu acabei de configurar pra 1.3.7 (lastest stable release). Rodando "grails upgrade" eu tive as seguintes mensagens. Quero saber o que vocês acham: se devo adaptar meu ambiente à versão antiga ou minha aplicação à versão atual. No momento, eu prefiro o que tiver menos esforço, mas quero saber também do mais aconselhável.

Grato desde já.
Abraços!


$ grails upgrade
Using Java at: /usr/lib/jvm/java-6-sun
Welcome to Grails 1.3.7 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /usr/share/grails/1.3.7

Base Directory: /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app
Resolving dependencies...
Dependencies resolved in 1254ms.
Running script /usr/share/grails/1.3.7/scripts/Upgrade.groovy
Environment set to development
NOTE: Your application currently expects grails version [1.1.1], this target will upgrade it to Grails 1.3.7 ...

WARNING: This target will upgrade an older Grails application to 1.3.7.
Are you sure you want to continue?
(y, n)
y
[delete] Deleting directory /home/alceu/.grails/1.3.7/projects/app/resources
[copy] Copying 7 files to /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/web-app
[copy] Copying 1 file to /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/web-app/WEB-INF
[copy] Copying 1 file to /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/web-app/WEB-INF
[copy] Copying 4 files to /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/web-app/WEB-INF/tld
You currently already have a version of the plugin installed [hibernate-1.1.1]. Do you want to upgrade this version? [y,n] y
[delete] Deleting directory /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/hibernate-1.1.1
Installing zip /usr/share/grails/1.3.7/plugins/grails-hibernate-1.3.7.zip... ...
[mkdir] Created dir: /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/hibernate-1.3.7
[unzip] Expanding: /usr/share/grails/1.3.7/plugins/grails-hibernate-1.3.7.zip into /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/hibernate-1.3.7
Installed plugin hibernate-1.3.7 to location ./plugins/hibernate-1.3.7. ...
Resolving plugin JAR dependencies ...
Downloading: /usr/share/grails/1.3.7/lib/hibernate-core-3.3.1.GA.jar ...
Download complete.
Downloading: /usr/share/grails/1.3.7/lib/hibernate-commons-annotations-3.1.0.GA.jar ...
Download complete.
Downloading: /usr/share/grails/1.3.7/lib/hibernate-annotations-3.4.0.GA.jar ...
Download complete.
Downloading: /usr/share/grails/1.3.7/lib/hibernate-validator-3.1.0.GA.jar ...
Download complete.
Downloading: /usr/share/grails/1.3.7/lib/javassist-3.11.0.GA.jar ...
Download complete.
Downloading: /usr/share/grails/1.3.7/lib/antlr-2.7.6.jar ...
Download complete.
Downloading: /usr/share/grails/1.3.7/lib/dom4j-1.6.1.jar ...
Download complete.
Downloading: /usr/share/grails/1.3.7/lib/hibernate-ehcache-3.3.1.GA.jar ...
Download complete.
Executing hibernate-1.3.7 plugin post-install script ...
Plugin hibernate-1.3.7 installed
Installing zip /usr/share/grails/1.3.7/plugins/grails-tomcat-1.3.7.zip... ...
[mkdir] Created dir: /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/tomcat-1.3.7
[unzip] Expanding: /usr/share/grails/1.3.7/plugins/grails-tomcat-1.3.7.zip into /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/tomcat-1.3.7
Installed plugin tomcat-1.3.7 to location ./plugins/tomcat-1.3.7. ...
Executing tomcat-1.3.7 plugin post-install script ...
Plugin tomcat-1.3.7 installed
Plugin provides the following new scripts:
------------------------------------------
grails tomcat
Please make sure you view the README for important information about changes to your source code. ...
Project upgraded
alceu@alceu-travelmate6292:~/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app$ grails run-app
Using Java at: /usr/lib/jvm/java-6-sun
Welcome to Grails 1.3.7 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /usr/share/grails/1.3.7

Base Directory: /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app
Resolving dependencies...
Dependencies resolved in 1576ms.
Running script /usr/share/grails/1.3.7/scripts/RunApp.groovy
Environment set to development
[copy] Copied 9 empty directories to 5 empty directories under /home/alceu/.grails/1.3.7/projects/app/resources
[copy] Copied 1 empty directory to 1 empty directory under /home/alceu/.grails/1.3.7/projects/app/resources
[copy] Copied 2 empty directories to 1 empty directory under /home/alceu/.grails/1.3.7/projects/app/resources
[copy] Copied 1 empty directory to 1 empty directory under /home/alceu/.grails/1.3.7/projects/app/resources
[copy] Copied 3 empty directories to 2 empty directories under /home/alceu/.grails/1.3.7/projects/app/resources
[copy] Copied 18 empty directories to 10 empty directories under /home/alceu/.grails/1.3.7/projects/app/resources
[mkdir] Created dir: /home/alceu/.grails/1.3.7/projects/app/plugin-classes
[groovyc] Compiling 105 source files to /home/alceu/.grails/1.3.7/projects/app/plugin-classes
[groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
[groovyc] Compile error during compilation with javac.
[groovyc] /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:7: package org.springframework.webflow.execution does not exist
[groovyc] import org.springframework.webflow.execution.RequestContext;
[groovyc] ^
[groovyc] /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:8: package org.springframework.webflow.execution does not exist
[groovyc] import org.springframework.webflow.execution.RequestContextHolder;
[groovyc] ^
[groovyc] /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:9: package org.springframework.webflow.execution does not exist
[groovyc] import org.springframework.webflow.execution.FlowExecutionContext;
[groovyc] ^
[groovyc] /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:10: package org.springframework.webflow.core.collection does not exist
[groovyc] import org.springframework.webflow.core.collection.MutableAttributeMap;
[groovyc] ^
[groovyc] /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:11: package org.springframework.webflow.persistence does not exist
[groovyc] import org.springframework.webflow.persistence.HibernateFlowExecutionListener;
[groovyc] ^
[groovyc] /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:12: package org.codehaus.groovy.grails.webflow.persistence does not exist
[groovyc] import org.codehaus.groovy.grails.webflow.persistence.FlowAwareCurrentSessionContext;
[groovyc] ^
[groovyc] /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:22: cannot find symbol
[groovyc] symbol: class FlowAwareCurrentSessionContext
[groovyc] public class InterceptableCurrentSessionContext extends FlowAwareCurrentSessionContext {
[groovyc] ^
[groovyc] /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/util/TreeKey.java:3: warning: sun.misc.ASCIICaseInsensitiveComparator is Sun proprietary API and may be removed in a future release
[groovyc] import sun.misc.ASCIICaseInsensitiveComparator;
[groovyc] ^
[groovyc] /home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/util/TreeKey.java:18: warning: sun.misc.ASCIICaseInsensitiveComparator is Sun proprietary API and may be removed in a future release
[groovyc] private static final Comparator STRING_COMPARATOR = new ASCIICaseInsensitiveComparator();
[groovyc] ^
[groovyc] Note: Some input files use or override a deprecated API.
[groovyc] Note: Recompile with -Xlint:deprecation for details.
[groovyc] Note: Some input files use unchecked or unsafe operations.
[groovyc] Note: Recompile with -Xlint:unchecked for details.
[groovyc] 7 errors
[groovyc] 2 warnings
[groovyc]
[groovyc]
[groovyc] 1 error
: Compilation Failed
at org.codehaus.groovy.ant.Groovyc.compile(Groovyc.java:920)
at org.codehaus.groovy.ant.Groovyc.execute(Groovyc.java:607)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at _GrailsCompile_groovy$_run_closure4_closure10.doCall(_GrailsCompile_groovy:117)
at _GrailsCompile_groovy$_run_closure4_closure10.doCall(_GrailsCompile_groovy)
at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
at _GrailsCompile_groovy$_run_closure4.doCall(_GrailsCompile_groovy:104)
at _GrailsCompile_groovy$_run_closure3.doCall(_GrailsCompile_groovy:69)
at _GrailsPackage_groovy$_run_closure2_closure9.doCall(_GrailsPackage_groovy:85)
at _GrailsPackage_groovy$_run_closure2_closure9.doCall(_GrailsPackage_groovy)
at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
at _GrailsPackage_groovy$_run_closure2.doCall(_GrailsPackage_groovy:84)
at RunApp$_run_closure1.doCall(RunApp.groovy:28)
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
at gant.Gant.withBuildListeners(Gant.groovy:427)
at gant.Gant.this$2$withBuildListeners(Gant.groovy)
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:415)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.executeTargets(Gant.groovy:590)
at gant.Gant.executeTargets(Gant.groovy:589)
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Compile error during compilation with javac.
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:7: package org.springframework.webflow.execution does not exist
import org.springframework.webflow.execution.RequestContext;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:8: package org.springframework.webflow.execution does not exist
import org.springframework.webflow.execution.RequestContextHolder;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:9: package org.springframework.webflow.execution does not exist
import org.springframework.webflow.execution.FlowExecutionContext;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:10: package org.springframework.webflow.core.collection does not exist
import org.springframework.webflow.core.collection.MutableAttributeMap;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:11: package org.springframework.webflow.persistence does not exist
import org.springframework.webflow.persistence.HibernateFlowExecutionListener;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:12: package org.codehaus.groovy.grails.webflow.persistence does not exist
import org.codehaus.groovy.grails.webflow.persistence.FlowAwareCurrentSessionContext;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:22: cannot find symbol
symbol: class FlowAwareCurrentSessionContext
public class InterceptableCurrentSessionContext extends FlowAwareCurrentSessionContext {
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/util/TreeKey.java:3: warning: sun.misc.ASCIICaseInsensitiveComparator is Sun proprietary API and may be removed in a future release
import sun.misc.ASCIICaseInsensitiveComparator;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/util/TreeKey.java:18: warning: sun.misc.ASCIICaseInsensitiveComparator is Sun proprietary API and may be removed in a future release
private static final Comparator STRING_COMPARATOR = new ASCIICaseInsensitiveComparator();
^
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
7 errors
2 warnings


1 error

at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:302)
at org.codehaus.groovy.control.ErrorCollector.addFatalError(ErrorCollector.java:149)
at org.codehaus.groovy.tools.javac.JavacJavaCompiler.addJavacError(JavacJavaCompiler.java:92)
at org.codehaus.groovy.tools.javac.JavacJavaCompiler.compile(JavacJavaCompiler.java:71)
at org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit.gotoPhase(JavaAwareCompilationUnit.java:94)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:484)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:453)
at org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:67)
at org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:180)
at org.codehaus.groovy.ant.Groovyc.compile(Groovyc.java:905)
... 26 more
--- Nested Exception ---
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Compile error during compilation with javac.
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:7: package org.springframework.webflow.execution does not exist
import org.springframework.webflow.execution.RequestContext;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:8: package org.springframework.webflow.execution does not exist
import org.springframework.webflow.execution.RequestContextHolder;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:9: package org.springframework.webflow.execution does not exist
import org.springframework.webflow.execution.FlowExecutionContext;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:10: package org.springframework.webflow.core.collection does not exist
import org.springframework.webflow.core.collection.MutableAttributeMap;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:11: package org.springframework.webflow.persistence does not exist
import org.springframework.webflow.persistence.HibernateFlowExecutionListener;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:12: package org.codehaus.groovy.grails.webflow.persistence does not exist
import org.codehaus.groovy.grails.webflow.persistence.FlowAwareCurrentSessionContext;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/com/infusion/util/event/spring/InterceptableCurrentSessionContext.java:22: cannot find symbol
symbol: class FlowAwareCurrentSessionContext
public class InterceptableCurrentSessionContext extends FlowAwareCurrentSessionContext {
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/util/TreeKey.java:3: warning: sun.misc.ASCIICaseInsensitiveComparator is Sun proprietary API and may be removed in a future release
import sun.misc.ASCIICaseInsensitiveComparator;
^
/home/alceu/desenvolvimento/projetos/ekoimpacto/ekobin/svn/trunk/app/plugins/falcone-util-0.8/src/java/util/TreeKey.java:18: warning: sun.misc.ASCIICaseInsensitiveComparator is Sun proprietary API and may be removed in a future release
private static final Comparator STRING_COMPARATOR = new ASCIICaseInsensitiveComparator();
^
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
7 errors
2 warnings


1 error

at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:302)
at org.codehaus.groovy.control.ErrorCollector.addFatalError(ErrorCollector.java:149)
at org.codehaus.groovy.tools.javac.JavacJavaCompiler.addJavacError(JavacJavaCompiler.java:92)
at org.codehaus.groovy.tools.javac.JavacJavaCompiler.compile(JavacJavaCompiler.java:71)
at org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit.gotoPhase(JavaAwareCompilationUnit.java:94)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:484)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:453)
at org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:67)
at org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:180)
at org.codehaus.groovy.ant.Groovyc.compile(Groovyc.java:905)
at org.codehaus.groovy.ant.Groovyc.execute(Groovyc.java:607)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at _GrailsCompile_groovy$_run_closure4_closure10.doCall(_GrailsCompile_groovy:117)
at _GrailsCompile_groovy$_run_closure4_closure10.doCall(_GrailsCompile_groovy)
at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
at _GrailsCompile_groovy$_run_closure4.doCall(_GrailsCompile_groovy:104)
at _GrailsCompile_groovy$_run_closure3.doCall(_GrailsCompile_groovy:69)
at _GrailsPackage_groovy$_run_closure2_closure9.doCall(_GrailsPackage_groovy:85)
at _GrailsPackage_groovy$_run_closure2_closure9.doCall(_GrailsPackage_groovy)
at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
at _GrailsPackage_groovy$_run_closure2.doCall(_GrailsPackage_groovy:84)
at RunApp$_run_closure1.doCall(RunApp.groovy:28)
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
at gant.Gant.withBuildListeners(Gant.groovy:427)
at gant.Gant.this$2$withBuildListeners(Gant.groovy)
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:415)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.executeTargets(Gant.groovy:590)
at gant.Gant.executeTargets(Gant.groovy:589)
Compilation error: Compilation Failed
$_

Tags: grails version issue 1.1.1 1.3.7 upgrade downgrade


0
Oi Alceu,

neste caso, o diabo normalmente fica nos plugins. Minha sugestão é a seguinte: consulte a documentação dos plugins que você usa pra ver se algum deles tem algum problema de conflito com a última versão do Grails.

Se tiver, você tem duas opções: ou fica na versão antiga do Grails, ou trabalha em cima do código fonte do plugin para resolver o problema de incompatibilidade.




Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto