Чтобы создать пакет из источника с помощью такого инструмента, как javac, вам необходимо предоставить ему линейный путь к классам. К сожалению, это не будет работать в некоторых ситуациях, все еще совершенно законных с точки зрения OSGi:
Поскольку javac не понимает метаданные OSGi, я просто не смогу, кроме зависимостей в пути к классам. Кажется необходимым более тонкий пакетный подход.
Как эта проблема решается людьми, использующими OSGi в автоматизированном процессе (непрерывная интеграция)? Как ни странно, в Интернете есть много ресурсов о том, как создать пакетный JAR (создание метаданных, создание JAR), при условии, что у вас есть внутри классы / внутренние JAR, но очень мало вещей о том, как на самом деле компилировать эти классы.
Давайте рассмотрим пример: моему пакету для компиляции нужны два других пакета, оба содержат Xerces как встроенный JAR, но в двух разных и несовместимых версиях. Это не проблема, поскольку только один из них экспортирует некоторые пакеты xerces, которые в свою очередь импортирует мой пакет. Может быть, не очень чистая ситуация, но что-то, что может «легально» произойти в контейнере OSGi без проблем.
Теперь, как я могу скомпилировать это? Я не могу поместить две зависимости в мой путь к классу (встроенный JAR Xerces не будет найден javac), я не могу тогда сгладить (две версии Xerces будут сталкиваться, и, возможно, первая не экспортированная будет первой) , Если единственным решением является создание «пути к классам» на уровне пакета, а не в полном масштабе пакета, javac вообще не будет использоваться.