Pergunta

O código a seguir gera um erro usando o Guice 2.0.Com Guice 1.0 está tudo bem.O JDK é o Java 6 update 15.

public class App {
    public static void main(String[] args) {
        Guice.createInjector(new AbstractModule() {
            @Override
            protected void configure() {
                // just testing 
            }
        });
    }
}

O erro é:

Exception in thread "main" java.lang.NoClassDefFoundError: [Lorg/aopalliance/intercept/MethodInterceptor;
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
    at java.lang.Class.getDeclaredMethods(Class.java:1791)
    at com.google.inject.internal.ProviderMethodsModule.getProviderMethods(ProviderMethodsModule.java:78)
    at com.google.inject.internal.ProviderMethodsModule.configure(ProviderMethodsModule.java:70)
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:232)
    at com.google.inject.spi.Elements.getElements(Elements.java:101)
    at com.google.inject.InjectorShell$Builder.build(InjectorShell.java:135)
    at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:102)
    at com.google.inject.Guice.createInjector(Guice.java:92)
    at com.google.inject.Guice.createInjector(Guice.java:69)
    at com.google.inject.Guice.createInjector(Guice.java:59)
    at App.main(App.java:6)
Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 14 more

O que pode ser o problema?

Foi útil?

Solução

Você perdeu para incluir um dependência frasco com o org.aopalliance.intercept.MethodInterceptor classe no classpath.

Outras dicas

Boris Pavlovic menciona em sua resposta, você está perdendo uma jar. Especificamente o arquivo aopalliance.jar, que vem na guice arquivo zip

Como alternativa, você pode tentar usar guice-2.0-no_aop.jar , mas estou não tenho certeza se isso vai funcionar.

Adicionando este arquivo para o classpath depende de qual ferramenta você usa para executar seu código Java.

  • Se você estiver executando java na linha de comando:
windows: java -cp aopalliance.jar;guice-2.0.jar;other_jars.jar YourMainClass
*nix:    java -cp aopalliance.jar:guice-2.0.jar:other_jars.jar YourMainClass
  • Se você estiver executando java de Eclipse, normalmente você vai ter algum tipo de lib /. Coloque seu frasco lá, em seguida, clique com o botão direito sobre o jar -> Build Path -> Adicionar a Caminho de Construção

Eu executar para esse problema ontem, a dependência é gerido por Maven, de modo que o aopalliance.jar está na classpath sem dúvida.

Atualização cais da versão 6.1.10 para 6.1.26 corrigiu o problema.

O verdadeiro problema aqui é o contêiner não suporta aopalliance.jar. Espero que vai ajudar alguém lá desesperadamente à procura de uma solução.

Eu executar para esse problema hoje. Na verdade, o tomcat não consegue encontrar a classe em sua lib. Então, basta copiar o aopalliance.jar para a pasta lib no tomcat, isso é suficiente.

Adicionar o abaixo frascos funciona bem para mim.
javax.inject.jar
guice-3.0-no_aop.jar

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top