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:
- 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. - 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
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
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser Eclipse "Classpath" Variables.
De définir une ou plusieurs variables comme "Leviathan_under_test" et pointer vers la version que vous souhaitez tester. Puis, dans le projet de construction de chemin d'accès, le changement de référence de la bibliothèque à inclure la variable.
Lorsque vous modifiez la version de Leviathan vous voulez tester, vous modifiez la variable et s'en aller. Si nécessaire, vous pouvez même avoir plusieurs variables pour les versions qui sont testés plus souvent, c'est à dire "LEVIATHAN_LATEST", OU "LEVIATHAN_PROBLEM_CHILD", etc.
En fait, une fois que la variable est dans la .classpath fichier, vous n'avez pas le modifier, au moins dans le cas de $LÉVIATHAN par exemple. Le build fonctionne avec la variable classpath de la valeur que vous avez définie dans votre espace de travail. Vous pouvez pointer vers une cible différente sans avoir à modifier les fichiers de votre projet.
Eh bien, pas tout à fait. Comment pourrais-je résoudre le problème où j'ai Leviathan_10.0, Leviathan_Test_10, Leviathan_scott, et Leviathan_test_scott dans mon espace de travail, tous ouverts en même temps, et je veux Leviathan_test_scott à point à Leviathan_scott et Leviathan_test_10 à point à Leviathan_10.0?
La réponse théorique serait d'utiliser de multiples espaces de travail, car chacun peut avoir ses propres valeurs pour les variables d'environnement. Si vous voulez avoir toutes les versions des projets chargé dans un espace de travail, vous devrez créer plusieurs variables, avec des noms explicites, "LEVIATHAN_TEST_SCOTT" & "LEVIATHAN_10.0" pour une utilisation par chaque projet. En réalité, ce n'est pas trop différent de maintenir le classpath de chaque projet directement. Vous disposez d'une construction avancées config problème(défi) si vous avez besoin de regarder plus robuste des outils de construction. en.wikipedia.org/wiki/Continuous_integration
OriginalL'auteur Kelly S. French
C'est une dépendance de gestion de la question et il y a beaucoup de standard de facto des outils pour vous aider! Je vous suggère fortement d'utiliser ANT avec D'Ivy dépendance de la Gestion ou de l'utilisation Maven (ou tout otehr construire un outil qui a la gestion des dépendances).
Avec l'une de celles que j'avais utiliser un artefact référentiel maanger comme Nexus ou Artifactory, de sorte que vous avez une véritable source pour votre interne construit des artefacts.
De cette façon vous aurez toujours la version canonique de la bibliothèque que vous souhaitez, quand vous le voulez.
OriginalL'auteur Martijn Verburg
Si vous ne voulez pas utiliser des outils externes pour gérer les différentes dépendances du projet vous pouvez essayer d'aller à l'unique Léviathan des projets de Build path de la propriété, dans l'Ordre de tabulation et d'Exportation, et de vérifier les bibliothèques que vous avez besoin pour exécuter vos tests.
de cette façon, vous n'avez pas besoin d'importer les bibliothèques dans le projet de test et par la commutation du projet soumis à l'essai de vous mettre à jour automatiquement les bibliothèques
oui, il faut travailler
OriginalL'auteur pbanfi