如何将自定义 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
过时,所以那次它没有工作)。
一步一步:
- 将
ch.acanda.eclipse.pmd.core_<blahblah#>.jar
从 plugins
目录复制到临时目录。
- 使用 7-Zip 软件打开临时目录中的 JAR
- 将
custompmd.jar
添加到 lib
目录。
- 编辑
META-INF/MANIFEST.MF
文件,在 Bundle-Classpath:
末尾附加此字符串 ,lib/custompmd.jar
- 关闭 7-Zip(并接受“保存”对话框)。
- 备份现有
/plugins/ch.acanda.eclipse.pmd.core_<blahblah#>.jar
并将其替换为这个临时 jar。
- 退出 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-Name
、Bundle-SymbolicName
和 Bundle-Version
选择自己的值。 header Bundle-ManifestVersion
的值必须是 2
。 Fragment-Host
必须包含主机包的符号名称 ch.acanda.eclipse.pmd.core
和可选的 eclipse-pmd 您已安装的版本。 Bundle-RequiredExecutionEnvironment
指定 plug-in 片段所需的最低执行环境。如果你用 Java 7 编译它,它的值是 JavaSE-1.7
或 JavaSE-1.8
如果你使用 Java 8.
更改 jar 的清单后,您可以将其复制到 eclipse 安装的文件夹 dropins
中。您的 plug-in 片段会在您启动 Eclipse 时安装。
从 [=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
过时,所以那次它没有工作)。
一步一步:
- 将
ch.acanda.eclipse.pmd.core_<blahblah#>.jar
从plugins
目录复制到临时目录。 - 使用 7-Zip 软件打开临时目录中的 JAR
- 将
custompmd.jar
添加到lib
目录。 - 编辑
META-INF/MANIFEST.MF
文件,在Bundle-Classpath:
末尾附加此字符串 - 关闭 7-Zip(并接受“保存”对话框)。
- 备份现有
/plugins/ch.acanda.eclipse.pmd.core_<blahblah#>.jar
并将其替换为这个临时 jar。 - 退出 Eclipse 并重新启动
,lib/custompmd.jar
如果将 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-Name
、Bundle-SymbolicName
和 Bundle-Version
选择自己的值。 header Bundle-ManifestVersion
的值必须是 2
。 Fragment-Host
必须包含主机包的符号名称 ch.acanda.eclipse.pmd.core
和可选的 eclipse-pmd 您已安装的版本。 Bundle-RequiredExecutionEnvironment
指定 plug-in 片段所需的最低执行环境。如果你用 Java 7 编译它,它的值是 JavaSE-1.7
或 JavaSE-1.8
如果你使用 Java 8.
更改 jar 的清单后,您可以将其复制到 eclipse 安装的文件夹 dropins
中。您的 plug-in 片段会在您启动 Eclipse 时安装。