`

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

阅读更多
事情缘由:
    在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 (part 2/2)

    Eclipse AspectJ: Aspect Oriented Programming with AspectJ and the Eclipse ADT

    AJDT-Aspectj Development Tools eclipse插件

    AJDT使得在Eclipse中编写、调试和分析AspectJ代码变得更为简单和直观。** **安装与配置AJDT插件:** 1. 首先,用户需要确保已经安装了Eclipse IDE。然后可以通过Eclipse的“Help” -&gt; “Install New Software”菜单...

    Eclipse AspectJ: Aspect Oriented Programming with AspectJ and the Eclipse ADT (part 1/2)

    Eclipse Aspectj: Aspect Oriented Programming with AspectJ and the Eclipse AspectJ Development Tools

    ajdt2.2.3 for eclipse 4.3 (AspectJ Eclipse 插件)

    AspectJ Eclipse插件(ajdt)则是Eclipse集成开发环境(IDE)中的一个重要组件,它为开发者提供了在Eclipse中编写、调试和应用AspectJ代码的支持。本文将详细介绍ajdt2.2.3版本的下载、安装和使用过程。 首先,ajdt...

    Eclipse AspectJ: Aspect-Oriented Programming

    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 Cookbook中文版

    然而,尽管aspectj纳入在eclipse这个日益流行的java开源ide之内,但是找到一种实用、非理论的方式来学习这种语言及其他aop工具和技术已经成为一个实际的问题。  迄今为止,本书提供了实用的解决方案以及大量的代码...

    aspectJ

    【工具】AspectJ提供了一整套工具集,包括编译器ajc(AspectJ Compiler)和织入工具AJDT(AspectJ Development Tools),使得在Eclipse等IDE中无缝集成AOP变得可能。ajc可以将切面编译到字节码中,而AJDT则提供了...

    aspectj-1.9.6.jar

    此外,理解如何在IDE如Eclipse或IntelliJ IDEA中配置AspectJ支持,以便获得更好的开发体验和实时反馈。 总的来说,AspectJ 1.9.6.jar作为Java AOP的重要实现,为开发者提供了一种优雅的方式来管理横切关注点,提高...

    aspectj jar

    编译时织入需要使用ajc编译源代码,运行时织入则只需将AspectJ库和切面类加入到应用的类路径中。 AspectJ的引入极大地增强了Spring的AOP能力,使得我们可以更优雅地处理横切关注点,提高代码的可读性和可维护性。...

    book :aspectj in action

    这包括使用AspectJ编译器(ajc)和加载器(AspectJ Runtime)来实现AOP的功能,以及如何在IDE如Eclipse中配置和调试AspectJ代码。 “工具”标签则可能意味着书中讨论了AspectJ与其他开发工具的结合,如构建工具...

    aspectj-1.6.9.jar

    `aspectj-1.6.9.jar` 是AspectJ框架的一个特定版本,即1.6.9版的库文件,它包含了运行时和编译时支持AOP所需要的所有类和资源。 在AOP中,"切面"是关注点的模块化,这些关注点通常涉及跨越多个对象的横切行为。...

    aspectj环境安装

    只需要在Java启动参数中加入`-javaagent:/path/to/aspectjweaver.jar`,并确保`aspectjweaver.jar`在类路径中,AspectJ会在应用程序启动时自动处理切面。 7. **Eclipse与Maven集成** 如果你在Eclipse中使用Maven...

    Aspectj

    3. **切点表达式**: 切点表达式用于指定哪些方法、构造器或类的执行应该被拦截。它们通常基于方法签名、注解、执行类型等因素。例如,`execution(* com.example.service.*.*(..))`表示匹配`com.example.service`包下...

    Android Studio AspectJ技术1

    在 Android Studio 中使用 AspectJ 可以实现多种功能,例如分析用户交互行为、分析 APP 性能、提供额外的分析日志等。 一、为什么要使用 AspectJ? 使用 AspectJ 可以带来多种好处,例如: 1. 分析用户交互行为:...

    spring和aspectj的aop实验

    其中,类文件可能包含了切面和被通知的对象,配置文件可能包含了Spring和AspectJ的配置,测试用例则用来验证AOP功能是否正常工作。 通过这个实验,你可以深入理解Spring和AspectJ如何协同工作,提升代码的可维护性...

    aspectj 1.6.8 jar包

    例如,可以使用`@Aspect`注解声明一个切面类,使用`@Before`、`@After`、`@Around`等注解来定义通知(advice),这些通知会在特定的连接点(join point)如方法调用、构造器执行等时机被触发。 2. `license.txt`:...

    AspectJ面向切面的例子

    通过分析和学习这个"Spacewar Example",开发者不仅可以了解AspectJ的基本语法和特性,还能掌握如何在实际项目中应用面向切面编程,提升代码的组织结构和可维护性。同时,对于游戏开发来说,这样的例子也是一个很好...

    精通AspectJ_源代码

    AspectJ提供了一款编译器和一个类装载器,以支持这三种类型的织入。 5. **引入(Introduction)**:引入允许切面为已有类添加新的方法或属性,而无需修改原始类的源代码。 6. **声明式通知(Declaring Advice)**...

    aspectj.weaver 和 aspectj.tools 类包

    aspectj.weaver 和 aspectj.tools 类包 Spring 4.X 使用@AspectJ和Schema 报错,添加aspectj.weaver 和 aspectj.tools 类包的依赖。

Global site tag (gtag.js) - Google Analytics