事情缘由:
在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-594
分享到:
相关推荐
Eclipse AspectJ: Aspect Oriented Programming with AspectJ and the Eclipse ADT
AJDT使得在Eclipse中编写、调试和分析AspectJ代码变得更为简单和直观。** **安装与配置AJDT插件:** 1. 首先,用户需要确保已经安装了Eclipse IDE。然后可以通过Eclipse的“Help” -> “Install New Software”菜单...
Eclipse Aspectj: Aspect Oriented Programming with AspectJ and the Eclipse AspectJ Development Tools
AspectJ Eclipse插件(ajdt)则是Eclipse集成开发环境(IDE)中的一个重要组件,它为开发者提供了在Eclipse中编写、调试和应用AspectJ代码的支持。本文将详细介绍ajdt2.2.3版本的下载、安装和使用过程。 首先,ajdt...
This book is an introduction to AOP with AspectJ and Eclipse and shows how to create a productive AO development environment by using the AspectJ Development Tools for Eclipse (AJDT). Tools have an ...
AspectJ和AspectJ Weaver是两个在Java开发中用于实现面向切面编程(AOP)的重要工具。面向切面编程是一种编程范式,它旨在提高代码的模块化,通过将关注点分离,使得业务逻辑与系统服务(如日志、事务管理等)能够更好...
然而,尽管aspectj纳入在eclipse这个日益流行的java开源ide之内,但是找到一种实用、非理论的方式来学习这种语言及其他aop工具和技术已经成为一个实际的问题。 迄今为止,本书提供了实用的解决方案以及大量的代码...
【工具】AspectJ提供了一整套工具集,包括编译器ajc(AspectJ Compiler)和织入工具AJDT(AspectJ Development Tools),使得在Eclipse等IDE中无缝集成AOP变得可能。ajc可以将切面编译到字节码中,而AJDT则提供了...
- **静态代理**:在程序运行前代理类就已经被定义好,并且代理类与委托类之间的关系在编译期间就已经固定下来。这意味着我们需要为每一个需要代理的方法都实现一个代理类,这可能导致大量的重复代码。 - **动态...
编译时织入需要使用ajc编译源代码,运行时织入则只需将AspectJ库和切面类加入到应用的类路径中。 AspectJ的引入极大地增强了Spring的AOP能力,使得我们可以更优雅地处理横切关注点,提高代码的可读性和可维护性。...
此外,理解如何在IDE如Eclipse或IntelliJ IDEA中配置AspectJ支持,以便获得更好的开发体验和实时反馈。 总的来说,AspectJ 1.9.6.jar作为Java AOP的重要实现,为开发者提供了一种优雅的方式来管理横切关注点,提高...
AspectJ、AspectJRT 和 AspectWeaver 是三个与面向切面编程(AOP)相关的关键组件,它们在Spring框架中有着重要应用,尤其对于初学者来说,理解这些概念是掌握Spring AOP的基础。 AspectJ 是一个强大的Java语言的...
这包括使用AspectJ编译器(ajc)和加载器(AspectJ Runtime)来实现AOP的功能,以及如何在IDE如Eclipse中配置和调试AspectJ代码。 “工具”标签则可能意味着书中讨论了AspectJ与其他开发工具的结合,如构建工具...
`aspectj-1.6.9.jar` 是AspectJ框架的一个特定版本,即1.6.9版的库文件,它包含了运行时和编译时支持AOP所需要的所有类和资源。 在AOP中,"切面"是关注点的模块化,这些关注点通常涉及跨越多个对象的横切行为。...
只需要在Java启动参数中加入`-javaagent:/path/to/aspectjweaver.jar`,并确保`aspectjweaver.jar`在类路径中,AspectJ会在应用程序启动时自动处理切面。 7. **Eclipse与Maven集成** 如果你在Eclipse中使用Maven...
3. **切点表达式**: 切点表达式用于指定哪些方法、构造器或类的执行应该被拦截。它们通常基于方法签名、注解、执行类型等因素。例如,`execution(* com.example.service.*.*(..))`表示匹配`com.example.service`包下...
在 Android Studio 中使用 AspectJ 可以实现多种功能,例如分析用户交互行为、分析 APP 性能、提供额外的分析日志等。 一、为什么要使用 AspectJ? 使用 AspectJ 可以带来多种好处,例如: 1. 分析用户交互行为:...
其中,类文件可能包含了切面和被通知的对象,配置文件可能包含了Spring和AspectJ的配置,测试用例则用来验证AOP功能是否正常工作。 通过这个实验,你可以深入理解Spring和AspectJ如何协同工作,提升代码的可维护性...
例如,可以使用`@Aspect`注解声明一个切面类,使用`@Before`、`@After`、`@Around`等注解来定义通知(advice),这些通知会在特定的连接点(join point)如方法调用、构造器执行等时机被触发。 2. `license.txt`:...