OSGi / BND: Как исключить классы из генерации пакетов? - PullRequest
1 голос
/ 02 марта 2011

У меня есть проект пакета (Eclipse), который имеет следующую структуру:

src/main/java
   Bundle source files here
src/test/java
   Bundle internal test cases

Когда я пытаюсь сделать пакет, я получаю сообщение об ошибке, что есть некоторые «Неразрешенные ссылки»».Ошибка вызвана внутренними тестовыми классами.Как настроить BND для игнорирования этих классов?

Разделение тестовых наборов на отдельный проект не вариант, так как тестовые наборы имеют более тонкую гранулярность, чем API, предоставляемый пакетом.

Ответы [ 3 ]

4 голосов
/ 04 марта 2011

Проблема в том, что Eclipse компилирует src/main/java и src/test/java в один и тот же выходной каталог, возможно, "bin", а Bnd сканирует скомпилированные файлы .class в папке bin.

Это можно исправить, выполнив следующие действия:

  1. Щелкните правой кнопкой мыши по src/test/java и выберите «Путь сборки»> «Настроить выходную папку» ...

  2. Нажмите «конкретную выходную папку» и введите имя каталога, например bin_tests.

Теперь Eclipse скомпилирует тестовые классы в отдельную папку, а Bnd увидит только реальные классы.

1 голос
/ 02 марта 2011

Хороший подход для модульных тестов в OSGi заключается в использовании фрагментов. Поэтому вы можете поместить свои тесты в пакет фрагментов, и у вас больше не будет этой проблемы. Более того, тесты будут иметь доступ ко всем классам, а не только к API, как это было бы, если бы вы поместили их в простой пакет

0 голосов
/ 02 марта 2011

Я предполагаю, что ваши тестовые классы включены в файл комплекта jar (что не должно быть так).Проверьте содержимое файла jar и измените процесс пакета, чтобы он не включал тестовые классы (сборка maven не включает src/test/java).

Иногда я замечал такое поведение при использовании m2eclipse для упаковки моего проекта во время выполненияmaven из командной строки работал хорошо.

...