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>
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!
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 deploy
phase ) 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:
mvn clean install
, Der Tests und Testabdeckungen durchführtmvn sonar:sonar
Plus weitere Optionenmvn 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
Undmaven-deploy-plugin
Den gleichen Satz von Dateien kopieren/hochladen. Wenn Sie also nurdeploy: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 validate
phase 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.
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.
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.
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
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
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.
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>