2009-10-07 7 views
0

Donc, j'ai finalement pris la plongée et installé maven2 mais j'ai quelques problèmes.Maven questions de dépendance

Mon code repose sur des fichiers jar tiers que j'ai installés avec install: install-file. J'ai ensuite listé ces jars comme des dépendances dans mon pom. Maven peut compiler et emballer tout cela bien et dandy. Mais quand je lance mon pot comme ceci:

« target/* » java -cp com.blah.App

Il ne fonctionne pas parce qu'il ne peut pas trouver certaines classes qui sont nécessaires à l'exécution. Ces classes sont dans un jar qui a été installé et est utilisé pour la compilation.

J'ai listé l'étendue de la dépendance comme pour ce pot comme "fourni". J'ai essayé d'utiliser "system" aussi, mais ça ne marche pas non plus. Qu'est-ce que je fais mal?

je peux l'obtenir pour fonctionner si je fais bien:

java -cp "target/*: path/to/jar1: path/to/jar2" com.blah.App

Mais il doit y avoir un moyen d'amener maven à mettre les jars requis dans le répertoire cible.

Répondre

3

Vous ne devez pas utiliser "fourni" pour les dépendances normales. "Fourni" est utilisé pour les dépendances supposées disponibles au moment de l'exécution, telles que les API J2EE pour une application J2EE.

La raison pour laquelle votre application ne fonctionne pas est que vos dépendances se trouvent maintenant dans le repo maven et qu'elles doivent être ajoutées au classpath.

Pour une application java normale telle que la vôtre, vous pouvez utiliser le maven-dependency-plugin pour copier vos dépendances dans un répertoire (à partir du repository) et configurer le maven-jar-plugin pour ajouter les fichiers jar à votre classpath manifeste (en créant un pot exécutable).

Mise à jour: Vous pouvez également effectuer une recherche dans le dépôt central de maven pour voir si vos dépendances sont déjà présentes. Vous n'avez donc pas besoin de les installer manuellement dans votre dépôt local. Il y a de bonnes chances qu'ils soient déjà là (s'ils sont open source).

+0

Merci. Il semble que maven rend vraiment toutes les choses faciles à accomplir. J'ai déjà passé une heure à essayer d'obtenir maven pour construire du code Java 5. Maintenant ça. Pourrait avoir accompli beaucoup plus en utilisant fourmi dans le même laps de temps .... –

+0

dans mon expérience maven est difficile à saisir, mais une fois que vous l'avez, il rend la vie beaucoup plus facile. keep it :) – Nico

+0

Maven a un peu de courbe d'apprentissage, mais une fois que vous apprendrez comment cela fonctionne, vous verrez les avantages. Attendez jusqu'à ce que vous commenciez à inclure les dépendances externes du repo maven ...tu verras la lumière. –

2

Pour en savoir plus sur la façon dont maven gère les dépendances, la section Introduction to the Dependency Mechanism et la section Dependency Scope sont un bon point de départ. Ici, comme indiqué dans une autre réponse, l'utilisation d'une portée «fournie» pour vos dépendances n'est pas appropriée. Vous devez utiliser la portée "compile" qui est la valeur par défaut et utilisée si aucune n'est spécifiée.

Ensuite, pour exécuter com.blah.App dans la machine virtuelle en cours avec les dépendances du projet englobante comme classpath, il est le maven-exec-plugin:

mvn exec:java -Dexec.mainClass="com.blah.App" 

Comme vous pouvez le voir, maven peut rendre les choses vraiment facile quand vous l'utilisez correctement et de la manière de Maven.

Questions connexes