Maven: 这个项目的包装没有为构建工件分配文件

我在 Mac 10.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>
<version>1.0-SNAPSHOT</version>
<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>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.8.1</version>
</plugin>
</plugins>
</build>
</project>
177146 次浏览

我不知道这是不是答案但它可能会引导你走向正确的方向。

(我相信这些步骤适用于使用 Intellij IDE 的人员。默认情况下,install:install在右侧的 Maven 面板中可用。以下步骤可供选择。)

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

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

归根结底就是命令。

mvn clean install

不同于..。

mvn clean install:install

前者将在安装前的每个周期中运行所有目标(如编译、打包、测试等)。后者甚至不会编译或打包您的代码,它只会运行一个目标。这有点道理,看看这个例外,它说:

StarTeamCollisionUtil: 该项目的包没有为构建构件分配文件

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

我也有同样的问题。 我的错误信息不完整。但是在我的例子中,我添加了带源代码的 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

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

为了解决这个问题,在调用打包插件之前,例如,对于 jar打包,使用 maven-jar-plugin,如下所示:

mvn jar:jar install:install

或者

mvn jar:jar deploy:deploy

如果您真的需要部署。

如果您的多模块项目具有不同的包(ear/war/jar/zip) & ndash; 更糟糕的是,将安装/部署错误的工件,这种方法将无法工作!在这种情况下,使用反应堆选项仅构建可部署模块(例如 war)。


解释

在某些情况下,你实际上想直接运行一个 install:install或者 deploy:deploy目标(也就是说,从 maven-deploy-plugindeploy目标,而不是 Maven deploy 阶段) ,你最终会在恼人的 The packaging for this project did not assign a file to the build artifact

一个典型的例子是 CI 工作(例如 Jenkins 或竹子工作) ,在不同的步骤中,你需要执行/关注不同的方面:

  • 第一步是 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需要通过以前的阶段(或者以前的插件/目标执行)在构建上下文中放置一些运行时信息。

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

但后来被拒绝了,因为这不是问题。

在某些情况下,maven-deploy-plugindeployAtEnd配置选项不会有任何帮助,因为我们需要执行中间作业步骤:

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

那么,该怎么补救呢?
只需在类似的第三/最后一步中运行以下步骤:

mvn jar:jar deploy:deploy

maven-jar-plugin将不会重新创建任何 jar 作为构建的一部分,这要感谢它默认设置为 falseforceCreation选项:

要求 JAR 插件构建一个新的 JAR,即使内容似乎没有任何更改。默认情况下,这个插件查看输出 jar 是否存在,输入是否没有改变。如果这些条件为真,插件将跳过 jar 的创建。

但是它将很好地为我们填充构建上下文,并使 deploy:deploy满意。无需跳过测试,无需添加配置文件。正是你需要的,速度。


附加说明: 如果你正在使用 build-helper-maven-pluginbuildnumber-maven-plugin或者其他类似的插件来生成 maven-jar-plugin以后使用的元数据(例如 Manifest 文件的条目) ,你很可能已经执行了与 validate阶段相关的操作,并且你仍然希望在 jar:jar构建阶段使用它们(同时保持快速执行)。在这种情况下,几乎无害的开销是按以下方式调用 validate 阶段:

mvn validate jar:jar deploy:deploy

还有另外一个注意事项: 如果您没有 jar,而是使用了 war打包,那么在安装/部署之前使用 war:war

正如上面指出的,检查多模块项目中的行为。

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

我在使用 IntelliJ IDEA IDE 进行 Java项目时遇到了这个失败的错误。

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

当我选择 Plugins - install下面的 install:install时,如下图中红色箭头所示,这种情况发生了。

Choose Wrong Selection

如上所述,在 Lifecycle下运行选定的 install之后,问题就解决了,我的 maven 安装编译版本也成功了。

我也有同样的问题,但是我最初执行了 Mvn 安装(而不是前面提到的 Install: install 安装)。

解决方案包括:

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

插件管理部分。

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

虽然@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,它将只运行 jar 和部署插件。

如何确定需要覆盖哪些插件,则需要运行部署并查看日志,以确定哪些插件正在运行。确保跟踪插件配置的 id,即插件名称后面的括号。

当我收到同样的错误消息时,这对我有用..。

mvn install deploy

我已经看到这个错误发生时,需要的插件没有特别提到在 pom。所以

mvn clean install

将给予例外情况,如果没有添加:

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

我也是,

mvn clean install deploy

如果没有添加这样的内容,同样的例外情况也会失败:

<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>

这是有意义的,但更清晰的错误消息将受到欢迎

你缺少 物业标签:

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

Xml 文件的工作版本应该如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>se-lab1</artifactId>
<version>1.0-SNAPSHOT</version>


<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>


<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>
org.hkr.Main
</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>


<dependencies>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</project>

我希望这对某些人有所帮助,但是我不小心在我的项目中添加了一个模块,它将我的 pom 文件从

<packaging>jar</packaging>

<packaging>pom</packaging>

所以我把它改回

<packaging>jar</packaging>

它再次创造了罐子

我遇到过类似的问题:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:3.0.1:install (default-install) on project MyProject: The packaging for this project did not assign a file to the build artifact -> [Help 1]

就我而言,错误是由于项目目录路径中的空格造成的例如:

 ~\Documents\Job\My Project\my-project

我已经重命名了目录,以便有一个没有空格的项目路径,它工作得很好。