wake-up-neo.com

Maven: Die Verpackung für dieses Projekt hat dem Build-Artefakt keine Datei zugewiesen

Ich verwende Maven 3.0.3 unter Mac 10.6.6. Ich habe ein JAR-Projekt und wenn ich den Befehl "mvn clean install: install" ausführe, wird der Fehler angezeigt.

[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]

Was bedeutet das und wie kann ich das beheben? Unten ist meine pom.xml. Lassen Sie mich wissen, welche anderen Informationen hilfreich wären, und ich werde diesen Beitrag bearbeiten. Danke, - 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

Ich weiß nicht, ob dies die Antwort ist oder nicht, aber es könnte Sie in die richtige Richtung führen ...

Der Befehl install:install ist eigentlich ein Ziel im maven-install-plugin . Dies unterscheidet sich von der Lebenszyklusphase von install Maven.

Maven-Lebenszyklus-Phasen sind Schritte in einem Build, an die sich bestimmte Plugins binden können. Viele verschiedene Ziele von verschiedenen Plugins können ausgeführt werden, wenn Sie eine einzelne Lebenszyklusphase aufrufen.

Worauf es ankommt, ist der Befehl ...

mvn clean install

unterscheidet sich von...

mvn clean install:install

Ersteres führt alle Ziele in jedem Zyklus vor und einschließlich der Installation aus (wie Kompilieren, Packen, Testen usw.). Letzteres kompiliert oder paketiert nicht einmal Ihren Code, sondern führt nur dieses eine Ziel aus. Das macht Sinn, wenn man sich die Ausnahme ansieht; es spricht über:

StarTeamCollisionUtil: Die Verpackung für dieses Projekt hat dem Build-Artefakt keine Datei zugewiesen

Versuchen Sie das erstere und Ihr Fehler könnte einfach verschwinden!

143
Jesse Webb

TL; DR Um dieses Problem zu beheben, rufen Sie das Paket-Plugin auf, bevor Sie z. Verwenden Sie für die jar -Verpackung maven-jar-plugin wie folgt:

mvn jar:jar install:install

Oder

mvn jar:jar deploy:deploy 

Wenn Sie tatsächlich bereitstellen mussten.

Gotcha Dieser Ansatz funktioniert nicht, wenn Sie ein Multi-Modul-Projekt mit verschiedenen Verpackungen (Ear/War/Jar/Zip) haben - noch schlimmer, falsche Artefakte wird installiert/bereitgestellt! Verwenden Sie in diesem Fall die Reaktoroptionen, um nur das implementierbare Modul (z. B. war) zu erstellen.


Erklärung

In einigen Fällen möchten Sie tatsächlich direkt ein install:install - oder deploy:deploy - Ziel ausführen (dh vom maven-deploy-plugin -, dem deploy Ziel, nicht dem Maven deployphase ) und Sie würden in den nervigen The packaging for this project did not assign a file to the build artifact enden.

Ein klassisches Beispiel ist ein CI-Job (z. B. ein Jenkins- oder Bamboo-Job), bei dem Sie in verschiedenen Schritten verschiedene Aspekte ausführen bzw. berücksichtigen möchten:

  • Ein erster Schritt wäre ein mvn clean install, Der Tests und Testabdeckungen durchführt
  • Ein zweiter Schritt wäre eine Sonarqube-Analyse auf der Grundlage eines Qualitätsprofils, z. mvn sonar:sonar Plus weitere Optionen
  • Erst nach erfolgreicher Testausführung und bestandenem Quality Gate möchten Sie die endgültigen Projektartefakte in Ihrem Maven-Unternehmensrepository bereitstellen, ohne mvn deploy Erneut ausführen zu müssen, da diese zuvor erneut ausgeführt werden würden Phasen (und kompilieren, testen usw.) und Sie möchten, dass Ihr Build effektiv ist, aber dennoch schnell .

Ja, Sie könnten diesen letzten Schritt beschleunigen, indem Sie zumindest Tests überspringen (Kompilierung und Ausführung über -Dmaven.test.skip=true ) oder mit einem bestimmten Profil spielen (um so viele Plugins wie möglich zu überspringen) Es ist dann viel einfacher und übersichtlicher, einfach mvn deploy:deploy auszuführen.

Aber es würde mit dem obigen Fehler scheitern, denn wie auch angegeben durch das Plugin FAQ :

Während der Verpackungsphase wurden alle Informationen gesammelt und in den Kontext gestellt. Mit diesem Mechanismus kann Maven sicherstellen, dass maven-install-plugin Und maven-deploy-plugin Den gleichen Satz von Dateien kopieren/hochladen. Wenn Sie also nur deploy:deploy Ausführen, werden keine Dateien in den Kontext gestellt und es gibt nichts zu implementieren.

In der Tat benötigt deploy:deploy Einige Laufzeitinformationen, die durch frühere Phasen (oder frühere Plugins/Zielausführungen) in den Build-Kontext gestellt wurden.

Es wurde auch als potenzieller Fehler gemeldet: MDEPLOY-158 : deploy: deploy funktioniert nicht nur für das Deployment von Artefakten auf Maven Remote repo

Aber dann als kein Problem abgelehnt.

Die Konfigurationsoption deployAtEnd von maven-deploy-plugin Hilft in bestimmten Szenarien auch nicht weiter, da zwischenzeitliche Jobschritte ausgeführt werden müssen:

Ob jedes Projekt während seiner eigenen Bereitstellungsphase oder am Ende des Multimodul-Builds bereitgestellt werden soll. Wenn true festgelegt ist und der Build fehlschlägt, wird keines der Reaktorprojekte bereitgestellt. (Experimental)

Also, wie kann man das beheben?
Führen Sie einfach Folgendes in einem ähnlichen dritten/letzten Schritt aus:

mvn jar:jar deploy:deploy

Der maven-jar-plugin Erstellt keine JAR-Datei als Teil Ihres Builds neu, da die Option forceCreation standardmäßig auf false gesetzt ist:

Benötigen Sie das JAR-Plugin, um eine neue JAR zu erstellen, auch wenn sich anscheinend keiner der Inhalte geändert hat. Standardmäßig prüft dieses Plugin, ob das Ausgabe-Jar existiert und Eingaben sich nicht geändert haben. Wenn diese Bedingungen erfüllt sind, überspringt das Plugin die Erstellung der JAR-Datei.

Aber es wird den Build-Kontext für uns angenehm füllen und deploy:deploy Glücklich machen. Keine zu überspringenden Tests, keine hinzuzufügenden Profile. Genau das, was Sie brauchen: Geschwindigkeit.


Zusätzlicher Hinweis: Wenn Sie das build-helper-maven-plugin, buildnumber-maven-plugin Oder ein ähnliches Plugin verwenden, um Metadaten zu generieren, die später vom maven-jar-plugin Verwendet werden (z. B. Einträge für die Manifest-Datei) Wahrscheinlich haben Sie Ausführungen, die mit der validate -Phase verknüpft sind, und Sie möchten sie weiterhin während des Erstellungsschritts jar:jar haben (und dennoch eine schnelle Ausführung beibehalten). In diesem Fall ist der fast harmlose Aufwand, den validatephase wie folgt aufzurufen:

mvn validate jar:jar deploy:deploy

Noch ein zusätzlicher Hinweis: Wenn Sie nicht jar, sondern beispielsweise war gepackt haben, verwenden Sie stattdessen war:war, Bevor Sie installieren/implementieren.

Gotcha Überprüfen Sie, wie oben erwähnt, das Verhalten in Multi-Modul-Projekten.

73
A_Di-Matteo

Diese Antwort bezieht sich auf eine sehr alte Frage, um anderen zu helfen, die sich diesem Problem stellen.

Während ich an meinem Java Projekt mit gearbeitet habe, ist dieser Fehler aufgetreten 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

dies ist fehlgeschlagen, wenn ich install:install unter Plugins - install wähle, wie mit dem roten Pfeil in der unteren Abbildung gezeigt.

Choose Wrong Selection

Sobald ich das ausgewählte install unter Lifecycle ausgeführt habe, wie oben dargestellt, ist das Problem behoben und meine Maven-Installation wurde erfolgreich kompiliert.

9
ArifMustafa

Ich habe das gleiche Problem. Fehlermeldung für mich ist nicht vollständig. Aber in meinem Fall habe ich Generation Jar mit Quellen hinzugefügt. Durch Platzieren dieses Codes in 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>

In der Bereitstellungsphase führe ich also das Ziel source: jar aus, das jar mit sources erzeugt. Und die Bereitstellung endet mit BUILD SUCCESS

5
lstrzelecki

sie müssen die Zieldatei löschen, z. B. in jar und anderen. In C: Laufwerk Ihres Ordners unter .m2 sehen Sie den Speicherort, an dem die .jar-Datei installiert und gelöscht wird

3
Traduce

Ich hatte das gleiche Problem, führte aber mvn install anfangs aus (nicht install: install wie bereits erwähnt).

Die Lösung besteht darin, Folgendes einzuschließen:

 <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.5.2</version>
 </plugin>

In den Plugin-Management-Bereich.

0
Denys

Dieser Fehler tritt auf, wenn das Maven-Install-Plugin Version 3.0.0-M1 (oder ähnlich) verwendet wird.

Wie oben und auch hier bereits erwähnt, funktioniert die folgende Plug-In-Version:

    <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.5.2</version>
    </plugin>
0
k_o_