Compilação do maven diferente do eclipse

Olá pessoal,

Estou lhe dando com um mistério.

Tenho o seguinte código fonte:

   public List<OndaFeedback> listarOndaFeedbackConcluida(Empregado empregado) {
      List<OndaFeedback> listaOndaFeedback = new ArrayList<OndaFeedback>();
      List<OndaFeedbackAvaliacao> listaOndaFeedbackAvaliacao = this.listarOndaFeedbackDistinto(empregado);

      for (Object objeto : listaOndaFeedbackAvaliacao) {
         OndaFeedback ondaFeedback = (OndaFeedback) objeto;
         List<OndaFeedbackAvaliacao> lOndaFdkAvaliacao = listar(ondaFeedback, empregado);
         int qtdEmpAlvo = 1;
         if(empregado == null){
            qtdEmpAlvo =  new OndaFeedbackRN().montarListaPublicoOndaFeedbackAlvoUnidade(ondaFeedback).size();
         }
         Double totPercConc = this.calcPercConcOndaFdkAvaliacao(lOndaFdkAvaliacao, ondaFeedback.getListaAtributo().size(), qtdEmpAlvo);
         if (totPercConc != null && totPercConc.intValue() == 100) {
            listaOndaFeedback.add(ondaFeedback);
         }

      }
      return listaOndaFeedback;
   }

Por meio de um decompilador verifiquei que o eclipse e o maven estão gerando .class diferente.

Compilação pelo Eclipse:

    public List listarOndaFeedbackConcluida(Empregado empregado)
    {
        List listaOndaFeedback = new ArrayList();
        List listaOndaFeedbackAvaliacao = listarOndaFeedbackDistinto(empregado);
        for(Iterator iterator = listaOndaFeedbackAvaliacao.iterator(); iterator.hasNext();)
        {
            Object objeto = iterator.next();
            OndaFeedback ondaFeedback = (OndaFeedback)objeto;
            List lOndaFdkAvaliacao = listar(ondaFeedback, empregado);
            int qtdEmpAlvo = 1;
            if(empregado == null)
                qtdEmpAlvo = (new OndaFeedbackRN()).montarListaPublicoOndaFeedbackAlvoUnidade(ondaFeedback).size();
            Double totPercConc = calcPercConcOndaFdkAvaliacao(lOndaFdkAvaliacao, Integer.valueOf(ondaFeedback.getListaAtributo().size()), Integer.valueOf(qtdEmpAlvo));
            if(totPercConc != null && totPercConc.intValue() == 100)
                listaOndaFeedback.add(ondaFeedback);
        }

        return listaOndaFeedback;
    }

Compilação pelo Maven 3.0.5

    public List listarOndaFeedbackConcluida(Empregado empregado)
    {
        List listaOndaFeedback = new ArrayList();
        List listaOndaFeedbackAvaliacao = listarOndaFeedbackDistinto(empregado);
        Iterator i$ = listaOndaFeedbackAvaliacao.iterator();
        do
        {
            if(!i$.hasNext())
                break;
            Object objeto = (OndaFeedbackAvaliacao)i$.next();
            OndaFeedback ondaFeedback = (OndaFeedback)objeto;
            List lOndaFdkAvaliacao = listar(ondaFeedback, empregado);
            int qtdEmpAlvo = 1;
            if(empregado == null)
                qtdEmpAlvo = (new OndaFeedbackRN()).montarListaPublicoOndaFeedbackAlvoUnidade(ondaFeedback).size();
            Double totPercConc = calcPercConcOndaFdkAvaliacao(lOndaFdkAvaliacao, Integer.valueOf(ondaFeedback.getListaAtributo().size()), Integer.valueOf(qtdEmpAlvo));
            if(totPercConc != null && totPercConc.intValue() == 100)
                listaOndaFeedback.add(ondaFeedback);
        } while(true);
        return listaOndaFeedback;
    }

Configuração pom.xml:

<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>	
				<version>2.3.2</version>
				<configuration>
				  <source>1.6</source>
				  <target>1.6</target>
				</configuration>
			</plugin>

1-Cheguei a esse nível de detalhamento porque a compilação do maven gera um erro de Cast.

2-Tanto o eclipse quanto maven estão apontando para o mesmo JDK - 1.6

Agradeço qualquer contribuição!

Abraços!

Fala amigo,

Então fica um tanto que complicado usando a mesma jdk e produzir códigos diferentes (claro levando em conta todos os parâmetros também). Uma dica, instala o plugin do maven no eclipse e tenta compilar de dentro do eclipse mesmo usando maven (não esqueça de apontar o maven configurado no Eclipse para essa que você está usando) e verifica o resultado.

Outra coisa, verifica se a variável de ambiente JAVA_HOME esteja apontando para o mesmo jdk de dentro do console (digita echo %JAVA_HOME% no command do Windows). Ai voce bate com o compiler utilizado pelo Eclipse (para isso clique com o botão direito no projeto -> Properties -> Java Compiler)

Qualquer resultado, posta ai!

Vlw

[quote=jonathan.c.rodrigues]Fala amigo,

Então fica um tanto que complicado usando a mesma jdk e produzir códigos diferentes (claro levando em conta todos os parâmetros também). Uma dica, instala o plugin do maven no eclipse e tenta compilar de dentro do eclipse mesmo usando maven (não esqueça de apontar o maven configurado no Eclipse para essa que você está usando) e verifica o resultado.

Outra coisa, verifica se a variável de ambiente JAVA_HOME esteja apontando para o mesmo jdk de dentro do console (digita echo %JAVA_HOME% no command do Windows). Ai voce bate com o compiler utilizado pelo Eclipse (para isso clique com o botão direito no projeto -> Properties -> Java Compiler)

Qualquer resultado, posta ai!

Vlw[/quote]

Então amigo, pelo plugin do maven, também funciona. Somente usando a linha de comando, ocorre esse problema.

Já verifiquei também, o JAVA_HOME aponta pro mesmo diretório jdk.

Muito estranho.

Só para ter certeza, o maven configurado na usa IDE ai é o mesmo que voce está executando por linha de comando né ? O Eclipse, por exemplo, vem com um plugin do eclipse instalado, ai voce precisa configurar um external e apontar para o diretório do seu maven.

Isso pode ser versões diferente do maven (como o jdk é o mesmo). Tenta instalar o maven 3 e o 2 e compilar com os dois para ver se tem diferença. (Eu não tive um problema assim ainda, estou levantando hipóteses do que pode ser de forma lógica :D, por isso não posso ser mais objetivo).

Qualquer coisa, manda ai! :smiley:

[quote=jonathan.c.rodrigues]Só para ter certeza, o maven configurado na usa IDE ai é o mesmo que voce está executando por linha de comando né ? O Eclipse, por exemplo, vem com um plugin do maven instalado, ai voce precisa configurar um external e apontar para o diretório do seu maven.

Isso pode ser versões diferente do maven (como o jdk é o mesmo). Tenta instalar o maven 3 e o 2 e compilar com os dois para ver se tem diferença. (Eu não tive um problema assim ainda, estou levantando hipóteses do que pode ser de forma lógica :D, por isso não posso ser mais objetivo).

Qualquer coisa, manda ai! :D[/quote]

[quote=jonathan.c.rodrigues][quote=jonathan.c.rodrigues]Só para ter certeza, o maven configurado na usa IDE ai é o mesmo que voce está executando por linha de comando né ? O Eclipse, por exemplo, vem com um plugin do maven instalado, ai voce precisa configurar um external e apontar para o diretório do seu maven.

Isso pode ser versões diferente do maven (como o jdk é o mesmo). Tenta instalar o maven 3 e o 2 e compilar com os dois para ver se tem diferença. (Eu não tive um problema assim ainda, estou levantando hipóteses do que pode ser de forma lógica, por isso não posso ser mais objetivo).

Qualquer coisa, manda ai! :D[/quote][/quote]

[quote=jonathan.c.rodrigues]Só para ter certeza, o maven configurado na usa IDE ai é o mesmo que voce está executando por linha de comando né ? O Eclipse, por exemplo, vem com um plugin do eclipse instalado, ai voce precisa configurar um external e apontar para o diretório do seu maven.

Isso pode ser versões diferente do maven (como o jdk é o mesmo). Tenta instalar o maven 3 e o 2 e compilar com os dois para ver se tem diferença. (Eu não tive um problema assim ainda, estou levantando hipóteses do que pode ser de forma lógica :D, por isso não posso ser mais objetivo).

Qualquer coisa, manda ai! :D[/quote]

Então, eu ainda não testei usando maven 2, apenas maven 3.0.x.
Quanto ao plugin, usei tanto o externo quanto o interno e mesmo assim apresentou a diferença de compilação.
Mas, vou fazer esse teste. Vou instalar o maven 2.

Abraços!

[quote=efcjunior][quote=jonathan.c.rodrigues]Só para ter certeza, o maven configurado na usa IDE ai é o mesmo que voce está executando por linha de comando né ? O Eclipse, por exemplo, vem com um plugin do eclipse instalado, ai voce precisa configurar um external e apontar para o diretório do seu maven.

Isso pode ser versões diferente do maven (como o jdk é o mesmo). Tenta instalar o maven 3 e o 2 e compilar com os dois para ver se tem diferença. (Eu não tive um problema assim ainda, estou levantando hipóteses do que pode ser de forma lógica :D, por isso não posso ser mais objetivo).

Qualquer coisa, manda ai! :D[/quote]

Então, eu ainda não testei usando maven 2, apenas maven 3.0.x.
Quanto ao plugin, usei tanto o externo quanto o interno e mesmo assim apresentou a diferença de compilação.
Mas, vou fazer esse teste. Vou instalar o maven 2.

Abraços![/quote]

fiz o teste usando o maven 2. Mesma coisa…

Essa diferença de compilação que postei a cima foi usando o software na versão teste:DJ Java Decompiler.
Pra complicar mais ainda decompilei o .class desse código usando outro software Java Decompiler e esse não gera nenhuma dferença. A decompilação é como se fosse a classe original…

Galera, lascou viu…

Essas mudanças não me parecem significativas… elas têm funcionalidade idêntica.

Talvez essa pequena diferença no .class esteja desviando o rumo da sua investigação (to falando igual delegado de novela) mas a causa do erro pode ser outra. Talvez no ambiente em que são feitas ambas as execuções…

Voltando à raiz do problema: Qual o erro que está acontecendo? Existe diferença na forma de execução desses pacotes gerados pelo Eclipse e pelo Maven?

[quote=gomesrod]Essas mudanças não me parecem significativas… elas têm funcionalidade idêntica.

Talvez essa pequena diferença no .class esteja desviando o rumo da sua investigação (to falando igual delegado de novela) mas a causa do erro pode ser outra. Talvez no ambiente em que são feitas ambas as execuções…

Voltando à raiz do problema: Qual o erro que está acontecendo? Existe diferença na forma de execução desses pacotes gerados pelo Eclipse e pelo Maven?[/quote]

O ambiente exatamente o mesmo porque faço ambos os testes na mesma maquina sobre o mesmo servidor de aplicação sendo iniciado por dentro do eclipse. A diferença é que quando gero “war” pela linha de comando Maven, eu copio esse pacote para a pasta “deployments” do JBoss e quando gero por meio do eclipse, é pela opção “publish”.

O seguinte erro é gerado:

Obrigado mais um vez pela dica. Qualquer é bem vinda!

mais um detalhe que pode ser útil pra decifrar esse problema.

O método abaixo me retorna a lista que o “for” não consegue iterar.

1- Por que na declaração do for eu preciso atribuir o elemente dessa lista a um Object ?
Porque como vocês podem ver no código que eu coloco uma propriedade distinct sobre um atributo do tipo OndaFeedback e por isso, não sei por que, a lista ao invés de vir com objetos do tipo OndaFeedbackAvaliacao, ela vem com objetos do tipo OndaFeedback.

2- Se eu tiro o “disctinct” não gera o problema mas, não creio que seja solução porque como uma compilação pode a ver divergências usando o mesmo JDK.

   @SuppressWarnings("unchecked")
   @Override
   public List<OndaFeedbackAvaliacao> listarOndaFeedbackDistinto(Empregado empregado) {
      Criteria criteria = getSession().createCriteria(OndaFeedbackAvaliacao.class);
      if(empregado != null){
         criteria.add(Restrictions.eq("id.empregado", empregado));   
      }
      criteria.setProjection(Projections.distinct(Projections.property("id.ondaFeedback")));
      return criteria.list();
   }

Por último fiz agora o teste usando compilador javac mas, o problema persistiu:

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>	
				<version>3.1</version>
				<configuration>
					<fork>true</fork>
					<executable>C:\Desenvolvimento\Java\jdk1.6.0_13\bin\javac</executable>
				</configuration>
			</plugin>

Bem pesssoal, consegui encontrar uma solução alterando a versão do jdk para 7.

Então fica a dúvida, será que era um problema da versão 6 ou essa versão específica q estava na minha maquina estaria com problema ?

Ficou assim o pom.xml:

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>	
				<version>3.1</version>
				<configuration>
				  <source>1.7</source>
				  <target>1.7</target>
				</configuration>
			</plugin>

(Agora que consegui ver o tópico)

Que bom que conseguiu contornar o problema e respirar aliviado :slight_smile:

Já tinha percebido que havia mais gente com problema parecido? Caso tenha um tempo disponível para fuçar no assunto, procure no google jsf javassist ClassCastException . Uma das possibilidades (resolveu para algumas pessoas) era que o pacote estava sendo gerado com a biblioteca javassist que entra em conflito com a versão presente no servidor de aplicação.