Достаточно ли javac для сборки пакета OSGi? - PullRequest
2 голосов
/ 25 апреля 2010

Чтобы создать пакет из источника с помощью такого инструмента, как javac, вам необходимо предоставить ему линейный путь к классам. К сожалению, это не будет работать в некоторых ситуациях, все еще совершенно законных с точки зрения OSGi:

  • зависимости со встроенным JAR в них;

  • одинаковые пакеты, содержащиеся в разных зависимостях.

Поскольку javac не понимает метаданные OSGi, я просто не смогу, кроме зависимостей в пути к классам. Кажется необходимым более тонкий пакетный подход.

Как эта проблема решается людьми, использующими OSGi в автоматизированном процессе (непрерывная интеграция)? Как ни странно, в Интернете есть много ресурсов о том, как создать пакетный JAR (создание метаданных, создание JAR), при условии, что у вас есть внутри классы / внутренние JAR, но очень мало вещей о том, как на самом деле компилировать эти классы.

Давайте рассмотрим пример: моему пакету для компиляции нужны два других пакета, оба содержат Xerces как встроенный JAR, но в двух разных и несовместимых версиях. Это не проблема, поскольку только один из них экспортирует некоторые пакеты xerces, которые в свою очередь импортирует мой пакет. Может быть, не очень чистая ситуация, но что-то, что может «легально» произойти в контейнере OSGi без проблем.

Теперь, как я могу скомпилировать это? Я не могу поместить две зависимости в мой путь к классу (встроенный JAR Xerces не будет найден javac), я не могу тогда сгладить (две версии Xerces будут сталкиваться, и, возможно, первая не экспортированная будет первой) , Если единственным решением является создание «пути к классам» на уровне пакета, а не в полном масштабе пакета, javac вообще не будет использоваться.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2010

Javac требуется для создания любого файла Java в файле класса. Пакеты OSGI, как и любой другой архив пакетов Java, представляют собой набор файлов классов и манифест, содержащий несколько обязательных поясняющих записей внутри файла JAR.

Если вы хотите, чтобы ваш пакет функционировал правильно, он должен удовлетворять всем зависимостям. Если вы хотите экспортировать некоторые из его услуг или классов, вы также должны объявить их аналогичным образом. Как только вы поймете концепции, конкретные заголовки OSGI в архиве будут иметь смысл.

0 голосов
/ 25 апреля 2010

Java-классы компилируются с помощью javac, это подразумевает: чтобы скомпилировать пакет, вы должны включить все пакеты, от которых вы зависите, в classpath. Вы правы, что javac не знает OSGi. Поэтому вам нужны другие инструменты для автоматизации.

Чтобы увидеть, как это достигается, вы можете взглянуть на Felix , который реализует сервисную платформу OSGi R4.

Пакет OSGi обычно упаковывается ant или maven, которые поддерживаются eclipse. Используя eclipse, зависимости настраиваются на вкладке настроек проекта «plugin-dependencies».

Хороший пример настройки проекта OSGi в Eclipse: Sherlog

...