Я делаю это все время в проектах C ++ (нет Java, извините, но я думаю, что концепция переносима).
Мои рабочие пространства находятся в ~ / workspaces / {workspace_name}. У меня есть один общий файл проекта в ~ / {my_projects, а затем исходные деревья (несколько версий) находятся в ~ / proj1, ~ / proj2 и т. Д.
В каждом каталоге ~ / proj * я помещаю символическую ссылку на ~ / my_projects / .project и .cproject (требуется для C ++, не используется в Java). Таким образом, каждое исходное дерево совместно использует один файл проекта. Затем в каждом рабочем пространстве (по одному для каждого исходного дерева) я настраиваю рабочее пространство путем импорта ссылки на проект. Например, ~ / workspaces / proj1 импортирует ~ / proj1 / .project, но ~ / proj1 / .project фактически является символической ссылкой на ~ / my_projects / .project.
Так что это держит источник отдельно от рабочих пространств. При сборке нет никакой реальной конфигурации, которую нужно делать - у меня просто есть запуск Eclipse make в соответствующем узле дерева - у нас уже есть собственная система сборки, ориентированная на команды (мы не используем ant, но должен применяться тот же принцип) ).
Я управляю исходным кодом папки ~ / my_projects в приватной области SCM, поэтому другие члены команды не видят ее или возятся с ней - многие из них вообще не используют Eclipse.