2015-03-11 2 views
3

установлен плагин Затмение PMD (автор Philip Graf) от here. Я попытался связать пользовательские классы правил PMD JAR, но не смог найти для этого положения. Этот JAR содержит пользовательские классы правил (это косвенно extends AbstractJavaRule).Как добавить пользовательский JAR в плагин «eclipse-pmd»?

Итак, есть ли способ настроить плагин eclipse-pmd, чтобы принять этот пользовательский JAR?

Мой custompmd.jar имеет такую ​​структуру:

custompmd.jar
└─com/PMD/пользовательские
                          └─AvoidHardcodingRule.class
                          └─AvoidCatchWithoutLogErrorRule.class
                          └─etc ...

Просто положить его в plugins директории Ждут» t помочь. Один из SO question предлагает решение, но это для разныхplugin.

[UPDATE]
Сейчас я думаю о редактировании одного из eclipse\plugins\ch.acanda.eclipse.pmd.BLAHBLAH.jar, добавьте custompmd.jar в папку lib и обновление META-INF\MANIFEST.MF файла путем добавления информации JAR в Bundle-ClassPath: секции. Это правильная практика, поскольку исправление JAR плагина кажется мне уродливым?

[ДОПОЛНЕНО]
Вышеуказанный подход не работает.

Любой из вас, гуру Eclipse, знает, как его взломать?

[UPDATE]
Я сам его взломал.

[UPDATE]
Хотя ниже решение работает, это обслуживание кошмар. Всякий раз, когда я меняю custompmd.jar, я должен обновлять JAR плагина также каждый раз, что является утомительным. Есть ли чистое и аккуратное решение?

ответ

1

Вы можете использовать пользовательские классы правил, если вы добавите банку как Eclipse, плагин в фрагменте к установке Eclipse. Хозяин фрагмента подключаемого модуля должен быть ch.acanda.eclipse.pmd.core.

Чтобы преобразовать флягу в фрагмент плагина, вы должны изменить файл 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-Name, Bundle-SymbolicName и Bundle-Version. Значение заголовка Bundle-ManifestVersion должно быть 2. Fragment-Host должно содержать символическое имя пакета хоста ch.acanda.eclipse.pmd.core и, при необходимости, версию установленного вами затмения-pmd. Bundle-RequiredExecutionEnvironment определяет минимальную среду выполнения, требуемую фрагментом плагина. Его значение JavaSE-1.7, если он был скомпилирован с Java 7 или JavaSE-1.8, если вы использовали Java 8.

После того, как вы изменили манифест вашей баночки вы можете скопировать его в папку dropins вашей установки Eclipse. Ваш фрагмент подключаемого модуля устанавливается при запуске Eclipse.

3

Наконец-то выяснил это сам!

(я получил его работать в самой моей предыдущей попытке, но из-за несвежий custompmd.jar из-за неудачной ANT задачи, он не работал это время).

Шаг за шагом:

  1. Скопируйте ch.acanda.eclipse.pmd.core_<blahblah#>.jar из plugins каталога в временную директорию.
  2. Открыть JAR в каталоге temp с помощью программного обеспечения 7-Zip
  3. Добавить custompmd.jar в каталог lib.
  4. Редактировать META-INF/MANIFEST.MF файл, добавьте эту строку ,lib/custompmd.jar в конце Bundle-Classpath:
  5. Закрыть 7-Zip (и принимает диалоговое окно Save).
  6. Сделайте резервную копию существующего /plugins/ch.acanda.eclipse.pmd.core_<blahblah#>.jar и замените его на эту временную банку.
  7. Выход Затмение и Restart
+1

Модификация подключаемого модуля от eclipse-pmd имеет тот недостаток, что вы теряете свои модификации при выпуске новой версии eclipse-pmd, а плагин заменяет его более новую версию. Если вы конвертируете банку в фрагмент подключаемого модуля и установите его в Eclipse, у вас нет этой проблемы. Мой ответ показывает, как это сделать. –

+0

@Всего, пожалуйста см. Выше (принятый ответ) для поддерживаемого (и подлинного, как это исходит от автора плагина) решения. – KrishPrabakar

Смежные вопросы