Динамические пути к классам - это способ вычисления 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 в проекте, в зависимости от платформы, на которой ведется работа.
Эти методы саморазмещения будут применяться и в дальнейшем.