java - 在我的插件中添加特定的代码路径以支持多个 IntelliJ 版本

标签 java intellij-idea intellij-14 intellij-plugin intellij-15

IntelliJ 15 在 SimpleJavaParameters 类中引入了一个名为 setUseClasspathJar 的新方法。

如果用户运行 IntelliJ 15,我希望我的插件设置调用此方法。如果用户运行 IntelliJ 14.1,该方法甚至不可用(它不会编译)。

如何编写我的插件,以便在出现这样的签名更改时它会根据版本执行不同的操作?

最佳答案

您只能在 IntelliJ IDEA 15 上进行编译并使用 if 语句保护调用。例如:

final BuildNumber build = ApplicationInfo.getInstance().getBuild();
if (build.getBaselineVersion() >= 143) {
    // call setUseClasspathJar() here
}

不同基于 IntelliJ 平台的产品的内部版本号范围可用 here .

另一种选择是使用反射来调用该方法(如果可用)。这更加冗长,但是 com.intellij.util.ReflectionUtil 可以使其变得更简单:

final Method method = 
    ReflectionUtil.getDeclaredMethod(SimpleJavaParameters.class, 
                                     "setUseClasspathJar", boolean.class);
if (method != null) {
  try {
    method.invoke(parameters, true);
  }
  catch (IllegalAccessException e1) {
    throw new RuntimeException(e1);
  }
  catch (InvocationTargetException e1) {
    throw new RuntimeException(e1);
  }
}

关于java - 在我的插件中添加特定的代码路径以支持多个 IntelliJ 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34347168/

相关文章:

c++ - 如何在 IntelliJ IDEA 中使用 C++?

java - 只是想知道 System.out.println()

java - 在客户端映射 Web 服务端点的最佳实践

mysql - 服务器返回无效时区。转到“高级”选项卡并手动设置 servertimezone 属性

intellij-idea - 2016.1 中控制从 Gradle sourceSets 自动创建 IDEA 模块?

java - Intellij tomcat 服务器控制台编码问题与 log4j 的编码 = UTF-8?

java - 使用 linux-redhat 的 java 上的内存不足异常

java - 如何使用 JUNG 对顶点和边进行着色和造型

java - 如何在 IntelliJ IDEA 中创建复合操作的热键?

java - 无法运行程序,错误=7,参数列表太长