【问题标题】:Java preprocessing support in Intellij IDEAIntellij IDEA 中的 Java 预处理支持
【发布时间】:2010-12-29 18:44:06
【问题描述】:

有人知道 Intellij IDEA 中的 Java 预处理支持吗?可能有一些 3rd 方插件?

举个例子:这是一段为 Netbeans 编写的 Java 代码(支持预处理):

//#if JSR82
//# import javax.bluetooth.*;
//#endif

Netbeans 内置预处理器根据定义的预处理器键解析那些 //# 键和 cmets 或 uncmets 代码。

我希望在 Intellij IDEA 中有类似的东西。

提前感谢

【问题讨论】:

  • 预处理是什么意思?
  • 像 C/C++ 中的 #ifdef blah-blah 一样
  • 您是否尝试为同一个库生成两个不同的版本?支持/需要 JSF82 的版本和不支持/需要 JSF82 的版本。
  • @Vladimir Ivanov:通过“预处理”,他的意思类似于en.wikipedia.org/wiki/Preprocessor 这在移动世界中非常很常​​见,显然 OP 正在努力:这是相当通常会生成数十个(如果不是数百个)单个 Java 应用程序的不同构建。请参阅我的回答,诺基亚解释了如何为 J(2)ME 应用程序使用预处理器。
  • @sblundy 或多或少,方法很简单:1 个代码 - 几个 jars/libs 取决于设备/环境

标签: java ide preprocessor intellij-idea


【解决方案1】:

(这对于评论来说太长了,因此答案并不是真正的答案,而是更多的评论)。

我广泛使用 Java 预处理器和 IntelliJ IDEA。我不知道任何允许与预处理器一起工作的插件/附加组件(但那将是很棒)。

除此之外,当讨论Java和预处理器时,人们总是会指出“这样的东西不存在”

当然,其中有几个是存在的。例如,这里有一篇很酷的诺基亚(您可能听说过这家公司,他们生产一些 Java 手机)文章,名为:“使用预处理器指令进行 Java ME 移植”

真相是:Java 从未兑现了它的 WORA 承诺,尤其是在 J(2)ME 世界中。

http://wiki.forum.nokia.com/index.php/Java_ME_Porting_using_preprocessor_directives

使用自定义(可悲的是自定义)预处理器和代码生成器的另一个非常正当的理由可以在(优秀的)Trove API 源代码之类的东西中看到:基本上,这是避免对所有 Java 原语重复相同代码的唯一方法等。

我还听说有人想要生成“相同”.jar 的不同版本,而不是将所有代码放在生成的各种 .jar 中。当然,这可以通过一种“Java 友好的方式” 使用惊人的解决方法来完成......但是在这种情况下,一些预处理也可以节省一天的时间。

要点是:对于 Java 预处理器,有效案例。我倾向于喜欢诺基亚,因为它很难与之抗衡;)

【讨论】:

  • 没有为 IntelliJ 10.0.1 列出的诺基亚插件。如果有很大的市场,也许是时候有人写一个了。我想知道现在 iPhone、Android 和 Windows Mobile 似乎正在瓜分这个市场?我必须检查一些数据才能看到。
  • @duffymo:IntelliJ IDEA 中不需要诺基亚插件。诺基亚拥有它们(也称为诺基亚开发者平台)——只需将它们作为 JDK 导入——然后继续 :)
【解决方案2】:

您可能需要考虑为各种版本的库配置不同的artifacts,然后重组代码以隔离仅包含在相关工件中的子类/组件中的版本特定代码。这可能不切实际,尤其是在现有项目中,但比编写插件更容易。 Maven 通过分类器具有类似的功能。

【讨论】:

  • 是的——至少是建设性的方式——不像其他人那样完全不同意。我听说过这种方法,但在我看来它太学术了,离实际应用还很远。无论如何我的“+”
  • @barmaley - 我倾向于同意。它们只是在上一个版本中添加的,仍然需要完善。
【解决方案3】:

Java 程序员通常不会像 C/C++ 那样使用预处理器。已经开发了其他技术和系统,例如注释、代码生成等。也许如果您让我们知道您要解决什么问题,那么有人会知道一种 java 友好的方式来提供帮助。

编辑:我认为大家的共识是你正在考虑编写一个 IntelliJ 插件

【讨论】:

  • 不同意... Java 不支持预处理,但 IDE 支持... 例如Netbeans IDE 支持预处理
  • 查看 Sun 的此文档以了解原因:java.sun.com/docs/white/langenv/Simple.doc2.html
  • @barmaley 很有趣。然而,Java 中的文化对这种 Cisms 不屑一顾。我不应该对存在这样的事情感到惊讶,但是在我用 java 编码的这些年中,这是我第一次听说它们。很少有 Java 开发人员在使用它们。
  • @sblundy 可能很少,但我知道很多 Java 预处理方法的实现,并且我正在积极使用它
  • 那你为什么在这里问这个问题?也许你应该问 JetBrains 为什么他们不支持它,或者自己编写一个 IntelliJ 插件。
【解决方案4】:

这个问题已经过去了 11 年,似乎有 Manifold 预处理器,它通过插件与 Java 编译器和 IntelliJ 集成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 2012-09-13
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多