Qual a Diferença no Grails entre run-app e run.Aplication do IntelliJ
09/05/2016 03:17
0
Estou trabalhando a 1 ano com Grails e IntelliJ Community 14, e venho notando alguns comportamentos diferentes entre rodar o projeto através da linha de comando e utilizar o Run 'Aplication.main()' do IDEA.

Posto essa dúvida para tentar entender de uma vez que diferença é essa. Vou tentar exemplificar com uma situação que me deparei ultimamente.

Pense em duas Entidades. Uma "Servico" e outra "Status", conforme abaixo:

class Servico {

static hasOne = [status: Status]

static constraints = {
? ?status nullable: true
?}
}?

class Status {

String nome
??static hasMany = [servicos: Servico]

static constraints = {
nome nullable: false, unique: true
}
}


O projeto funciona normalmente rodando pelo IDEA, porém quando utilizado o run-app da linha de comando, o seguinte erro ocorre ao tentar salvar um "Servico":
[font=Arial]object references an unsaved transient instance - save the transient instance before flushing: projeto.Status[/font]

O que já não faz muito sentido, uma vez que o Status já existe na base antes do Serviço.

Depois disso, ao tentar rodar o projeto novamente no IDEA, outro erro ocorre de cara:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsApplicationPostProcessor' defined in projeto.Application: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [grails.boot.config.GrailsApplicationPostProcessor]: Factory method 'grailsApplicationPostProcessor' threw exception; nested exception is java.lang.NoClassDefFoundError: grails/gorm/Entity

Para conseguir rodar novamente, preciso usar um "grails clean". Após esse comando (ou excluir a pasta build) o projeto volta a funcionar corretamente.

Aparentemente o IDEA está gerando uma pasta build diferente da pasta gerada pelo run-app.

Alguém tem alguma luz a respeito disso?
Tags: Grails run-app intelliJ


0
Puts, cara

Eu já passei por um problema semelhante ao que você está relatando (de sempre ter que dar um clean no IntelliJ para conseguir rodar a aplicação recentemente stopada), mas não sei se esse era o log e até acho que não.

No meu caso não era o IntelliJ, mas como se fosse um arquivo de cache numa pasta "~/.grails/versao/aplicação" que ficava causando esse sintoma. Depois que eu apaguei o negócio parou de dar esse pau.

Não é uma grande ajuda pq faz tempo e eu sequer lembro certinho o diretório, mas talvez seja um norte!
 
09/05/2016 16:33


0
Olá amigo.
Vamos tentar simplificar para ver no que dá?
Você consegue fazer o que deseja tendo apenas o domain Serviço, mas com declaração totalmente simples?

class Servico {

   String nomeServico

    static constraints = {
   ?nomeServico (blank: false, maxSize: 90, unique: 'docDeReferencia')
   }

    static mapping = {
       nomeServico (column: 'nomeServico', sqltype:char, length: 90)
    } 
}
24/05/2016 09:20


0
Por favor, retire a da declaração o texto: , unique: 'docDeReferencia'
Desculpe aí...
24/05/2016 09:22


1
Olha Pedro, eu consegui resolver o problema. Constatei que realmente o Grails executa de forma diferente, entre a linha de comando e o IntelliJ. 

Como mencionei, já tive problemas com essas diferenças algumas vezes.

Dessa vez a "diferença" era:
new Objeto(id: 1)


No IntelliJ essa execução funciona normalmente, porém quando executado na linha de comando, o campo id não é encontrado. Então tive que instanciar o objeto e utilizar um setId(1), dessa forma funciona nos dois casos.

O que me deixa curioso é porque essas diferenças ocorrem...



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