Как я могу ссылаться на библиотеки в другом проекте в Eclipse Helios?

У нас есть проблема в том месте, где я работаю со ссылками на несколько проектов в нашем коде. По сути, у нас есть продукт, который я назову Левиафан. У этого проекта есть множество других версий, каждую из которых мы поддерживаем как отдельные проекты в 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". Итак, мы должны сделать одно из двух:

  1. Измените все ссылки с Leviathan на Leviathan_ <имя ветки> в моем .classpath с помощью текстового редактора найти / заменить .
  2. Удалите все ссылки на Leviathan * .jar в Java Build Path и повторно добавьте jar-файлы в Leviathan_scott * .jar.

Проблема в том, что это нужно делать каждый раз .classpath изменен, из-за чего оба варианта кажутся не идеальными. Наш путь к классам не меняется очень регулярно, но я бы сказал, что он меняется один или два раза каждые две недели. Я' Я хочу иметь возможность связать мой проект, и мне нужно выполнить только один шаг, чтобы связать эти проекты.

Похоже, мы могли бы настроить переменную среды в Eclipse и добавить ее в записи .classpath. Но теперь у нас есть проблема, потому что, если у нас есть несколько тестовых проектов в нашей рабочей области, которые мы хотим скомпилировать, это не сработает. Записи .classpath обоих тестовых проектов будут ссылаться на одну и ту же переменную среды, которая, конечно, может указывать только на одно расположение суперпроекта.

Похоже, я смогу это сделать, но я точно не знаю, как это сделать в Eclipse. Приветствуются любые мысли.

~ Скотт

6
задан jwir3 11 November 2010 в 16:24
поделиться