Je suis nouveau à Maven et un peu nouveau à Java. Essayé Google et des sources connexes, mais je n'ai pas trouvé celui qui ressemblait à ma situation.
En ce moment, j'ai Maven Project i fait un "exécuté comme Pourquoi ne fonctionne-t-il que dans l'éditeur Eclipse et non comme Jar? P> POM: P> x code> et
y code>.
x code> peut être considéré comme une bibliothèque partagée avec certains utilitaires,
y code> est un simple
jframe code> avec un
"bonjour monde" code " > Imprimé et un appel à une méthode statique dans
x code>. p>
Maven Install code>" sur le projet
x Code>, je reçois un
"Créer un succès" code>. J'ajouterai le projet
x code> comme dépendance dans le projet
y code> (à l'aide de l'éditeur POM-Eclipse, parcourez le référentiel et localisez-la). Je fais un "Code comme
Maven Package Code>" sur le projet
Y code>, je reçois un
"Construire le succès" code>. Au cours de l'exécution du projet
y code> via
java -jar code> ou inspecter le pot produit, le projet
x code> est manquant partout et je reçois une classe de fantaisie non trouvée . Eclipse le trouve et il n'y a pas d'erreur de compilation dans l'éditeur source. P>
<dependency>
<groupId>com.company.deployment.shared</groupId>
<artifactId>com.company.deployment.shared</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
6 Réponses :
Maven ne produit pas de fichier de jar combiné pour vous. Ce que Eclipse fait est en train de regarder la configuration Maven et de l'ajout de toutes les classes / bocaux requis à votre classe de classe pour vous quand il s'exécute. P>
Si vous souhaitez exécuter votre programme à partir de la ligne de commande, vous devrez ajouter manuellement tous les pots à votre classe de classe. P>
Alternativement, vous pouvez exécuter votre programme
Cela ne fonctionne pas car Maven résolve les dépendances lors de la construction de votre projet, mais ne mettez pas toutes les dépendances comme par magie dans votre pot. Vous êtes censé exécuter votre application avec toutes ses dépendances dans la classe de classe: ou vous devez personnaliser le plug-in Maven Jar afin de créer un pot exécutable, comme décrit ici . Et vous pouvez également utiliser le plugin Maven Assay pour copier toutes les dépendances de votre projet Y dans le répertoire cible, à côté du y.jar généré. p> p>
Pardonne-moi si je trouve cela difficile, je viens d'un monde .Net et de mes ventes m'a vendu un projet Java à faire. Mais pour une raison quelconque, Maven ne vérifie que si les dépendances sont là mais ne les ajoute pas? Merci pour la pointe sur le pot exécutable, mais comme il est maintenant, toutes les dépendances restent disparues ... Comment puis-je emballer cela de manière à ce que mes clients puissent l'utiliser? J'espère bien qu'ils n'ont pas besoin de la ligne de commande pour cela ...?
@HEFFDANE - La raison pour laquelle il ne met pas les dépendances dans votre pot, c'est que cela ne serait pas la bonne chose à faire dans la plupart des cas. Et pour les cas où il s'agit, il existe une variété de plugins pour le faire.
Je vous recommande de jeter un coup d'œil sur le plug-in Maven Shade . Cela produit un "Uber-Jar" comprenant votre projet et toutes ses dépendances. Il peut également faire d'autres choses telles que définir la classe de points d'entrée pour rendre votre fichier de jar un pot exécutable. P>
J'y regarderai, merci pour la pointe.
Vous pouvez également trouver Exec-Maven-Plugin utile Si votre client ne peut pas télécharger des dépendances de Maven M2 Repo sur la mouche comme derrière le pare-feu ou aucune connexion Internet, vous devez également emballer les dépendances à l'aide de Maven-dépendance-plugin Pour copier toutes les dépendances et Maven-Assembly-plugin Pour assembler des dépendances P> P>
L'artefact produit dans le projet y contient uniquement des résultats de projet uniquement dans le projet Y, sans inclure ses dépendances.
Si vous souhaitez créer un pot dans Y, que vous pouvez exécuter directement, vous pouvez envisager d'utiliser le plugin de montage. < / p>
Par exemple, le moyen le plus simple de construire un Uber-Jar pour le projet Y: P> à part un artefact normal, un assemblage qui contient des classes, etc. de Les dépendances seront créées, qui convient à être exécutée par Java -Jar P> visiter http://maven.apache.org/plugins/maven-assembly-plugin/ pour une utilisation plus sophistiquée. p> p>
Phil Sacre a déjà expliqué le problème de base bien (il n'ya essentiellement aucune information sur où trouver le x.jar intégré dans votre Y.jar). p>
En outre, vous pouvez également consulter le Appassembler-Maven-plugin ( qui peut par exemple générer des scripts de lancement pour votre projet Y qui ont déjà le bon jeu de classe de classe) et / ou le Exec-Maven-Plugin (que vous pouvez utiliser, par exemple, lancez directement Y avec le point de classe droit à l'aide de Maven). P>