У нас проблема в том месте, где я работаю со ссылками на несколько проектов в нашем коде.По сути, у нас есть продукт, который я назову Левиафаном.Этот проект имеет целый ряд других версий, каждую из которых мы поддерживаем в Eclipse как отдельные проекты.Как разработчики, у нас обычно есть несколько проектов (несколько версий), открытых в Eclipse одновременно, так как мы получаем звонки по горячей линии о старых версиях (а также разрабатываем одновременно несколько версий).
У нас также есть тестовый код, который находится вотдельный проект для каждого распределения Левиафана.Я называю свои проекты Leviathan_<branch name>
.Так, например, в моем рабочем пространстве Eclipse у меня могут быть такие проекты, как:
Leviathan_scott\ (my branch)
Leviathan_9.2\
Leviathan_9.3\
Leviathan_10.0\
Leviathan_10.1\
Test_scott\
Test_10.0
Моя ветвь является копией нашего ствола, поэтому мы можем считать, что самая активная линия разработки.
Проблема в том, что в нашем тестовом коде мы ссылаемся на некоторые библиотеки в Leviathan \ lib.Каждый разработчик может назвать свои проекты немного по-своему.Итак, при разработке .classpath тестового проекта мы ссылаемся на проект Leviathan \ (без дополнений).Путь к классам для этого проекта (который проверен в нашей системе управления версиями) может выглядеть следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry excluding="**/*.MySCMServerInfo" kind="src" path="src"/>
<classpathentry kind="lib" path="lib/abbot-1.0.2/abbot.jar"/>
<classpathentry kind="lib" path="lib/abbot-1.0.2/costello.jar"/>
<classpathentry kind="lib" path="lib/dbunit-2.4.8/dbunit-2.4.8.jar"/>
<classpathentry kind="lib" path="lib/easymock-3.0/easymock-3.0.jar" sourcepath="lib/easymock-3.0/easymock-3.0-sources.jar">
<attributes>
<attribute name="javadoc_location" value="jar:platform:/resource/Test/lib/easymock-3.0/easymock-3.0-javadoc.jar!/"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="lib/objenesis-1.2/objenesis-1.2.jar"/>
<classpathentry kind="lib" path="lib/privilegedAccessor-1.0.2/privilegedAccessor_1.0.2.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-core/unitils-core-3.1.jar" sourcepath="lib/unitils-3.1/unitils-core/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-database/unitils-database-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-dbmaintainer/unitils-dbmaintainer-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-dbunit/unitils-dbunit-3.1.jar" sourcepath="lib/unitils-3.1/unitils-dbunit/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-inject/unitils-inject-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-mock/unitils-mock-3.1.jar" sourcepath="lib/unitils-3.1/unitils-mock/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-orm/unitils-orm-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-spring/unitils-spring-3.1.jar" sourcepath="lib/unitils-3.1/unitils-spring/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-testng/unitils-testng-3.1.jar" sourcepath="lib/unitils-3.1/unitils-testng/src"/>
<classpathentry kind="lib" path="data"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-core/lib/ognl-2.6.9.jar"/>
<classpathentry kind="lib" path="lib/testng-5.14.1/testng-5.14.1.jar" sourcepath="lib/testng-5.14.1/testng-5.14.1-src.zip"/>
<classpathentry combineaccessrules="false" kind="src" path="/Leviathan"/>
<classpathentry kind="lib" path="/Leviathan/lib/slf4j-api-1.6.1.jar"/>
<classpathentry kind="lib" path="/Leviathan/lib/hibernate3.jar" sourcepath="/Leviathan/lib/src/hibernate-3.6.0-src.zip"/>
<classpathentry kind="output" path="classes"/>
</classpath>
Когда разработчик загружает тестовый проект в свое индивидуальное рабочее пространство Eclipse, ему / ей нужно будет связатьпроект в исходный проект Leviathan, перейдя в Preference-> Java Build Path-> Projects и добавьте проект Leviathan_scott.
Дело в том, что это, конечно, не меняет ни одну из <classpathentry ... >
записей, которые ссылаются на «Левиафан \ lib».Итак, нам нужно сделать одну из двух вещей:
- Измените все ссылки с
Leviathan
на Leviathan_<branch name>
в моем .classpath с помощью текстового редактора find / replace. - Удалите все ссылки на Leviathan * .jar в Java Build Path и повторно добавьте jar в Leviathan_scott * .jar.
Проблема в том, что это нужно сделать каждый раз .classpath изменяется, что делает их обоих не идеальными.Наш путь к классам не меняется супер-регулярно, но я бы сказал, что он меняется один или два раза в две недели.Я хотел бы иметь возможность связать свой проект и выполнить только один шаг, чтобы связать эти проекты.
Похоже, мы могли бы установить переменную окружения в Eclipse и добавить ее в записи .classpath.Но теперь у нас есть проблема, потому что если у нас есть несколько тестовых проектов в нашей рабочей области, которые мы хотим скомпилировать, это не сработает.Оба элемента .classpath тестовых проектов будут ссылаться на одну и ту же переменную среды, которая, конечно, может указывать только на одно местоположение суперпроекта.
Кажется, я должен быть в состоянии сделать это, но я не знаю точно, как это сделать в Eclipse.Любые мысли будут с благодарностью.
~ Скотт