2013-05-28 6 views
9

जब मैंने वसंत 3.2.2 के बगल में वसंत-सुरक्षा 3.1.4 जोड़ा, तो मुझे यह बदसूरत मिला है नीचे अपवाद। मैंने इसे गॉगल किया और उसी त्रुटि के बारे में केवल यह लिंक प्राप्त किया: http://forum.springsource.org/showthread.php?133706-Spring-3-2-0-RELEASE-breaks-with-JBoss-7 वसंत जेरा को इंगित करता है कि वसंत-एएसएम अब वसंत-कोर में है। https://jira.springsource.org/browse/SPR-10134स्प्रिंग कोर 3.2.2 + स्प्रिंग सुरक्षा 3.1.4: java.lang.IncompatibleClassChangeError: org.springframework.asm.ClassVisitor

मुझे लगा कि मुझे वसंत-सुरक्षा से वसंत-एएसएम को किसी भी तरह से बाहर करने की आवश्यकता है। वसंत-डेटा में एक ऐसी ही समस्या से http://www.mkyong.com/mongodb/spring-asm-dependency-issue-in-spring-data/ :

java.lang.IncompatibleClassChangeError: class org.springframework.core.LocalVariableTableParameterNameDiscoverer$ParameterNameDiscoveringVisitor has interface org.springframework.asm.ClassVisitor as super class 
java.lang.ClassLoader.defineClass1(Native Method) 
java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895) 
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 
org.springframework.core.LocalVariableTableParameterNameDiscoverer.inspectClass(LocalVariableTableParameterNameDiscoverer.java:112) 
org.springframework.core.LocalVariableTableParameterNameDiscoverer.getParameterNames(LocalVariableTableParameterNameDiscoverer.java:85) 
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:193) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1051) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:955) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) 
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) 
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651) 
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:599) 
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665) 
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:518) 
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459) 
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
javax.servlet.GenericServlet.init(GenericServlet.java:160) 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008) 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
java.lang.Thread.run(Thread.java:722) 

उत्तर

24

तब मैं इस पाया:

यहाँ अपवाद रहा था। Pom.xml में बहिष्करण भी काम करता है:

<dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>3.1.4.RELEASE</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-asm</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

मैं उन लोगों के लिए समाधान साझा करता हूं जो एक ही त्रुटि प्राप्त करते हैं!

+1

मैं लगा आप वसंत-सुरक्षा से वसंत-एएसएम को बाहर करने की जरूरत है। जब भी मैं मेवेन का उपयोग नहीं कर रहा था तब भी मुझे यही समस्या थी। –

10

समस्या यह है कि वसंत सुरक्षा 3.1.4 वसंत 3.0.7 पर निर्भर करता है, इसलिए यह वसंत-एओपी 3.0.7 में खींचता है, जो वसंत-एएसएम 3.0.7 में खींचता है। आप क्या करना चाहते हैं तो तरह, नवीनतम संस्करण का उपयोग करने के लिए किसी भी वसंत समावेशन के लिए मजबूर करने Maven के dependencyManagement अनुभाग का उपयोग करने के लिए है:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <!-- etc... 
      -- enumerate all Spring sub-projects here that spring-security includes 
      --> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

आप सत्यापित कर सकते हैं कि आप mvn dependency:tree चलाकर सभी निर्भरता दूर प्रबंधित किया है।

उदाहरण के लिए, dependencyManagement से पहले, मेरे mvn dependency:tree उत्पादन किया गया था: विशेष पहली तीन पंक्तियों, जहां spring-aopspring-asm में लाता में

[INFO] +- org.springframework.security:spring-security-core:jar:3.1.4.RELEASE:compile 
[INFO] | +- org.springframework:spring-aop:jar:3.0.7.RELEASE:compile 
[INFO] | | \- org.springframework:spring-asm:jar:3.0.7.RELEASE:compile 
[INFO] | +- org.springframework:spring-core:jar:3.2.3.RELEASE:compile (version managed from 3.0.7.RELEASE) 
[INFO] | +- org.springframework:spring-context:jar:3.0.7.RELEASE:compile 
[INFO] | +- org.springframework:spring-beans:jar:3.0.7.RELEASE:compile 
[INFO] | \- org.springframework:spring-expression:jar:3.0.7.RELEASE:compile 
[INFO] +- org.springframework.security:spring-security-config:jar:3.1.4.RELEASE:compile 
[INFO] +- org.springframework.security:spring-security-web:jar:3.1.4.RELEASE:compile 
[INFO] | +- org.springframework:spring-jdbc:jar:3.0.7.RELEASE:compile 
[INFO] | +- org.springframework:spring-web:jar:3.0.7.RELEASE:compile 
[INFO] | \- org.springframework:spring-tx:jar:3.0.7.RELEASE:compile 

सूचना। पर्याप्त dependencyManagement घोषणाओं को जोड़ने के बाद, अब हम पाते हैं:

[INFO] +- org.springframework.security:spring-security-core:jar:3.1.4.RELEASE:compile 
[INFO] | +- org.springframework:spring-aop:jar:3.2.3.RELEASE:compile (version managed from 3.0.7.RELEASE) 
[INFO] | +- org.springframework:spring-core:jar:3.2.3.RELEASE:compile (version managed from 3.0.7.RELEASE) 
[INFO] | +- org.springframework:spring-context:jar:3.2.3.RELEASE:compile (version managed from 3.0.7.RELEASE) 
[INFO] | +- org.springframework:spring-beans:jar:3.2.3.RELEASE:compile (version managed from 3.0.7.RELEASE) 
[INFO] | \- org.springframework:spring-expression:jar:3.2.3.RELEASE:compile (version managed from 3.0.7.RELEASE) 
[INFO] +- org.springframework.security:spring-security-config:jar:3.1.4.RELEASE:compile 
[INFO] +- org.springframework.security:spring-security-web:jar:3.1.4.RELEASE:compile 
[INFO] | +- org.springframework:spring-jdbc:jar:3.2.3.RELEASE:compile (version managed from 3.0.7.RELEASE) 
[INFO] | +- org.springframework:spring-web:jar:3.2.3.RELEASE:compile (version managed from 3.0.7.RELEASE) 
[INFO] | \- org.springframework:spring-tx:jar:3.2.3.RELEASE:compile (version managed from 3.0.7.RELEASE) 

सूचना कैसे spring-asm भी, अब और शामिल नहीं है नई spring-aop के बाद से यह आवश्यकता नहीं है।

यह ऊपर दिए गए उत्तर में बहिष्करण की तुलना में आपके वसंत संस्करणों का प्रबंधन करने का एक क्लीनर तरीका है, क्योंकि यह किसी भी अन्य तृतीय पक्ष निर्भरताओं पर लागू होगा जो आप संदर्भ संदर्भ स्प्रिंग जोड़ सकते हैं।

0

pom.xml में निम्नलिखित निर्भरता जोड़ें:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
    <version>3.2.4.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-asm</artifactId> 
    <version>3.1.4.RELEASE</version> 
</dependency> 
संबंधित मुद्दे