【问题标题】:Is there a way to output all classes available for import with gradle/maven有没有办法用 gradle/maven 输出所有可用于导入的类
【发布时间】:2023-03-31 02:01:01
【问题描述】:

我是 vim/neovim 用户,我想知道是否可以简化将导入添加到文件 java 的任务,而无需使用 intellij 或语言服务器。 所以我的想法是获取所有类的列表,然后以某种方式使用此列表插入导入语句。

为了说明我的想法。假设我的光标在这里。

var a = List.of(1);
        ^

我正在调用一些 vimscript,它为我提供了可过滤的导入列表,其中包括 List

也许类似于 hoogle?

【问题讨论】:

  • 抱歉,使用 vim 作为 Java 的 IDE 没有意义。使用真正的 IDE,如 Eclipse、IDEA IntelliJ 或 Netbeans,它提供的不仅仅是添加导入等......
  • 这与将 vim 用于任何其他语言一样有意义。特别是自从语言服务器出现以来。例如,所有 IDE 的界面都非常臃肿,并且不提供有效的窗口导航。 Intellij 有不错的 vim 模拟器,但它缺少一些重要功能,例如评论、交换和其他插件提供的功能。
  • 也许它对 Java 以外的其他语言有意义,但我有疑问,因为我曾使用过 Go、Ruby 等多种语言,并且 IDE 帮助并使许多事情变得快速和简单。 Windows 导航是您需要在 IDE 中学习的部分(学习键盘快捷键),也许您需要映射一些不同的击键来满足您自己的需求。您对评论交流的意思是什么功能以及您在谈论哪些其他插件?除了您的导入:IntelliJ 您只需在 Eclipse Shift-Command-O 等中使用 Ctrl-Alt-O(用于导入)?

标签: java maven gradle


【解决方案1】:

您可以编写一个 gradle 任务来将所有类输出到一个文件中。例如

task dumpClasses {
    inputs.files configurations.compile
    outputs.file "$buildDir/dumpClasses.txt"
    doLast {
        file("$buildDir/dumpClasses.txt").withWriter { writer ->
            configurations.compile.each { file ->
                FileTree tree = file.name.endsWith('.jar')
                   ? zipTree(file)
                   : (file.directory ? fileTree(file) : null)
                if (tree) {
                    tree.matching { include '**/*.class' }.each {
                        writer.println(it.name)
                    }
                } 
            }
        } 
    } 
} 

【讨论】:

  • 可以修改输出到stdout吗?
  • 第二个想法它不会显示在此类中定义的任何函数,所以它不是很有帮助。不过还是谢谢。
  • 哎呀!您的“所以它不是很有帮助”的评论和反对票几乎同时发生,所以是的,我认为是您...... appoligies。堆栈溢出不会让我们知道谁投了反对票
  • 没问题。不过,downvote 很奇怪。你准确地回答了我的问题!
  • 感谢您的回答。它帮助我弄清楚了一些事情。如果类需要整个路径,请使用:writer.println(it.path)
【解决方案2】:

看看vim-javacomplete2。它的功能之一是自动添加导入,包括static 导入和嵌套类的导入。它使用 Maven、Gradle 或 Eclipse 的 .classpath 文件自动搜索类文件。

【讨论】:

  • 看看 eclipse 中的 java 语言服务器 =) 我知道其他方法可以做到这一点,正如我所说的。我正在寻找类似于 hoogle for java 的东西。
  • 天哪,为什么投反对票?问题是“不诉诸语言服务器”,我提供了一个不涉及语言服务器的解决方案。该问题被标记为“gradle”、“maven”,我的解决方案适用于两者。
  • 您还应该更具体地了解“Hoogle for Java”的含义。您想搜索的不仅仅是项目的类路径吗?您想要近似解决方案(例如名称部分匹配)吗?您想要基于预期类型(而不是函数名称)的解决方案吗?
  • 类路径,一个名字就可以了。如果连最基本的事情都达不到,澄清也没有意义。
【解决方案3】:

如今,Java IDE 如此智能,以至于使用其他任何东西基本上都是在浪费您的时间(因此间接地浪费了金钱)。

这与使用记事本代替 Word 直到(或使用 vim 代替 LibreOffice)非常相似,直到您想要进行语法检查和嵌入图形等。当然,如果有足够的时间或肘部油脂,您可以这样做,但是为什么要重新发明所有车轮在路上。早在 2000 年代初期,Emacs 就有一个非常可用的 Java 开发环境,当它出现时几乎立即输给了 Eclipse。

例如,IntelliJ 现在知道如何在方法调用链中显示当前点的类型(在流中非常频繁),简而言之,在阅读代码时非常很有帮助之后。

因此,要获得所需的东西,无论如何您都需要一个可以理解您的代码的 IDE。如果您想使用 vim 的全部功能,是否考虑过告诉 IDE 在您的源代码上启动 vim? IntelliJ 可以在不被告知的情况下获取文件系统中的更改。

【讨论】:

  • 猜猜看,您展示的示例是我在 intellij 工作时不喜欢的事情之一。而且我已经提到过臃肿的界面和愚蠢地使用选项卡来表示打开的文件。语言服务器为我提供了所需的所有智能。当 intellij 能够将 null 的用法重构为 Optional 时,我会考虑将其称为智能。现在它所做的一切都是非常基础的。
  • 如果您发现 IDEA 非常基础,我真的建议您根据自己的意愿在 IDEA IntelliJ 上打开问题,这将真正改善您自己和他人对 IDEA 的使用......
  • @user1685095 我可能低估了语言服务器的力量。就我个人而言,我非常喜欢 vim,但在我看来,它不是适合这项工作的工具(正如您已经发现的那样)。我同意告诉 JetBrains 你想要什么。据我了解,他们完全意识到开发人员的需求是销售新许可证的原因,而且您的需求似乎尚未得到满足。也就是说,我仍然认为你很难赶上其他人免费获得的东西,但如果你能让它发挥作用,那将是一个有趣的选择。就我个人而言,我会对它的功能非常感兴趣。
  • 他们花了 5 年左右的时间来增加在 VCS 中上演单个大块的能力。我不会费心打开一个问题。使用语言服务器,我已经能够自动添加导入。如果可能的话,我只是想有其他选择。好像不是java。
  • 顺便说一句,我可以分阶段进行单独的行,甚至可以长时间在 vim 中编辑索引。你认为他们需要多少时间来理解如果我调用 diff 那么它应该向我显示我正在寻找的代码的同一部分而不是滚动到开头?名单还在继续。
猜你喜欢
  • 2020-03-28
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多