Интегрируйте конструктор Ant в Eclipse: Относительные пути для рабочего диапазона области обновления
Этот вопрос похож на Интегрировать конструктор Ant в Eclipse: Error "Variable refer empty empty" , но запрашивает что-то другое.
В моем проекте Eclipse JDT у меня есть несколько задач Ant, которые я хочу выполнить перед компиляцией, поэтому я добавил конструктор Ant в конфигурацию компоновщика Eclipse. Теперь я хочу настроить два варианта "обновить ресурсы после завершения" и "рабочий набор релевантных ресурсов" для этого строителя, чтобы они содержали конкретный каталог в моем проекте.
Оба позволяют мне указать "рабочий набор" с этим . Проблема заключается в том, что это поместит пути в конфигурационный файл Builder Eclipse, имеющие отношение к рабочей области, и, таким образом, пути будут включать в себя имена проектов.
Проблема в том, что весь проект управляется в репозитории subversion. Конфигурация Eclipse является частью репозитория, а другие пользователи проверяют это с помощью разных макетов файловой системы и, возможно, разных названий проектов Eclipse. Например, у меня обычно есть несколько рабочих копий одного и того же проекта в рабочем пространстве Eclipse, каждый из которых, конечно, имеет другое название проекта.
Вот почему я ищу способ как указать рабочий набор в Eclipse относительно каталога проекта (а не каталог рабочей области) или каким-либо другим способом определить область обновления такого конструктора, что он включает в себя один каталог в моем проекте.
Я использую Eclipse 3.7 (Indigo).
Если я настрою рабочий набор в диалоговом окне и посмотрю в файле конфигурации впоследствии, следующая строка будет значением параметра ATTR_REFRESH_SCOPE
:
${working_set:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<item path="/MyProject" type="4"/>
</resources>}
Санированное это выглядит так:
${working_set:
<?xml version="1.0" encoding="UTF-8"?>
<resources><item path="/MyProject/lib" type="2"/></resources>
}
Итак, я хочу получить часть "MyProject". Я попробовал решение упомянутого выше вопроса и заменил путь на ${build_project:/lib}
. Это не дает сообщения об ошибке, но, похоже, не имеет никакого эффекта (Eclipse не обновит указанный каталог).
Я также попытался заменить определение всего рабочего набора на ${build_project:/lib}
, но это дает сообщение об ошибке Unable to restore resource memento
.
Я знаю, что могу просто сказать Eclipse обновить весь проект после запуска застройщика, но это не то, что я хочу (его довольно медленно). Кроме того, для опции конфигурации "соответствующие ресурсы" это означает, что строитель безошибочно запускается после каждого изменения в проекте.
Ответы
Ответ 1
К сожалению, Eclipse не очень хорош с относительными каталогами.
Относительные пути в Eclipse
Однако вы можете сделать следующее:
- Создайте новое рабочее пространство.
- Импортировать файлы из известного местоположения, которые будут одинаковыми на всех машинах.
- Настроить все внутри этого известного каталога.
- Предоставьте рабочие места и инструкции по настройке другим разработчикам, чтобы они использовали этот же "известный каталог".
У вас может быть что-то вроде
C:\YourKnownDir\
\workspace\
\src\
\build\
и запустите eclipse с помощью командного файла:
start %ECLIPSE_DIR%\eclipse.exe -data .\workspace
Если вы собираетесь включить файлы .project в SVN, действительно должен быть предопределенный полный путь. EG:
C:\svn
Надеюсь, что это поможет, но я не знаю другого способа решить эту проблему.
Ответ 2
Как добавить один уровень папок в репозиторий? Позволяет добавить проект в одну папку в репозитории. так что всякий раз, когда проект проверяется, создается папка с именем проекта.
В настоящее время, если вы проверяете проект в рабочей области папки1. Это должно выглядеть так:
workspace_1\lib
Если вы добавите один уровень папки в репо, то есть имя проекта (например, MyProject
здесь), все, кто проверяет проект, получат такое же название проекта. и несколько копий проекта будут выглядеть как
workspace_1\MyProject\lib
workspace_2\MyProject\lib
Таким образом, вы можете создавать несколько копий проекта с тем же именем проекта, и ваш script может использовать эту уникальность имени проекта всегда.
Ответ 3
Совершенно другой подход:
Я думаю, что ограничения общих файлов конфигурации Eclipse (т.е. файлов конфигурации, привязанных к SVN) довольно велики; некоторые люди предпочитают иметь свои зависимые библиотеки как источник на диске, другие предпочитают ссылки JAR; имена каждого пользователя проекта и относительные местоположения рабочего пространства различны и т.д. И, как вы видели, множество опций относится либо к местоположению проекта (то есть не относится к другим проектам), либо к расположению рабочей области.
Так как у меня обычно есть файлы сборки Maven, я использую maven-eclipse-plugin для создания файлов конфигурации Eclipse. Есть несколько вариантов выбора во время выполнения, и почти все может быть настроено в файле сборки (а если нет, просто подключите плагин к этому плагину, который делает то, что вы хотите, и отправьте его с помощью своей сборки. Maven автоматически построит это плагин, если это необходимо для пользователей, которые его используют). Кроме того, некоторые дополнительные абстрактные настройки распределяются между плагинами, поэтому, если кто-либо настаивает на использовании Netbeans вместо Eclipse, он, по крайней мере, получит проект с рудиментарной настройкой (зависимости, версии JRE, наборы символов и т.д.), Без меня когда-либо использовавших или даже настроенных Netbeans.
Положительный побочный эффект: при добавлении или обновлении зависимости от библиотеки необходимо обновить только одно место (Maven POM), остальное можно легко восстановить.
Я уверен, что это не каждый подход (особенно если вы используете Eclipse не только для разработки, но и для создания ваших конечных артефактов, использование другой системы сборки может выглядеть как излишний).
Ответ 4
В подобной ситуации я решил обновить "Проект, содержащий выбранный ресурс" (как вы уже сказали, он не зависит от имени проекта) и помечен как "Производный ресурс" как можно больше папок (Свойства папки → Ресурс → флажок "Производный" ). Eclipse обновит производные ресурсы, но не попытается проверить/перестроить/etc.