Печать OSGI связывает classpath?

В обычном Java-приложении можно распечатать содержимое classpath с помощью:

String ss = System.getProperty("java.class.path");
System.out.println(ss);

Но как мне распечатать путь к классу пакета OSGI, созданного с помощью мастера eclipse PDE? В активаторе можно получить текущий пакет, например:

public void start (контекст BundleContext) throws Exception { super.start(context); плагин = это;

Bundle b  = context.getBundle();
 // java doc: This bundle's class loader is not used to search for entries. 
b.findEntries(path, filePattern, recurse)

Но Javadoc говорит, что findEntries НЕ использует загрузчик классов. Есть ли простой способ увидеть / распечатать то, что находится на пути к классам текущего пакета?

1 ответ

Решение

Как указывали другие, на самом деле такого понятия, как "пакетный класс", нет - в этом весь смысл OSGi.:)

Что вы можете сделать, это:

  • посмотрите заголовки вашего пакета, чтобы увидеть, какие пакеты он импортирует, и являются ли они обязательными или обязательными

  • используйте PackageAdmin для поиска пакетов, которые экспортируют пакеты с заданным именем

Однако AFAIK PackageAdmin устарел, и в 4.3 появится новый / расширенный механизм для работы со связкой проводов.

Похоже, что вашей реальной мотивацией для этого является сканирование пути к классам для поиска и загрузки ресурсов. Тот факт, что это нелегко сделать, является побочным эффектом соблюдения границ модулей: вы не можете иметь забор и в то же время позволять кому-либо ходить по газону. Был план для стандартного сервиса, который сканирует пакеты от имени клиента, но это, кажется, было отозвано (не уверен почему - возможно, как следствие нового 4.3).

Другие вопросы по тегам