2009-10-22 4 views
1

J'ai rencontré un problème entre deux plugins Grails différents (Drools 0.3 et WebTest) où ils semblent tous deux inclure une version de xml-api- * et qui ne semblent pas pouvoir coexister .Affrontements entre deux plugins Grails

Quelle est la meilleure façon de résoudre ce genre de problèmes?

Répondre

2

La suppression de l'une des bibliothèques offensantes est une façon, mais sera une douleur à chaque fois que vous extrayez le code source. Malheureusement, je ne peux pas penser autrement parce que xml-apis ne se trouve pas dans le répertoire lib de WebTest mais dans le cadre de l'installation de WebTest téléchargée.

Normalement, un lib libar jar n'est pas ajouté au classpath s'il existe déjà dans l'application lib dir afin que vous puissiez créer un fichier fictif du même nom pour arrêter l'ajout d'une des librairies. En examinant la source du plugin WebTest, il faut quand même exclure xml-apis du classpath (_Events.groovy line 100) - utilisez-vous la dernière version? Êtes-vous sûr que ce n'est pas le plugin Drools qui se heurte aux xml-apis de Grails?

Il existe une meilleure résolution des dépendances en 1.2 que les plugins pourraient utiliser pour éviter ce type de problème à l'avenir.

+0

Pour être honnête, je ne suis pas sûr re WebTest. J'utilise les nightlies de 1.2M3. Je vais supprimer les xml-apis des baves, et le pire c'est le pire, voyez si je peux construire un meilleur plugin bave sans le problème. * MAIS * Je dis cela avec peu ou pas de connaissances de Grails plugin arch :) –

1

Je ne sais pas, mais quelque chose à essayer serait d'aller dans le répertoire pour chacun des plug-ins:

~/.grails/$ {} GRAILS_VERSION/plugins/$ {} THE_PLUGIN/lib

et supprimer la version la plus basse du xml-api- *.

Si vous êtes chanceux, il n'y a pas eu de changements de version dans la nouvelle version des bibliothèques.

Il semble que les bibliothèques pour les plugins sont accessibles à l'application grails entière (sinon vous n'obtiendrez pas le conflit).

J'ai fait quelque chose de similaire à mettre à niveau vers une version plus récente des bibliothèques de rapports jasper dans le plugin jasper et cela a fonctionné pour moi. Votre situation peut être un peu plus compliquée cependant.

2

La meilleure façon de le faire est d'utiliser Grails dependency resolution DSL.. Vous pouvez exclure les dépendances offensantes comme ceci:

plugin("hibernate") { 
compile('org.hibernate:hibernate-core:3.3.1.GA') { 
    excludes 'ehcache', 'xml-apis', 'commons-logging' 
} 
compile 'org.hibernate:hibernate-annotations:3.4.0.GA', 
     'org.hibernate:hibernate-commons-annotations:3.3.0.ga' 
runtime 'javassist:javassist:3.4.GA'  
} 

Cela fonctionne depuis Grails 1.2. Il est probable que vos plug-ins sont pré-Grails-1.2, sinon le mécanisme de résolution de dépendance interne basé sur Ivy devrait prendre soin des conflits. La résolution de dépendance DSL n'est rien de plus qu'une manière groovy d'écrire le xml Ivy.

Questions connexes