Maven: Упаковка для цього проекту не призначила файл артефакту збірки


113

Я використовую Maven 3.0.3 на Mac 10.6.6. У мене є проект JAR, і коли я запускаю команду "mvn clean install: install", я отримую помилку,

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

Що це означає і як я можу це виправити? Нижче - мій pom.xml. Дайте мені знати, яка інша інформація буде корисною, і я відредагую цю публікацію. Дякую, - Дейв

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

Відповіді:


168

Я не знаю, відповідь це чи ні, але це може привести вас у правильному напрямку ...

Команда install:install- це фактично мета на плагіні maven-install-plugin . Це відрізняється від installфази життєвого циклу Maven.

Фази життєвого циклу Maven - це кроки в складі, до яких можуть пов'язуватися певні плагіни. Багато різних цілей з різних плагінів можуть бути виконані, коли ви викликаєте одну фазу життєвого циклу.

На що це зводиться - це команда ...

mvn clean install

відрізняється від ...

mvn clean install:install

Перший виконуватиме всі цілі у кожному циклі, що ведуть до встановлення та включають його (наприклад, компіляція, пакет, тест тощо). Останній навіть не компілює і не пакує ваш код, він просто виконає ту одну ціль. Цей вид має сенс, дивлячись на виняток; в ньому йдеться про:

StarTeamCollisionUtil: Упаковка для цього проекту не призначила файл артефакту збірки

Спробуйте попереднє, і ваша помилка може просто піти!


Я пробігаю через Bamboo, але я не бачу нічого встановити mvn: встановіть будь-де, де у конфігурації
Pra_A

96

TL; DR Щоб виправити цю проблему, зверніться до плагіну упаковки раніше, наприклад для jarвикористання упаковки maven-jar-plugin, наступним чином:

mvn jar:jar install:install

Або

mvn jar:jar deploy:deploy 

Якщо вам насправді потрібно було розгорнути.

Gotcha Цей підхід не буде працювати, якщо у вас є багатомодульний проект з різною упаковкою (вухо / війна / jar / zip) - ще гірше, неправильні артефакти будуть встановлені / розгорнуті! У такому випадку використовуйте параметри реактора лише для складання розгорнутого модуля (наприклад, war).


Пояснення

У деяких випадках ви дійсно хочете працювати безпосередньо install:installабо deploy:deployмета (тобто, від maven-deploy-plugin, то deployмета, а НЕ Maven deploy фаза ) , і ви б в кінцевому підсумку в дратівливий The packaging for this project did not assign a file to the build artifact.

Класичний приклад - робота CI (робота з Дженкінсом або Бамбуком, наприклад), де на різних етапах потрібно виконати / піклуватися про різні аспекти:

  • Першим кроком буде mvn clean installпроведення тестів та тестове покриття
  • Другим кроком буде аналіз Sonarqube, заснований на профілі якості, наприклад, mvn sonar:sonarплюс додаткові варіанти
  • Тоді, і лише після успішного виконання тестів та якості гарантії якості, ви хочете розгорнути до вашого сховища підприємства Maven остаточні артефакти проекту, але ви не хочете повторно запускатись mvn deploy, оскільки він знову виконає попередні етапи (і компілює, тестує тощо), і ви хочете, щоб ваша збірка була ефективною, але при цьому швидкою .

Так, ви можете прискорити цей останній крок принаймні пропускаючи тести (компіляція та виконання через -Dmaven.test.skip=true) або граючи з певним профілем (щоб пропустити якомога більше плагінів), але набагато простіше і зрозуміліше просто mvn deploy:deployпотім запустити .

Але це не вдасться з помилкою, наведеною вище, тому що, як це також вказано в FAQ для плагіна :

Під час фази упаковки всі зібрані та розміщені в контексті. З допомогою цього механізму Maven може гарантувати , що maven-install-pluginі maven-deploy-pluginкопіювання / завантаження і той же набір файлів. Отже, коли ви лише виконуєте deploy:deploy, тоді файли не ставлять у контекст, і розгортати нічого немає.

Дійсно, deploy:deployпотрібна деяка інформація часу виконання, розміщена в контексті збірки за попередніми фазами (або попередніми виконанням плагінів / цілей).

Він також повідомив про потенційну помилку:: MDEPLOY-158expand: розгортання працює не лише для розгортання артефакту в ревізі Maven Remote

Але потім відхилена як не проблема.

Параметр deployAtEndконфігурації maven-deploy-pluginне допоможе ні в певних сценаріях, тому що для виконання проміжних етапів роботи:

Будь-який проект повинен бути розгорнутий під час власної фази розгортання або в кінці складання мультимодуля. Якщо встановлено trueі збірка не вдається, жоден з проектів реактора не розгортається. (експериментальний)

Отже, як це виправити?
Просто виконайте наступне на такому подібному третьому / останньому кроці:

mvn jar:jar deploy:deploy

Завдяки maven-jar-pluginсвоєму forceCreationпараметру, встановленому falseза замовчуванням, не буде створено жодну банку як частину вашої збірки :

Потрібен плагін jar для створення нового JAR, навіть якщо жоден вміст не змінився. За замовчуванням цей плагін виглядає, чи існує вихідна банка та чи не змінилися входи. Якщо ці умови справжні, плагін пропускає створення баночки.

Але це чудово заповнить контекст побудови для нас і зробить deploy:deployщасливими. Немає тестів, які можна пропустити, жодних профілів для додавання. Тільки те, що вам потрібно: швидкість.


Додаткова примітка: якщо ви використовуєте build-helper-maven-plugin, buildnumber-maven-pluginабо будь-який інший подібний плагін для генерації мета-дані в подальшому використовуються maven-jar-plugin(наприклад , записи в файлі маніфесту), ви, ймовірно, розстріли , пов'язані з validateфазою , і ви все ще хочете мати їх в протягом jar:jarкрок збірки (і все ж зберегти швидке виконання). У цьому випадку майже нешкідливі накладні витрати викликають validate фазу наступним чином:

mvn validate jar:jar deploy:deploy

Ще одна додаткова примітка: якщо у вас немає jar, скажімо, warупаковки, використовуйте war:warзамість цього встановлення / розгортання.

Отримано, як було зазначено вище, перевірити поведінку в мультимодульних проектах.


8
Натрапив на цей точний сценарій. Фантастичне записування - має бути в FAQ для плагіну розгортання замість досить короткого пояснення "ви не можете цього зробити".
markdsievers

Хто б міг подумати, що баночка з баночка може бути корисною врешті;)
wearego

Дивіться моє рішення для мулі-модульних проектів: stackoverflow.com/a/57824874/318174
Адам Гент

це рішення чудово працює для мого мультимодульного проекту @AdamGent
karakays

Відмінне пояснення. Описаний саме мій сценарій із моїм сервером Jenkins.
wimnat

14

Ця відповідь на дуже старе питання, щоб допомогти іншим, хто стикається з цим питанням.

Я зіткнувся з цією невдалою помилкою, коли працював над своїм Javaпроектом за допомогою IntelliJ IDEAIDE.

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

це не вдається, коли я вибираю install:installпід Plugins - install, як вказано червоною стрілкою внизу зображення.

Виберіть Неправильний вибір

Як тільки я запускаю вибране installнижче, Lifecycleяк показано вище, проблема виникла, і мій інсталятор Maven install збирає успішно.


6

У мене ж питання. Повідомлення про помилку для мене не повне. Але в моєму випадку я додав банку з джерелами. Розмістивши цей код у 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>

Отже, на етапі розгортання я виконую джерело: jar jar, яке виробляє jar з джерелами. І розгорніть кінці з BUILD SUCCESS


2

Ви повинні очистити цільовий файл, наприклад, в jar та інші. В C: заведіть папку на .m2, перегляньте місце, де він встановлений, та видаліть файл .jar, файл Snaphot та видаліть цільові файли, після чого очистіть знайдене вами додаток.


Ну часткове рішення.
Джаспер Ланкхорст

2

Ця помилка виявляється при використанні плагін maven-install версії 3.0.0-M1 (або подібної)

Як вже було сказано вище, а також тут працює наступна версія плагіна:

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

1

Хоча відповідь @ A_Di-Matteo не працює для мультимодуля, у мене є рішення для мультимодулів.

Рішення полягає в тому, щоб перекрити будь-яку конфігурацію плагіна так, щоб вона прив'язувалася до фази noneза винятком плагіна jar / war / ear та, звичайно, плагіна розгортання. Навіть якщо у вас є один модуль, мої рудиментарні тести показують, що це трохи швидше (з моїх причин я не знаю) ефективність роботи.

Таким чином, фокус полягає в тому, щоб створити профіль, який виконує вищезазначене, яке активується, коли ви хочете лише розгорнути.

Нижче наводиться приклад одного з моїх проектів, який використовує плагін для відтінку, і тому мені довелося повторно замінити плагін jar, щоб не перезаписати:

    <profile>
      <id>deploy</id>
      <activation>
        <property>
          <name>buildStep</name>
          <value>deploy</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
              <execution>
                <id>default-compile</id>
                <phase>none</phase>
              </execution>
              <execution>
                <id>default-testCompile</id>
                <phase>none</phase>
              </execution>
              <execution>
                <id>test-compile</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>
              <execution>
                <id>default-test</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <executions>
              <execution>
                <id>default-install</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <execution>
                <id>default-resources</id>
                <phase>none</phase>
              </execution>
              <execution>
                <id>default-testResources</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
              <execution>
                <id>default</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>default-jar</id>
                <configuration>
                  <forceCreation>false</forceCreation>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

Тепер, якщо я запускаю, mvn deploy -Pdeployвін запустить тільки банку і розгорне плагіни.

Як ви можете зрозуміти, які плагіни вам потрібно переосмислити, це запустити розгортання і подивитися на журнал, щоб побачити, які додатки запущені. Обов’язково слідкуйте idза конфігурацією плагіна, яка є паролем після імені плагіна.


0

У мене була така ж проблема, але я виконав mvn install спочатку (не встановити: встановити, як було сказано раніше).

Рішення полягає в тому, щоб:

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

У розділ управління плагінами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.