У нас есть проблема в том месте, где я работаю со ссылками на несколько проектов в нашем коде. По сути, у нас есть продукт, который я назову Левиафан. У этого проекта есть множество других версий, каждую из которых мы поддерживаем как отдельные проекты в Eclipse. Как разработчики, у нас, как правило, есть несколько проектов (несколько версий), открытых в Eclipse одновременно, поскольку мы получаем звонки по горячей линии о более старых версиях (а также о одновременной разработке нескольких версий).
У нас также есть тестовый код, который находится в разных проектах для каждого дистрибутива Leviathan. Я называю свои проекты Левиафан_ <название ветки>
. Так, например, в моем рабочем пространстве 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, ему / ей необходимо связать проект с исходным Левиафаном. проект, перейдя в Preference-> Путь сборки Java-> Проекты и добавьте проект Leviathan_scott.
Дело в том, что это, конечно же, не меняет ни одну из записей
, которые относятся к "Leviathan \ lib". Итак, мы должны сделать одно из двух:
Leviathan
на Leviathan_ <имя ветки>
в моем .classpath с помощью текстового редактора найти / заменить . Проблема в том, что это нужно делать каждый раз .classpath изменен, из-за чего оба варианта кажутся не идеальными. Наш путь к классам не меняется очень регулярно, но я бы сказал, что он меняется один или два раза каждые две недели. Я' Я хочу иметь возможность связать мой проект, и мне нужно выполнить только один шаг, чтобы связать эти проекты.
Похоже, мы могли бы настроить переменную среды в Eclipse и добавить ее в записи .classpath. Но теперь у нас есть проблема, потому что, если у нас есть несколько тестовых проектов в нашей рабочей области, которые мы хотим скомпилировать, это не сработает. Записи .classpath обоих тестовых проектов будут ссылаться на одну и ту же переменную среды, которая, конечно, может указывать только на одно расположение суперпроекта.
Похоже, я смогу это сделать, но я точно не знаю, как это сделать в Eclipse. Приветствуются любые мысли.
~ Скотт