Vous pouvez avoir différentes versions de la même classe (ou bibliothèque) dans votre application. Ce n'est pas un gros problème, vous devez seulement utiliser des chargeurs de classes différents pour vos bibliothèques.
Vous devrez créer un URLClassLoader pour charger votre application de test open source (le classloader parent sera le chargeur de classe système), peut-être un autre chargeur de classe pour la version 3.1 du client en tant qu'enfant du premier. Ensuite, supprimez ces bibliothèques du chemin de la classe et résolvez et 'démarrez' la classe 'main' de votre application open source. Il devrait soit fonctionner directement ou au moins donner assez d'indices (NoClassDefFoundError) pour les étapes manquantes (ne l'ai pas essayé avant, désolé, c'est plutôt théorique). Jetez un oeil à la JavaDoc pour la classe java.lang.Classloader
(et ses extensions)
S'il y avait une exigence d'utiliser différentes versions de la même bibliothèque dans une seule application, j'utiliserais OSGi comme cadre, parce que là vous obtenez cette fonctionnalité gratuitement. Le bundle client peut dépendre de la version du client 2.0.2, le bundle de test sur la version client 3.1. Vous n'avez qu'à modifier les fichiers Manifest et démarrer l'application avec un framework OSGi (comme Equinox).
Pourquoi tes tests unitaires contre une bibliothèque différente? Le but des tests unitaires est de tester le comportement des composants individuels de votre application. Si vos tests unitaires ne reproduisent pas fidèlement l'environnement dans lequel l'application sera utilisée, à quoi cela sert-il? –
J'utilise l'open source pour les tests unitaires, cette version open source utilisée en interne du client http (3.1). Mais j'ai utilisé l'ancienne version du fichier jar dans Application. – Tony