【转载】关于aspectJ无法被eclipse加入类路径的分析和解决

   在配置jdbc声明式事务时,运行后出现了ClassNotFound,原因是缺少org.aspectj.weaver包,在maven里加入以下依赖
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.6.12</version>
		</dependency>

 在依赖项中依然没有找到org.aspectj.weaver包,也就是没有下载成功


找到了如下文章解决问题:

事情缘由: 
    在maven工程的pom文件中加入org.aspectj:aspectjrt:jar:1.6.6 和 org.aspectj:aspectjweaver:jar:1.6.6 依赖,虽然通过mvn dependency:tree来分析依赖发现看这个包虽然被依赖进去了,但始终在eclipse里的referenced libraries里找不到这个包;查看.classpath文件,发现eclipse的确没有这个包的依赖路径信息,也就是说,aspectjrt包根本没有加到eclipse类路径中,因而无法引入相关类。 

出现原因: 
    在maven-eclipse-plugin插件非2.5.1的版本中,EclipseClasspathWriter忽略了aspectj libraries,不将这个依赖加入classpath,是这么写的: 
     // Skip aspectj libraries since they are in the container. 
     if ( ( config.getAjdtVersion() != 0 ) && dep.getArtifactId().toLowerCase().indexOf( “aspectj” ) >= 0 ) 
     { 
     return; 
     } 
    具体可参见:http://maven.apache.org/plugins/maven-eclipse-plugin/xref/org/apache/maven/plugin/eclipse/writers/EclipseClasspathWriter.html line529 
    在默认情况下,maven-eclipse-plugin插件假定你已经使用了AJDT插件,并且已经使用了aspectj依赖,因而maven- eclipse-plugin忽略了没有安装AJDT插件的情况而导致aspectj不可用的情况,导致了这个问题的出现。 
    AJDT(AspectJ Development Tools for Eclipse),是将 AspectJ 与 Eclipse 平台紧密集成在一起,并为 AspectJ 开发人员提供更多开发人员使用 Eclipse 时可以得到的高级工具支持。 

解决之道: 
1,手动修改classpath文件,加入路径的依赖。这个方法能解决问题,但比较土。 
2,手动指定pom文件里maven-eclipse-plugin版本为2.5.1; 
3,在pom文件里对插件加入如下配置: 
       <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-eclipse-plugin</artifactId> 
         <configuration> 
             <ajdtVersion>none</ajdtVersion> 
         </configuration> 
        </plugin> 
通过none的none版本来禁用AJDT,这样就会引入aspectJ依赖,这种应该是比较好的解决方案。 

参看资料: 

http://jira.codehaus.org/browse/MECLIPSE-584 

http://jira.codehaus.org/browse/MECLIPSE-59


来自:http://dongwei.iteye.com/blog/795416

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值