我不喜欢Java存在的构建工具。所以我写了自己的。但是还有一个功能还没有;将更改自动导入IntelliJ项目。
我无法找到有关如何执行此操作的信息。关于如何编写IntelliJ插件的教程会给我带来大量无用的东西(例如创建UI)。
我知道这不是你典型的stackoverflow我有一个bug问题,但我很迷失,并且可以在正确的方向上使用指针。
答案 0 :(得分:0)
如果您需要知道何时更改了certian文件并从该文件自动导入信息,您可以使用VirtualFileManager.addVirtualFileListener()。 甚至使用fileDocumentManagerListener扩展点。无论什么更适合您的需求。
答案 1 :(得分:0)
到目前为止,我已经设法创建了一个简单的IntelliJ插件。开始很简单。 IntelliJ内置了插件项目框架.File-> new Project就足够了。
从那里我创建了一个实现ModuleComponent的类。这里的文档(https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_components.html)表示无论何时打开模块都会加载它。
为了让它工作,我不得不在plugin.xml中添加这些东西:
<module-components>
<component>
<interface-class>packagename.ClassName</interface-class>
<implementation-class>packagename.ClassName</implementation-class>
</component>
</module-components>
文档设法隐藏了下一步,但它可以给ModuleComponent一个像这样的构造函数:
public ClassName(final Module module) {}
这应该给我一个Module类的实例来读取和修改我需要的方式的值。 事实证明,IntelliJ很难弄清楚如何做事。例如,没有Javadoc。人们似乎建议阅读源代码。怪异..
快速浏览一下Module的方法对我来说并没有多大帮助。 Google让我知道,为了对模块进行更改,我可以执行以下操作:
ModuleRootManager.getInstance(module).getModifiableModel()
我可以在这个模型上调用几个方法,最后在我完成持久化更改时调用.commit()。 ModifiableRootModel有两种看起来非常有用的方法:
ModifiableRootModel.addModuleOrderEntry()
ModifiableRootModel.addLibraryEntry()
第一个采用Module实例。我希望如果我添加正确的模块,这将允许我很好,添加模块:)。我可以在这里想到两种情况。首先,模块已经加载到项目中,在这种情况下,我需要找到它并添加它。第二,模块尚未加载,因此我需要告诉IntelliJ加载它并将其添加到项目中。
第二种方法采用Library实例。只是新的图书馆()不起作用,谷歌在这里不是很有帮助。从我的构建文件中,我可以提取groupId:artifactId:version:scope值。因此,我需要一种方法将这些字符串转换为有效的库。
到目前为止,我已经走了多远。目前的问题是: