Comment puis-je bibliothèques de référence dans un autre projet dans Eclipse Helios?

Nous avons un problème à l'endroit que je travaille avec référence à plusieurs projets dans notre code. Fondamentalement, nous avons un produit, que je vais appeler le Léviathan. Ce projet a tout à fait un certain nombre d'autres versions, dont chacune nous maintenir en tant que projet distinct dans Eclipse. En tant que développeurs, en général, nous avons de multiples projets (plusieurs versions) ouvert dans Eclipse en même temps, comme nous obtenir de l'assistance téléphonique des appels sur des versions plus anciennes (ainsi que de développer simultanément plusieurs versions).

Nous avons aussi le code de test, qui est dans un projet différent pour chaque distribution de Léviathan. J'ai le nom de mes projets Leviathan_<branch name>. Ainsi, par exemple, dans mon workspace Eclipse, je pourrais avoir des projets comme:

Leviathan_scott\ (ma branche) 
Leviathan_9.2\ 
Leviathan_9.3\ 
Leviathan_10.0\ 
Leviathan_10.1\ 
Test_scott\ 
Test_10.0 

Ma branche est une copie de notre tronc, donc on peut considérer que le développement le plus actif de la ligne.

Le problème est que nous avons de référence des bibliothèques dans le Léviathan\lib dans notre code de test. Chaque développeur peut nommer leurs projets de façon légèrement différente. Donc, dans l'élaboration du projet de test .chemin de classe, nous faisons référence au projet Leviathan\ (pas d'ajouts). Le chemin de ce projet (ce qui est vérifié dans notre système de contrôle de source) pourrait ressembler à:

<?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>

Lorsqu'un développeur charge le projet de Test dans sa/son espace de travail Eclipse, il/elle aurait besoin de lier le projet à l'origine du Léviathan projet en allant dans Préférences->Java Build Path->Projets et ajouter le Leviathan_scott projet.

La chose est, bien sûr, cela ne change pas du tout de la <classpathentry ... > entrées qui font référence à "Léviathan\lib". Donc, nous devons faire une de deux choses:

  1. Changer toutes les références de Leviathan à Leviathan_<branch name> dans mon .chemin de classe à l'aide d'un éditeur de texte rechercher/remplacer.
  2. Supprimer toutes les références à Léviathan*.jar Java Build Path et ajouter de nouveau les pots dans Leviathan_scott*.jar.

Le problème avec ces derniers est qu'il doit être fait chaque fois l' .classpath est changé, ce qui fait à la fois de ces semblent de moins que l'idéal. Notre classpath n'est pas changé, super-régulièrement, mais je dirais que c'est changé une fois ou deux fois toutes les deux semaines. J'aimerais être en mesure d'établir un lien de mon projet et d'avoir à effectuer qu'une seule étape afin d'établir un lien entre ces projets.

Il semble que nous avons pu définir une variable d'environnement au sein d'Eclipse et ajoutez-le dans la .classpath entrées. Mais, maintenant, nous avons un problème, car si nous avons plusieurs projets de Test dans notre espace de travail que nous voulons de la compilation, cela ne fonctionne pas. Les deux projets de test' .classpath entrées reportez-vous à la même variable d'environnement, ce qui bien sûr ne peut point à un super emplacement du projet.

Il me semble que je devrais être capable de faire cela, mais je ne sais pas exactement comment l'accomplir dans Eclipse. Toutes les pensées seraient grandement appréciés.

~Scott

Apache Maven trie ce genre de problèmes comme un charme.
D'accord, mais il est difficile d'obtenir 20 les développeurs à passer à un nouveau système de construction... Si nous absolument, je pourrais peut-être faire l'affaire, mais si c'est possible de faire sans cette, alors j'aimerais faire de cette façon.

OriginalL'auteur jwir3 | 2010-11-11