OSGi: подключаемый модуль Apache Felix Maven Bundle и Javadoc

Я использую подключаемый модуль Apache Felix Maven Bundle для создания метаданных OSGi.

<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>

Вы можете указать, какие пакеты экспортировать, или использовать стандартные пакеты, исключающие такие пакеты, как *.impl.* и *.internal.*.

Есть ли способ сгенерировать Javadoc только для экспортированных пакетов без дублирования этой информации?

Изменить:

Мой текущий подход заключается в том, что я вручную устанавливаю свойство excludePackageNames (свойство плагина Maven Javadoc) и, таким образом, дублирую эту информацию:

<excludePackageNames>*.internal.*:*.impl.*</excludePackageNames> <!-- used by Javadoc plugin --><!-- TODO: get this from OSGi meta data-->

http://sourceforge.net/p/drombler/drombler-oss-parent/ci/default/tree/pom.xml#l64


person Puce    schedule 23.07.2012    source источник
comment
может быть, вы могли бы запустить javadoc с содержимым сгенерированной банки?   -  person poussma    schedule 24.07.2012
comment
Не могли бы вы объяснить это дальше? Информация Javadoc не включена в файлы классов, насколько мне известно.   -  person Puce    schedule 24.07.2012
comment
Я думал об извлечении списка включенных файлов в банку и передаче этого списка в двоичный файл javadoc. Я боюсь, что это единственный способ создать документацию, которая привязана к содержимому jar. Я не вижу другого выхода.   -  person poussma    schedule 24.07.2012
comment
Это интересный вопрос. Я полагаю, что можно создать плагин maven, который считывает сгенерированный файл Manifest.MF и передает его в качестве конфигурации генератору javadoc, как предложил @ZNK-M.   -  person Chris Dolan    schedule 25.07.2012
comment
Кстати, вчера я подумал о другом решении. Я отвечал на вопрос о муравье на so.com. Парень использовал объект сопоставления файлов. Это позволяет вам преобразовать имя файла в другое. Например, конвертируйте *.class, найденный в банке, в *.html. Затем вы можете передать результат другой задаче. Вы можете сгенерировать весь javadoc и скопировать только те файлы, которые соответствуют картографу.   -  person poussma    schedule 25.07.2012
comment
@ChrisDolan да, кажется, это правильный путь, например. цель подключаемого модуля Maven, которая заполняет excludePackageNames, используемую подключаемым модулем Javadoc. maven-bundle-plugin, похоже, не обеспечивает этой цели. Есть ли другой плагин? Странно, что это не обычный вариант использования.   -  person Puce    schedule 25.07.2012
comment
@Puce - я думаю, что Javadoc уже не так важен, как раньше. Вместо этого я вижу шаблон исходного распространения jar API. Source — это надмножество Javadoc, если ваша IDE достаточно хороша.   -  person Chris Dolan    schedule 25.07.2012
comment
@ChrisDolan, можете ли вы предоставить свой комментарий в качестве ответа. Если никто не предложит готовое решение, я приму его.   -  person Puce    schedule 25.07.2012
comment
@ZNK-M ZNK-M, банка также содержит частные пакеты, поэтому я думаю, что анализ классов в банке не поможет.   -  person Puce    schedule 25.07.2012


Ответы (2)


Подключаемый модуль пакета Apache Maven основан на bndlib, который имеет собственную модель подключаемого модуля. Если модель плагина maven имеет видимость класса для других плагинов maven, эту информацию легко получить. В инструкции в пом прописать плагин:

<instructions>
  <_plugin>com.example.MyPlugin</_plugin>
</instruction>

В этом подключаемом модуле bnd реализуйте интерфейс AnalyzerPlugin.

boolean analyzeJar(Analyzer analyzer) throws Exception {
   doJavadoc( analyzer.getExportedPackages().keySet() );
}

Я не так хорошо знаком с плагинами maven, так как bnd будет выполнять динамический загрузчик классов (фу), он должен иметь возможность видеть ваш код.

person Peter Kriens    schedule 24.07.2013
comment
Спасибо за ваш ответ, но я не уверен, что все понял. Пожалуйста, смотрите мое обновление для моего текущего подхода. Я думаю, что мне нужно установить свойство excludePackageNames с информацией, полученной из bnd, чтобы интегрироваться с плагином Maven Javadoc. Я предполагаю, что ваш подход означал бы не использовать плагин Maven Javadoc? - person Puce; 24.07.2013
comment
да, вы бы тоже сгенерировали свой собственный javadoc. Я думаю, вы также можете использовать эту информацию для установки свойства, которое затем используется плагином javadoc. Этот ответ просто предоставляет вам имена пакетов, которые фактически экспортируются. - person Peter Kriens; 24.07.2013

Думаю, лучше всего было бы, если бы плагин Maven Bundle поставил цель генерировать необходимую информацию.

Я зарегистрировал новую проблему: https://issues.apache.org/jira/browse/FELIX-4181

person Puce    schedule 24.07.2013