【问题标题】:Spring annotation configuration java.lang.NoClassDefFoundError: org/objectweb/asm/util/TraceClassVisitorSpring注解配置java.lang.NoClassDefFoundError: org/objectweb/asm/util/TraceClassVisitor
【发布时间】:2013-06-04 10:11:18
【问题描述】:

我正在尝试使用 java 配置运行一个非常简单的 Spring 应用程序。我收到以下异常,我不明白为什么。据我所知,我拥有所有必需的依赖项

public static void main(String[] args) 
{
     System.out.println( "Hello World from main!" );
     ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
     HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
     System.out.println( helloWorld.getMessage() );
}

异常发生在 - AnnotationConfigApplicationContext 函数调用

值得一提: 我的 POM.XML 文件中有以下依赖项。

  <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-asm</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>

还有例外:

Exception in thread "main" java.lang.IllegalStateException: Cannot load configuration class: spring.play.springStart.AppConfig
at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:313)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:197)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:681)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:620)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446)
at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:73)
at spring.play.springStart.App.main(App.java:14)
Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/util/TraceClassVisitor
at net.sf.cglib.core.DebuggingClassWriter.toByteArray(DebuggingClassWriter.java:73)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:26)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
at org.springframework.context.annotation.ConfigurationClassEnhancer.newEnhancer(ConfigurationClassEnhancer.java:136)
at org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:109)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:303)
... 6 more
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.util.TraceClassVisitor
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 17 more

【问题讨论】:

    标签: eclipse spring maven


    【解决方案1】:

    我实际上并不知道是什么解决了这个问题,但我确实去了一些做同样事情的教程网站,只是复制了他们的 pom 文件依赖项。 我仍然不明白缺少什么。

    无论如何,Balint Bako 的回答可能是正确的,但我不确定,当我回到 StackOverflow 时我已经解决了。

    这是 pom 文件

      <!-- Spring 3 dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- JavaConfig need this library -->
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>
    

    祝你好运

    【讨论】:

    • 好吧,检查哪个 jar 有缺失的类(spring-core 将)并为我的答案授予解决方案标记;)
    • 我遇到了 Spring 3.1.2.RELEASE 和 cglib-3.0 的问题,当更改为 cglib-2.2.2 时,一切正常
    【解决方案2】:

    根据异常,似乎缺少与 ASM 相关的 jar。你可以添加 asm-all

    <dependency>
       <groupId>asm</groupId>
       <artifactId>asm-all</artifactId>
       <version>2.1</version>
    </dependency>
    

    【讨论】:

    • 这会导致重复的 jars 并与其他依赖项发生冲突,因此无法正常工作\
    【解决方案3】:

    它与我一起使用以下依赖项。谢谢鲁本斯马里乌佐。你破解了 cglib 版本问题。它从未与 3.0 一起工作,但与 2.2.2

    一起工作
    <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>3.0.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>3.0.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>3.0.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>3.0.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>2.2.2</version>
            </dependency>
    
        </dependencies>
    

    【讨论】:

      【解决方案4】:

      你也需要弹簧芯。

      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${org.springframework.version}</version>
      </dependency>
      

      【讨论】:

        【解决方案5】:

        我在使用 Spock 单元测试框架和使用 Spy 测试时遇到了同样的问题。 我通过将它添加到我的 Maven 依赖项中解决了这个问题。

         <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.3.0</version>
        </dependency>
        
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib-nodep</artifactId>
            <version>3.3.0</version>
        </dependency>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-18
          • 2015-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-07
          • 2020-04-16
          相关资源
          最近更新 更多