web-dev-qa-db-fra.com

Maven: l'emballage de ce projet n'affectait pas de fichier à l'artefact de construction

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>
98
Dave

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 installmaven.

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!

143
Jesse Webb

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 deployphase ) 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:

  • Un premier pas serait un mvn clean install, effectuer des tests et couvrir les tests
  • Une deuxième étape serait une analyse Sonarqube basée sur un profil de qualité, par ex. mvn sonar:sonar plus d'autres options
  • Ensuite, et uniquement après que les tests et la passerelle qualité ont été passés avec succès, vous souhaitez déployer les artefacts de projet finaux sur votre référentiel d'entreprise Maven, sans toutefois vouloir réexécuter mvn 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 et maven-deploy-plugin copient/télécharge le même ensemble de fichiers. Alors, quand vous n'exécutez que deploy: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 validatephase 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.

73
A_Di-Matteo

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.

Choose Wrong Selection

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.

9
ArifMustafa

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

5
lstrzelecki

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.

3
Traduce

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.

0
Denys

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>
0
k_o_