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

Dav*_*ave 101 pom.xml maven-3 maven maven-jar-plugin maven-install-plugin

我在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]
Run Code Online (Sandbox Code Playgroud)

这是什么意思,我该如何解决?下面是我的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>
Run Code Online (Sandbox Code Playgroud)

Jes*_*ebb 151

我不知道这是不是答案,但它可能会引导你朝着正确的方向前进......

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

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

这归结为命令......

mvn clean install
Run Code Online (Sandbox Code Playgroud)

与...不同

mvn clean install:install
Run Code Online (Sandbox Code Playgroud)

前者将在每个循环中运行所有目标,包括安装(如编译,打包,测试等).后者甚至不会编译或打包你的代码,它只会运行那一个目标.看看异常,这有点意义; 它谈到:

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

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


A_D*_*teo 79

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

mvn jar:jar install:install
Run Code Online (Sandbox Code Playgroud)

要么

mvn jar:jar deploy:deploy 
Run Code Online (Sandbox Code Playgroud)

如果您确实需要部署.

疑难杂症,如果你有不同的包装(耳朵/战争/ JAR/ZIP)多模块项目这种做法是行不通的-甚至更糟的是,错误的文物将被安装/部署!在这种情况下,使用reactor选项仅构建可部署模块(例如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工作),您需要在不同的步骤中执行/关注不同的方面:

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

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

但是它会因上面的错误而失败,因为插件常见问题解答也指定:

在包装阶段,所有人都聚集在一起并置于背景中.有了这个机制,Maven可以确保maven-install-pluginmaven-deploy-plugin正在复制/上传同一文件集.因此,当您只执行时deploy:deploy,上下文中没有放置文件,也没有任何内容可以部署.

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

它还报告了一个潜在的错误::MDEPLOY-158deploy:deploy不仅适用于将工件部署到Maven Remote repo

但后来被拒绝不是问题.

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

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

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

mvn jar:jar deploy:deploy
Run Code Online (Sandbox Code Playgroud)

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

即使没有任何内容似乎已更改,也需要jar插件来构建新的JAR.默认情况下,此插件会查看输出jar是否存在且输入是否未更改.如果这些条件为真,则插件会跳过jar的创建.

但它会很好地填充我们的构建环境并使之deploy:deploy快乐.没有要跳过的测试,没有要添加的配置文件.正是你所需要的:速度.


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

mvn validate jar:jar deploy:deploy
Run Code Online (Sandbox Code Playgroud)

还有另一个注意事项:如果你没有jar,比如war打包,请war:war在安装/部署之前使用.

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

  • 进入这个确切的场景.神奇的写作 - 应该在部署插件常见问题解答中,而不是相当简洁的"你不能那样做"的解释. (7认同)
  • 谁会想到 jar jar 竟然还有用;) (2认同)

Ari*_*afa 11

这个回复是一个非常古老的问题,以帮助其他人面对这个问题.

当我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
Run Code Online (Sandbox Code Playgroud)

这种失败发生在我选择install:install下方时Plugins - install,如下图中红色箭头所示.

选择错误的选择

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


k_o*_*_o_ 9

使用 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>
Run Code Online (Sandbox Code Playgroud)


lst*_*cki 6

我有同样的问题.我的错误信息不完整.但在我的情况下,我添加了带有源代码的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>
Run Code Online (Sandbox Code Playgroud)

所以在部署阶段我执行source:jar目标,它生成带有源的jar.并使用BUILD SUCCESS结束部署