Java 如何将Eclipse AspectJ项目迁移到IntelliJ IDEA

Java 如何将Eclipse AspectJ项目迁移到IntelliJ IDEA,java,eclipse,migration,aspectj,intellij-14,Java,Eclipse,Migration,Aspectj,Intellij 14,在我的公司,我们目前正在为Java项目与Eclipse合作。 由于我和其他一些同事更愿意使用IntelliJ,我们在迁移项目时遇到了困难,未能让AspectJ正常工作 我们正在使用Java7,尽管项目是用Java6兼容编写的。 在试用之前,我们更新了IDEA的最新版本(14.03)。 AspectJ版本是1.7.3 以下是我们采取的步骤: 将项目和依赖项导入IntelliJ 下载并安装AspectJ 在设置->Java编译器:使用ajc编译器下,委托给javac(aspectjtools.ja

在我的公司,我们目前正在为Java项目与Eclipse合作。 由于我和其他一些同事更愿意使用IntelliJ,我们在迁移项目时遇到了困难,未能让AspectJ正常工作

我们正在使用Java7,尽管项目是用Java6兼容编写的。 在试用之前,我们更新了IDEA的最新版本(14.03)。 AspectJ版本是1.7.3

以下是我们采取的步骤:

  • 将项目和依赖项导入IntelliJ
  • 下载并安装AspectJ
  • 在设置->Java编译器:使用ajc编译器下,委托给javac(aspectjtools.jar的路径正确,如测试按钮所示)
  • 将AspectJ库添加到全局库(aspectjrt.jar、aspectjtools.jar、aspectjweaver.jar和org.AspectJ.matcher.jar)
  • 为使用AspectJ的模块创建AspectJ方面,保留所有设置不变(未定义方面路径)
  • 将aspectjrt添加到项目库
  • 重建、制造等
LogContext只是一个空接口。需要附加记录器的类实现此接口

此方法注入AspectJ。不幸的是,我不是这方面的专家,实施它的人离开了公司,所以我被卡住了

为了检查一般功能,我们从头开始实施了一个小项目,只有三个类具有与上面相同的设置:

公共接口日志上下文{}
公共方面LogContextAspect{
public void LogContext.log(){
System.out.println(“Log!”);
}
}
public类方面实现了LogContext{
公共静态void main(字符串[]args){
方面=新方面();
aspect.log();
}
}
代码实际上执行得很好,并打印出“Log!”消息,但在make上我得到以下错误:

Error:(4,0)ajc:type方面必须实现继承的抽象方法LogContext.log()
我们错过了什么?为了迁移我们的项目,我们需要AspectJ来工作。 整个系统与Java 6兼容,但运行在Java 7上

谢谢你的帮助


Sascha

我尝试了IDEA 14.1.1 Ultimate,它运行得很好,尽管IDEA中的AspectJ支持通常不如Eclipse中的先进,尽管IDEA对我来说总体上是优越的。但是对于AspectJ,我经常使用Eclipse

我认为这将是一个好主意“mavenise”你的项目。这样,它将在Eclipse和IDEA中工作。在IDEA中,激活Maven更改的自动导入,让Maven成为领先的系统,IDEA只需遵循其设置即可。这对我的AspectJ项目很有效。但在本例中,我手动设置了您的示例(没有Maven)。经过几步之后,它现在可以工作了。一路上我没有看到你提到的错误消息

编辑:我使用AspectJ 1.8.5,如果这有什么不同的话


编辑2:我已经尝试将编译器和运行时手动设置为1.7.3,它仍然有效。

谢谢您的回复。就我个人而言,我不太喜欢maven,所以如果这取决于我(这并不完全是),我会选择gradle。但我认为你的观点仍然适用。此外,我们目前正在努力用Google Guice替换AspectJ,这样问题可能很快就会解决。:)如果Guice中可用的“AOP-lite”方法对您来说足够好,那么很好。对我来说,这不是一个选项,我喜欢AspectJ的全部功能。方法拦截对我来说绝对不够。我使用Guice的原因是依赖项注入。:-)