3

从这里安装了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提出了一个解决方案,但这是针对不同的 plugin

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

[更新]
上述方法无效。

你们中的任何 Eclipse 大师都知道如何破解它吗?

[更新]
我自己破解了。

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

4

2 回答 2

3

终于自己想通了!

(我应该让它在我之前的尝试中正常工作,但由于custompmd.jarANT 任务失败导致陈旧,当时它没有工作)。

一步步:

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

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

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

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

您可以为标题选择自己的值Bundle-NameBundle-SymbolicNameBundle-Version. 标头的值Bundle-ManifestVersion必须是2Fragment-Host必须包含主机包的符号名称ch.acanda.eclipse.pmd.core以及您已安装的 eclipse-pmd 版本(可选)。Bundle-RequiredExecutionEnvironment指定插件片段所需的最小执行环境。它的价值在于JavaSE-1.7你是用 Java 7 编译它还是JavaSE-1.8使用 Java 8。

更改 jar 的清单后,您可以将其复制到dropinseclipse 安装的文件夹中。您的插件片段在您启动 Eclipse 时安装。

于 2015-04-05T19:38:47.487 回答