Maven报错:The packaging for this project did not assign a file to the build artifact

一、问题发生

       我想使用IDEA的Maven管理工具将项目安装到本地仓库,于是选择了Plugins下的install:install去执行,如下图所示:

在这里插入图片描述
结果出现了如下报错信信息:

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

二、问题解决

       因问题分析比较长,怕没耐心看完。故将解决方案放在前边

方法一:使用Maven管理工具下的LifeCycle(生命周期)中的install,如下图所示 。网上也可以搜到这种解决方法,但是他的说法, “使用Lifecycle中的install,项目就会自动去maven仓库下载需要的包”是错误的。

在这里插入图片描述
方法二:使用Maven管理工具 工具栏中的Execute Maven Goal,如下图所示
在这里插入图片描述
点击打开,输入Maven命令,特殊说明:在windows的cmd中执行命令,需要在最前面加上mvn,而在这里不需要,如下图所示:
在这里插入图片描述

三、问题分析

       解决问题很简单,知道问题为什么产生确不容易。然而这也是最重要的,要知其然更要知其所以然。通过下文,你可以了解到Maven的生命周期、阶段、插件和目标之间的关系,弄清楚关系之后,就可以明白,解决方案一和二的原理,并可以提出新的解决方案。OK,废话不多说,进入正文。
————————————————进入正文—————————————————
1、生命周期(lifecycle)
       Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。
Maven 内置的三套生命周期:
       (1) clean 清理项目
       (2) default 构建、发布项目
       (3) site 生成项目站点
2、阶段(phase)
        阶段是生命周期的组成部分。特点:阶段在生命周期内具有顺序性,在执行生命周期中某个阶段时会先顺序执行本周期当前阶段之前的所有阶段,再执行当前阶段。

例如:clean周期共有3个阶段,按顺序分别如下:

  1. pre-clean
  2. clean
  3. post-clean

当执行命令mvn clean时,实际按顺序执行了clean生命周期的pre-clean和clean共2个阶段。

3、插件(plugin)和目标(goal)

阶段的执行依赖插件和目标。(对于这句话看个人理解,不太好翻译,官方原话:A Build Phase is Made Up of Plugin Goals)插件从本质上来说插件j是打成jar包的java程序,目标应该是程序的参数。
插件可以单独执行 例如 :
在这里插入图片描述

插件目标表示一个特定的任务,阶段负责生命周期中的特定步骤,它执行职责的方式可能不同。有些阶段声明绑定的插件目标,即通过执行相应目标的方式履行职责,有些阶段没有声明绑定的插件目标,,通过其他方式履行职责。

生命周期及其包含阶段,阶段声明绑定的插件目标见下表
(1)生命周期clean(3个阶段)

顺序阶段插件:目标
1pre-clean
2cleanclean:clean
3post-clean

(2)生命周期default(23个阶段)

顺序阶段插件:目标
1validate
2initialize
3generate-sources
4process-sources
5generate-resources
6process-resourcesresources:resources
7compilecompiler:compile
8process-classes
9generate-test-sources
10process-test-sources
11generate-test-resources
12process-test-resourcesresources:testResources
13test-compilecompiler:testCompile
14process-test-classes
15test surefire:test
16prepare-package
17package
18pre-integration-test
19integration-test
20post-integration-test
21verify
22installinstall:install
23deploy deploy:deploydeploy:deploy

(3)生命周期site(4个阶段)

顺序阶段插件:目标
1pre-site
2sitesite:site
3post-site
4site-deploysite:deploy
4、总论

在IDEA中使用Lifecycle下的install(即在命令行下执行命令mvn install),mvn install代表执行的是生命周期的一个阶段,由上文知,在执行install阶段先要执行其前面的21个阶段,之后执行install阶段(install阶段的执行依赖插件目标install:install)
在IDEA中使用Plugins下的install:install(即在命令行下执行命令mvn install:install) mvn install:install代表执行的是插件的目标,它单独执行,不会先去执行之前的21个阶段。
因此使用方案一可以解决问题。

又因为生命周期可以和插件目标一起执行,所以先执行verify生命周期阶段,在执行install:install插件,这样同样都是执行22个阶段了。
因此使用方法二可以解决问题。

评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月几时有666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值