J'utilise Maven 3.0.3 sur Mac 10.6.6. J'ai un projet JAR et quand j'exécute la commande "mvn clean install: install", j'obtiens l'erreur,
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-install-plugin:2.3.1:install (default-cli) on project StarTeamCollisionUtil: The packaging for this project did not assign a file to the build artifact -> [Help 1]
Qu'est-ce que cela signifie et comment puis-je résoudre ce problème? Ci-dessous mon pom.xml. Faites-moi savoir ce que d'autres informations seraient utiles et je vais éditer ce post. Merci, Dave
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myco.starteam.util</groupId>
<artifactId>StarTeamCollisionUtil</artifactId>
<packaging>jar</packaging>
<name>StarTeam Collision Util</name>
<description>
The StarTeam Collision Utility provides developers and release engineers alike the ability to
compare files attached to a set of CRs to see if conflicts exist in the change set.
</description>
<version>1.0-SNAPSHOT</version>
<url>http://cm-build.myco.com:8080/hudson/view/Tools/job/StarTeamCollisionUtil - TRUNK/</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>myco-sonatype-nexus-snapshots</id>
<name>MyCo Sonatype-Nexus Snapshots</name>
<url>http://sonatype.myco.com/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>starteam</groupId>
<artifactId>starteam</artifactId>
<version>1.1.0</version>
<type>jar</type>
<scope>system</scope>
<systemPath>${basedir}/lib/starteam110.jar</systemPath>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
</dependency>
<dependency>
<groupId>org.Apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.8.1</version>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.0-beta-3</version>
<configuration>
<reportPlugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
<configuration>
<linksource>true</linksource>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>1.2</version>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.3.1</version>
<reportSets>
<reportSet>
<reports>
<report>index</report>
<report>dependencies</report>
<report>dependency-management</report>
<report>cim</report>
<report>issue-tracking</report>
<report>license</report>
<report>scm</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</reportPlugins>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>sonatype-nexus</id>
<url>http://sonatype.myco.com/nexus/content/repositories/snapshots/</url>
</repository>
</distributionManagement>
<scm>
<url>https://starteam.cmass.myco.com/BorlandStarTeam/BorlandStarTeam.jsp</url>
</scm>
<issueManagement>
<system>StarTeam</system>
<url>https://starteam.cmass.myco.com/BorlandStarTeam/BorlandStarTeam.jsp</url>
</issueManagement>
<ciManagement>
<system>Hudson</system>
<url>http://cm-build.myco.com:8080/hudson/</url>
</ciManagement>
</project>
Je ne sais pas si c'est la réponse ou non, mais cela pourrait vous mener dans la bonne direction ...
La commande install:install
est en fait un objectif sur le maven-install-plugin . Ceci est différent de la phase de cycle de vie de install
maven.
phases de cycle de vie Maven sont des étapes d'une construction à laquelle certains plugins peuvent se lier. De nombreux objectifs de plugins différents peuvent s'exécuter lorsque vous appelez une seule phase du cycle de vie.
Cela revient à la commande ...
mvn clean install
est différent de...
mvn clean install:install
Le premier lancera tous les objectifs dans chaque cycle précédant et incluant l’installation (comme compiler, empaqueter, tester, etc.). Ce dernier ne pourra même pas compiler ni mettre en package votre code, il ne fera que lancer cet objectif. Cela a du sens, vu l’exception; ça parle de:
StarTeamCollisionUtil: le package de ce projet n'a pas affecté de fichier à l'artefact de génération
Essayez l'ancien et votre erreur pourrait bien disparaître!
TL; DR Pour résoudre ce problème, appelez le plug-in de packaging avant, par exemple. pour jar
utilisation du packaging maven-jar-plugin
, comme suit:
mvn jar:jar install:install
Ou
mvn jar:jar deploy:deploy
Si vous aviez réellement besoin de vous déployer.
Gotcha Cette approche ne fonctionnera pas si vous avez un projet multi-module avec différents emballages (ear/war/jar/Zip) - pire encore, mauvais artefacts sera installé/déployé! Dans ce cas, utilisez les options de réacteur pour générer uniquement le module déployable (par exemple, le war
).
Explication
Dans certains cas, vous voulez réellement exécuter directement un install:install
ou deploy:deploy
but (c'est-à-dire de la maven-deploy-plugin
, le deploy
objectif, pas le Maven deploy
phase ) et vous vous retrouveriez dans le The packaging for this project did not assign a file to the build artifact
.
Un exemple classique est un travail de CI (un travail de Jenkins ou de Bamboo, par exemple) dans lequel vous souhaitez exécuter différentes étapes:
mvn clean install
, effectuer des tests et couvrir les testsmvn sonar:sonar
plus d'autres optionsmvn deploy
, parce qu’il exécutera à nouveau les phases précédentes (et compilera, testera, etc.) et que vous voulez que votre construction soit efficace mais pour le moment rapide .Oui, vous pouvez accélérer cette dernière étape en sautant au moins des tests (compilation et exécution, via -Dmaven.test.skip=true
) ou jouez avec un profil particulier (pour sauter autant de plugins que possible), mais il est beaucoup plus facile et clair de lancer simplement mvn deploy:deploy
puis.
Mais cela échouerait avec l'erreur ci-dessus, car comme spécifié également par la FAQ du plugin :
Au cours de la phase de conditionnement, tout est rassemblé et mis en contexte. Avec ce mécanisme, Maven peut s’assurer que le
maven-install-plugin
etmaven-deploy-plugin
copient/télécharge le même ensemble de fichiers. Alors, quand vous n'exécutez quedeploy:deploy
, alors il n'y a pas de fichiers mis dans le contexte et il n'y a rien à déployer.
En effet, le deploy:deploy
nécessite des informations d’exécution placées dans le contexte de construction par les phases précédentes (ou les exécutions de plugins/objectifs précédents).
Il a également signalé comme bogue potentiel: MDEPLOY-158
: deploy: deploy ne fonctionne pas uniquement pour le déploiement d'artefact dans le référentiel Maven Remote
Mais alors rejeté comme pas un problème.
L’option de configuration deployAtEnd
de la maven-deploy-plugin
ne sera d'aucun secours dans certains scénarios car nous avons des étapes intermédiaires à exécuter:
Si chaque projet doit être déployé au cours de sa propre phase de déploiement ou à la fin de la construction de plusieurs modules. Si défini sur
true
et que la construction échoue, aucun des projets de réacteur n'est déployé. (expérimental)
Alors, comment y remédier?
Exécutez simplement les étapes suivantes dans une troisième/dernière étape similaire:
mvn jar:jar deploy:deploy
Le maven-jar-plugin
ne recréera aucun fichier jar dans le cadre de votre construction, grâce à son option forceCreation
définie sur false
par défaut:
Demander au plug-in jar de créer un nouveau JAR même si aucun contenu ne semble avoir été modifié. Par défaut, ce plugin vérifie si le fichier jar de sortie existe et si les entrées n'ont pas changé. Si ces conditions sont remplies, le plug-in ignore la création du fichier jar.
Mais cela va bien peupler le contexte de construction pour nous et faire deploy:deploy
content. Aucun test à ignorer, aucun profil à ajouter. Juste ce dont vous avez besoin: la vitesse.
Note complémentaire: si vous utilisez le build-helper-maven-plugin
, buildnumber-maven-plugin
ou tout autre plugin similaire pour générer des méta-données utilisées ultérieurement par le maven-jar-plugin
_ (par exemple, des entrées pour le fichier Manifest), vous avez probablement des exécutions liées à la phase validate
et vous souhaitez toujours les avoir pendant la jar:jar
étape de construction (tout en conservant une exécution rapide). Dans ce cas, la surcharge presque inoffensive consiste à invoquer le validate
phase comme suit:
mvn validate jar:jar deploy:deploy
Encore une remarque supplémentaire: si vous n’avez pas jar
mais que, par exemple, war
empaquetez, utilisez war:war
avant d'installer/de déployer à la place.
Gotcha comme indiqué ci-dessus, vérifiez le comportement dans les projets multi-modules.
Cette réponse porte sur une très vieille question pour aider les autres personnes confrontées à ce problème.
Je fais face à cette erreur pendant que je travaillais sur mon projet Java
à l'aide de IntelliJ IDEA
IDE.
Failed to execute goal org.Apache.maven.plugins:maven-install-plugin:2.4:install (default-cli) on project getpassword: The packaging for this project did not assign a file to the build artifact
cela a échoué quand je choisis install:install
en dessous de Plugins - install
, comme indiqué par la flèche rouge dans l'image ci-dessous.
Une fois que j’ai exécuté le install
sous Lifecycle
sélectionné, comme illustré ci-dessus, le problème est maintenant résolu et ma compilation maven install compile avec succès.
J'ai le même problème. Le message d'erreur pour moi n'est pas complet. Mais dans mon cas, j'ai ajouté un pot de génération avec des sources. En plaçant ce code dans pom.xml:
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<phase>deploy</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
Donc, dans la phase de déploiement, j'exécute source: jar goal qui produit jar avec les sources. Et déployer se termine par BUILD SUCCESS
vous devez effacer le fichier cible, tel que jar et autres. En C: enregistrez votre dossier à .m2. Indiquez l’emplacement où vous installez et supprimez le fichier .jar, le fichier de capture instantanée et les fichiers cibles, puis nettoyez l’application que vous avez trouvée.
J'ai eu le même problème, mais j'ai exécuté mvn install initialement (pas install: install comme il a été mentionné plus tôt).
La solution consiste à inclure:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
Dans la section de gestion des plugins.
Cette erreur apparaît lors de l'utilisation de la version 3.0.0-M1 de maven-install-plugin (ou similaire)
Comme déjà mentionné ci-dessus et aussi ici la version suivante du plug-in fonctionne:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>