Maven:此项目的包装未将文件分配给构建工件


113

我在Mac 10.6.6上使用Maven 3.0.3。我有一个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>

Answers:


168

我不知道这是否是答案,但这可能会带您朝正确的方向……

该命令install:install实际上是maven-install-plugin的目标。这与installMaven生命周期阶段不同。

Maven生命周期阶段是某些插件可以绑定到其自身的构建步骤。当您调用一个生命周期阶段时,可能会执行来自不同插件的许多不同目标。

归结为命令...

mvn clean install

与...不同

mvn clean install:install

前者将在安装之前(包括编译,打包,测试等)的每个周期中运行所有目标。后者甚至不会编译或打包您的代码,它只会运行一个目标。考虑到异常,这有点道理。它谈论:

StarTeamCollisionUtil:此项目的包装未将文件分配给构建工件

试试前者,您的错误可能会消失!


我正在运行Bamboo,但没有看到任何mvn install:在配置中安装任何位置
Pra_A

96

TL; DR要解决此问题,请在调用包装插件之前(例如出于jar包装用途)maven-jar-plugin,如下所示:

mvn jar:jar install:install

要么

mvn jar:jar deploy:deploy 

如果您确实需要部署。

疑难杂症这种方法是行不通的,如果你有多个模块项目具有不同的包装(耳朵/战争/ JAR / ZIP) -甚至更糟的是,错误的文物将被安装/部署!在这种情况下,请使用反应堆选项仅构建可部署模块(例如war)。


说明

在某些情况下,你真的想直接运行install:installdeploy:deploy目标(即从maven-deploy-plugindeploy目标,而不是Maven的deploy 阶段),您将在恼人的结束The packaging for this project did not assign a file to the build artifact

一个典型的例子是CI作业(例如Jenkins或Bamboo作业),其中您想在不同的步骤中执行/关注不同的方面:

  • 第一步是mvn clean install执行测试和测试覆盖率
  • 第二步是基于质量概况的Sonarqube分析,例如,mvn sonar:sonar加上其他选项
  • 然后,只有在成功执行测试并通过质量控制之后,您才希望将最终的项目工件部署到Maven企业存储库,但是您不想重新运行mvn deploy,因为它将再次执行先前的阶段(并进行编译,测试)。等),而您希望自己的构建既有效又快速

是的,您可以加快最后一步的速度,至少跳过测试(通过进行编译和执行-Dmaven.test.skip=true),或者使用特定的配置文件(以跳过尽可能多的插件),但是简单地运行起来就容易得多mvn deploy:deploy

但这会因上述错误而失败,因为插件FAQ也指定了该错误:

在包装阶段,所有人员都收集并放置在环境中。通过这种机制,Maven可以确保maven-install-pluginmaven-deploy-plugin复制/上传同一组文件。因此,当您仅执行时deploy:deploy,上下文中将没有文件,也没有部署内容。

确实,deploy:deploy需要一些由先前阶段(或先前的插件/目标执行)放置在构建上下文中的运行时信息。

它也被报告为潜在的错误::MDEPLOY-158deploy:deploy不适用于仅将工件部署到Maven Remote repo

但是后来拒绝就不成问题了。

在某些情况下,who 的deployAtEnd配置选项maven-deploy-plugin无济于事,因为我们有要执行的中间作业步骤:

是应在其自己的部署阶段还是在多模块构建结束时部署每个项目。如果设置为true且构建失败,则不会部署任何反应堆项目。(实验性)

那么,如何解决呢?
只需在类似的第三步/最后一步中运行以下命令即可:

mvn jar:jar deploy:deploy

maven-jar-plugin不会再创建任何广口瓶作为构建的一部分,由于其forceCreation选项设置为false默认:

即使所有内容似乎都没有更改,也需要jar插件来构建新的JAR。默认情况下,此插件将查看输出jar是否存在并且输入没有更改。如果满足这些条件,则插件将跳过jar的创建。

但这将很好地为我们填充构建上下文并使其deploy:deploy快乐。没有要跳过的测试,没有要添加的配置文件。正是您需要的:速度。


附加说明:如果您使用的build-helper-maven-pluginbuildnumber-maven-plugin或其他任何类似的插件后,生成的元数据上所使用的maven-jar-plugin(如条目清单文件),你极有可能不得不联系到执行validate阶段,您仍然想在有他们在jar:jar构建步骤(可是却快速执行)。在这种情况下,几乎无害的开销是调用以下validate 阶段

mvn validate jar:jar deploy:deploy

还有一个额外注:如果你还没有jar,但是,比如说,war包装,使用war:war前安装/部署代替。

疑难杂症如上面所指出的,在多模块项目检查的行为。


8
碰到这种确切的情况。很棒的文章-应该在deploy插件的FAQ中,而不是简洁的“您不能那样做”的解释。
markdsievers's

谁会想到罐子罐子终究会有用;)
wearego

请参阅我的多模块项目解决方案:stackoverflow.com/a/57824874/318174
Adam Gent

这个解决方案对我的多模块项目@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如下图的红色箭头所示。

选择错误的选择

有一次,我跑了选择installLifecycle如上图所示,这个问题消失了,我的Maven的安装成功编译版本。


6

我有同样的问题。对我来说错误消息不完整。但就我而言,我添加了带有资源的generation jar。通过将此代码放在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>

因此,在部署阶段,我执行source:jar目标,该目标生成带有源的jar。部署以构建成功结束


2

您必须清除目标文件(例如jar和其他文件)在C:将文件夹驱动到.m2,查看其安装和删除.jar文件,Snaphot文件并删除目标文件的位置,然后清理您发现将运行的应用程序


那么部分解决方案。
贾斯珀·兰霍斯特

2

使用Maven-install-plugin版本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插件,当然还有deploy插件。即使您只有一个模块,我的基本测试也表明这在性能上要快一些(出于我不知道的原因)。

因此,诀窍是制作一个配置文件,该配置文件执行上述操作,并且仅在您要部署时会被激活。

下面是我的一个使用shade插件的项目的示例,因此我不得不重新覆盖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它,它将仅运行jar并部署插件。

如何确定需要覆盖的插件是运行deploy并查看日志以查看正在运行的插件。确保跟踪id插件名称后的括号内的插件配置。


0

我有同样的问题,但是我最初执行了mvn install(不是前面提到的install:install)。

解决方案包括:

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

进入插件管理部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.