【问题标题】:Include AspectJ support to VS Code在 VS Code 中包含 AspectJ 支持
【发布时间】:2018-04-19 18:25:22
【问题描述】:

在我当前的项目中,我正在使用Java、Spring Boot 和.aj 文件。但是,使用 AspectJ 的主要问题是支持此功能的 IDE 并不多。

Eclipse(我也认为 netbeans)支持 AspectJ 语言,因为我过去曾使用过它。但是,在过去几年中,我一直使用 IntelliJ 和 Visual Studio Code IDE,我真的不想回到 Eclipse(或 Netbeans)。 :)

另外,我知道IntelliJ 的终极版支持AspectJ。问题是您必须拥有 IntelliJ 许可证才能使用它。

https://www.jetbrains.com/help/idea/enabling-aspectj-support-plugins.html

我开始为 Visual Studio Code 创建一个新的language server 来管理.aj 文件。我正在遵循本指南。

https://code.visualstudio.com/docs/extensions/example-language-server

.aj 文件现在颜色正确并显示有效语法!

但是,我在 Java 代码中遇到了错误。检查有关 AspectJ 描述的架构:

如您所见,我有一个名为Point 的.java 文件,我希望将一些方法划分到一些.aj 文件中。项目编译完成后,我将只有一个 Point.class,其中包含 clone()、compareTo() 等方法。

另外,另一个可能的用途是,如果我的.java 类实现了某个接口,我就可以实现.aj 文件中的方法。

问题:我无法看到我的 Java 项目没有错误,因为 .java 文件和 .aj 文件没有“同步”,所以 .java 类说尽管在.aj 文件中定义了一些方法,但需要实现一些方法。

有人可以帮助我提供有关语言服务器开发的提示吗?

问候,

【问题讨论】:

    标签: visual-studio-code aspectj vscode-extensions aspectj-maven-plugin


    【解决方案1】:

    我无法在 VS Code AspectJ 集成方面为您提供帮助,但我可以推荐一个解决您的问题的方法。如果我的理解是正确的,你会得到错误,因为你的方面通过类型间声明声明的方法对你的 java 代码不可见。

    在这种情况下,您可能会尝试使用声明和实现这些方法的默认方法创建 Java 8 接口。我会尝试完全摆脱这些方面,只使用带有默认方法的接口,但是如果 - 由于某种我不知道的原因 - 你真的需要使用方面来实现这些方法,你仍然可以将你的默认方法留空并移动落实到各个方面。这样您就不再需要使用类型间声明,因此 VS Code 集成可能会更好。

    【讨论】:

    • 首先非常感谢您的回复。我是 Spring Roo 项目的负责人之一。此工具允许您使用命令生成 Spring Boot 应用程序。生成的项目使用 .aj 文件来包含该工具维护的生成代码。如果代码在 .java 文件中,则意味着您已经自定义了该代码,Spring Roo 不应管理。这在过去是惊人的,但似乎 AspectJ 并不是真正的实际......我想过使用 Java 8 Interfaces 来代替过去的 AspectJ。也许我现在有这个问题就试试吧!谢谢!!
    • 尽管我在整个职业生涯中在许多不同的项目中使用过 AspectJ,但我也会非常谨慎地将其作为硬依赖项引入任何新项目中,除非有非常重要的原因 去做。不幸的是,AspectJ 在支持最新的语言特性和工具支持方面往往落后于 Java。随着新的 Java 发布周期缩短到 6 个月,这将成为一个越来越大的问题。如果 Roo 可以仅使用本机 Java 语言功能做与今天相同的事情,那将是非常值得考虑的未来道路。
    猜你喜欢
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2021-10-13
    相关资源
    最近更新 更多