Вопросы и ответы по динамическим путям к классам в PDE

Динамические пути к классам - это способ вычисления PDE пути компоновки для проектов модулей в Eclipse 3.0.

Вопрос: что такое устойчивость пути к классам?
Ответ:
Устойчивость пути к классам - это степень изменения пути классам при изменении варианта саморазмещения, выбранного разработчиком. В идеальном случае пути к классам вообще не должны меняться при добавлении каких-либо проектов в рабочую область. Саморазмещение бинарных проектов обладает хорошей устойчивостью пути к классам, поскольку все пути к классам содержат только ссылки на проекты. Саморазмещение внешних модулей не обладает такой устойчивостью. Устойчивость сохраняется в отношении локального расположения установки внешних библиотек, но если ведется совместная работа над проектом и используется хранилище, то список проектов с исходными текстами должен быть одинаковым у всех участников разработки.

Введенная после 2.0 информация о версиях модулей, расположенных в файловой системе, еще более снизила устойчивость пути к классам при работе с внешними модулями.

Вопрос: Если устойчивость пути к классам для бинарных проектов выше, почему они не используются все время?
Ответ:
Саморазмещение при работе с импортируемыми бинарными проектами хорошо, пока число импортируемых модулей относительно невелико (несколько десятков). Для больших продуктов с сотнями модулей такой импорт невозможен. Обычно разработчики таких проектов используют саморазмещение для нескольких проектов с исходным текстом, пары десятков прямо связанных бинарных проектов, а все остальное подключают как внешние модули. Чисто теоретически конечно покажется странным тратить время и ресурсы на импорт сотен внешних модулей, чтобы иметь возможность скомпилировать несколько проектов с исходным текстом.

Вопрос: я полагаю, что саморазмещение бинарных проектов (или внешних модулей) - это лучший способ. Чего следует опасаться при совместной работе над проектом?
Ответ:
Статические пути к классам (бинарных проектов или внешних модулей) раз и навсегда фиксируют выбранный метод саморазмещения и заставляют всех участников разработки использовать только его.

Вопрос: Что такое динамические пути к классам?
Ответ: Динамические пути к классам - это возможность PDE динамически вычислять часть путей к классам для проекта модуля, связанных с зависимостями модуля. При этом используется технология контейнера путей к классам JDT. Вычисление динамических путей к классам осуществляется 'на лету' и поэтому всегда соответствует текущим условиям в рабочей области. Кроме того, динамический характер вычисления путей к классам позволяет PDE учитывать все изменения и поддерживать правильные значения путей к классам независимо от метода саморазмещения.

Вопрос: какова устойчивость пути к классам для динамических путей к классам?
Ответ:
Наивысшая. Поскольку все записи для обязательных модулей заменяются одной записью контейнера пути к классам, путь к классам остается постоянным.

Вопрос: Чем мне могут быть полезны динамические пути к классам?
Ответ: С динамическими путями к классам отпадает потребность заранее определять способ саморазмещения. Если применяются бинарные проекты, динамические пути к классам вычисляются как ссылки проекта. Если они недоступны, то они определяются как JAR внешних модулей. При добавлении или удалении бинарных проектов динамические пути к классам отражают все эти изменения. Обновлять пути к классам самому больше нет необходимости. Кроме того, если другие разработчики получат из CVS часть ваших проектов, им не придется приспосабливаться к вашему стилю саморазмещения.

Вопрос: Поскольку ядро PDE входит в динамические пути к классам, буду ли я зависеть от PDE?
Ответ:
Да. Динамические пути к классам вычисляются на лету, а не записаны в файле .classpath (ради чего все и было затеяно). В PDE реализован сложный алгоритм, вычисления путей к классам, который стремится как можно точнее воссоздать условия времени выполнения. То, что для компилятора JDT доступно во время разработки, должно как можно точнее совпадать с тем, что увидят загрузчики классов во время выполнения. Ядро PDE Core лучше способно справиться с обновлением путей к классам, чем вы сами. Если требуется вручную исправить путь к классам, чтобы что-то скомпилировалось, то скорее всего модуль настроен неверно и не будет корректно выполняться (бывают и исключения - разработка SWT).

Вопрос: Мы используем саморазмещение только для бинарных проектов. Потеряем ли мы что-либо при переходе на динамические пути к классам?
Ответ:
Нет. Динамические пути к классам не влияют на личный выбор типа саморазмещения. Они просто позволяют вычислить зависимости модулей в заданном контексте. Если вы по-прежнему импортируете внешние модули как бинарные проекты, динамические пути к классам будут вычисляться как ссылки проектов, как и ранее.

Вопрос: Что нужно для активации динамических путей к классам?
Ответ:
Обновить один раз пути к классам для всех модулей версии 2.1. Вы заметите, что пути к классам стали короче, а все ссылки на зависимые модули заменены одной записью контейнера. После этого можно будет продолжать работу. Внесите измененные проекты модулей в хранилище, включая и файлы .classpath.

Вопрос: У меня есть дополнительные записи путей к классам для задач, сервлетов или JSP Ant.
Ответ:
При вычислении путей к классам PDE учитывает свойство 'jars.extra.classpath' файла build.properties. Если компоновка настроена правильно, PDE сгенерирует правильный путь к классам.

Вопрос: Как управлять динамически вычисленными записями пути к классам?
Ответ:
Такое редко бывает нужно, но это возможно на вкладке Свойства > Путь компоновки Java > Библиотеки. Разверните узел 'Зависимости модуля' и измените записи.

Вопрос: Часть вычисленных записей для библиотек не имеет вложений с исходным текстом. Могу ли я добавить их вручную?
Ответ:
PDE вычисляет вложения с исходным текстом для большинства библиотек. Иногда вложения с исходным текстом не создаются, потому что архивы source с исходными текстами не следуют соглашениям об именах. Для этих записей исходные тексты можно добавить вручную в окне свойств пути компоновки.

Вопрос: будут ли добавленные вручную вложения с исходным текстом удалены, когда PDE вычислит заново пути к классам динамически?
Ответ:
Нет. PDE запоминает все ручные добавления и применяет их всякий раз после динамического вычисления, если только пути к библиотекам не изменились.

Вопрос: я разработчик SWT. Могу ли применять динамические пути к классам?
Ответ:
Нет, к сожалению. SWT использует уникальную настройку саморазмещения, в которой пути к классам для различных сред сохраняются в хранилище и переименовываются в .classpath в проекте, в зависимости от платформы, на которой ведется работа. Эти методы саморазмещения будут применяться и в дальнейшем.