2014-09-24 108 views
0

我很抱歉如果这个问题有一个答案已经在某处,我环顾四周,没有看到任何我可以使用我的优势。从外部项目使用弹簧注入方面类

java.lang.ClassNotFoundException: com.sample.aspects.SomeAspect 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206) 
at org.springframework.util.ClassUtils.forName(ClassUtils.java:246) 
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:395) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1346) 
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1317) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:623) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:592) 
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1394) 
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:957) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:705) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) 
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672) 
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543) 
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484) 
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161) 
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981) 
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4364) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
at org.apache.catalina.core.StandardService.start(StandardService.java:516) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:578) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:622) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 

下面是我使用

<bean id="someAspect" 
    class="com.sample.aspects.SomeAspect" /> 

<aop:aspectj-autoproxy proxy-target-class="true" /> 

的servlet.xml文件中的com.sample.aspects.SomeAspect是:起动了Eclipse中我的Tomcat服务器,我得到这个例外在使用eclipse classpath和gradle导入的外部项目中的类。我假设我只是在我的类路径上做了一些错误,并告诉Spring如何初始化我的方面,但是我如何正确地做到这一点有点失落。有什么建议么?我真的希望保持Web应用程序外部的方面,但我想知道Spring AOP是否可能。

如果有帮助,这就是我与gradle这个项目

dependencies{ 
... 
    compile project(':sample-projectwithaspectsclasses') 
} 

com.sample.aspects.SomeAspect的代码是在样品projectwithaspectsclasses

+0

如果您仍然对答案感兴趣,可以考虑向社区提供一个[SSCCE](http://sscce.org/),以便他们能够重现您的问题。 – kriegaex 2014-10-02 09:50:37

+0

好主意。我会看到关于将其放在一起并将其放到github上。 – 2014-10-02 10:14:40

回答

0

你有你的外部项目只定义类路径依赖这就是为什么你的编译没有失败,但你需要在运行时这个文件,你可以手动添加这个jar到你的web项目的lib文件夹中,或者我认为你可以在启动配置中使用eclipse来执行此操作,并添加运行时依赖项。

+0

这可能会起作用 - 但是当我准备将我的项目部署到外部tomcat服务器并且无法控制运行时依赖关系时会发生什么? – 2014-09-25 15:55:47

+0

在pom中定义了依赖关系的范围,如运行时 varun 2014-09-25 16:31:42

+0

我仍然无法确定是什么导致了这种情况。但是,如果我生成一个.jar,然后将其添加到我的类路径,我没有任何问题。我只看到这个,如果我的.war项目包括日食中的.jar保护。 – 2014-10-01 22:59:51