如何将自定义 JAR 添加到 "eclipse-pmd" 插件?

How to Add custom JAR to the "eclipse-pmd" plugin?

从 [=20 安装了 Eclipse PMD 插件(由 Philip Graf 编写) =].我试图关联一个自定义 PMD 规则 类 JAR,但找不到它的规定。此 JAR 包含自定义规则 类(间接 extends AbstractJavaRule)。

那么有没有办法配置 eclipse-pmd 插件来接受这个自定义 JAR?

我的 custompmd.jar 有这样的结构:

custompmd.jar
└─com/pmd/custom
             └─AvoidHardcodingRule.class
             └─AvoidCatchWithoutLogErrorRule.class
             └─etc...

简单地把它放在 plugins 目录中没有帮助。 SO question suggests a solution but that's for a different plugin 之一。

[更新]
我目前正在考虑编辑 eclipse\plugins\ch.acanda.eclipse.pmd.BLAHBLAH.jar 之一,将 custompmd.jar 添加到 lib 文件夹中,并通过在 Bundle 中附加 JAR 信息来更新 META-INF\MANIFEST.MF 文件-ClassPath: 部分。这是正确的做法吗,因为修补插件 JAR 对我来说似乎很难看?

[更新]
上面的方法没有用。

你们 Eclipse 专家中有谁知道如何破解它吗?

[更新]
我自己破解的

[更新]
尽管下面的解决方案有效,但它是维护的噩梦。每当我更改 custompmd.jar 时,我每次都必须更新插件 JAR,这很乏味。有没有干净整洁的解决方案?

终于自己想出来了!

(我应该在我之前的尝试中让它工作,但由于 ANT 任务失败导致 custompmd.jar 过时,所以那次它没有工作)。

一步一步:

  1. ch.acanda.eclipse.pmd.core_<blahblah#>.jarplugins 目录复制到临时目录。
  2. 使用 7-Zip 软件打开临时目录中的 JAR
  3. custompmd.jar 添加到 lib 目录。
  4. 编辑 META-INF/MANIFEST.MF 文件,在 Bundle-Classpath:
  5. 末尾附加此字符串 ,lib/custompmd.jar
  6. 关闭 7-Zip(并接受“保存”对话框)。
  7. 备份现有 /plugins/ch.acanda.eclipse.pmd.core_<blahblah#>.jar 并将其替换为这个临时 jar。
  8. 退出 Eclipse 并重新启动

如果将 jar 作为 Eclipse plug-in 片段添加到 Eclipse 安装中,则可以使用自定义规则 类。 plug-in 片段的宿主必须是 ch.acanda.eclipse.pmd.core.

要将 jar 转换为 plug-in 片段,您必须修改文件 MANIFEST.MF 文件并添加一些清单 header。以下是 Eclipse plug-in 片段的完整清单:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Custom PMD Rules
Bundle-SymbolicName: org.example.customrules
Bundle-Version: 1.0.0
Fragment-Host: ch.acanda.eclipse.pmd.core;bundle-version="1.4.1"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7

您可以为 header、Bundle-NameBundle-SymbolicNameBundle-Version 选择自己的值。 header Bundle-ManifestVersion 的值必须是 2Fragment-Host 必须包含主机包的符号名称 ch.acanda.eclipse.pmd.core 和可选的 eclipse-pmd 您已安装的版本。 Bundle-RequiredExecutionEnvironment 指定 plug-in 片段所需的最低执行环境。如果你用 Java 7 编译它,它的值是 JavaSE-1.7JavaSE-1.8 如果你使用 Java 8.

更改 jar 的清单后,您可以将其复制到 eclipse 安装的文件夹 dropins 中。您的 plug-in 片段会在您启动 Eclipse 时安装。