eclipse 中Maven项目 的maven install 、build 、clean

2023-10-27

自己在对maven项目打成war包的时候,首先是maven clean,之后maven build的时候出现报错,说找不到该项目下的target 文件 (具体的英文我就不复制了),自己倒腾了好长的时间,最后maven  install一下皆可以了,自己感到很纳闷,自己之前就没有对maven做深入的了解,只是平常的引用个jar包,打个war包什么的,出现这个情况当时真的是很令我抓狂,所以就可以的上网查了查,针对上面的问题做了总结,以供你我他查看:


标准的Maven项目包层次结构:

-Project

--src/main/java

--src/main/resources

--src/test/java(如果是用-DskipTests,那么也会编译这些测试类,但是如果勾选Skip tests则不会)

--src/test/resources(如果是用-DskipTests,那么也会编译这些资源文件,但是如果勾选Skip tests则不会)



上面是对在eclipse中运用该命令的说明;

1、maven clean 是清除target目录下的之前打好的jar包或者是war包;

2、maven build是重新对该maven项目进行打包,这里需要手动的输入打包的命令   -X package

上面的两部命令合在一起 maven install是对上面两个命令的集合,既是通过maven自带的原生命令,同时执行了clean 和build,比较节省时间;

那么问题就来了当时为什么我单独执行会出错呢,这就可以说明 maven 对eclipse外带的插件执行命不友好;

下面是一个大神的另一个问题的总结;

之前写代码的过程中曾经遇到过问题,用mvn install后,新改的内容不生效,一定要后来使用mvn clean install 才生效,于是想看看clean和不clean的区别。


就如大家知道的,maven在执行一个生命周期的命令的是时候将会执行之前的所有生命周期操作,比如执行mvn install,会执行前面一系列的动作包括 compile , package , test 等,具体请查看maven的官方文档。这个特性使maven的命令更加简洁易用。

再来分析原来的问题,为什么修改的内容不生效,肯定是最终打出来的war包中的内容没有更新,而war包中会依赖其他子工程的jar包,如果jar 包没有更新过,那war包调用老的jar包也会导致新内容不生效。定位到问题的原因应该是jar包没有用最新的资源(java或者配置文件),那jar包 又是什么时候,谁去打的呢。

上面我们提到我们执行mvn install的时候会先执行mvn package,maven就是通过这个生命周期来根据用户配置,进行打包(war、jar或者其他),这会在每个工程 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">

  ...
  <packaging>war</packaging>
  ...
</project>

这里指定package的时候打成一个war包,改成jar,就会被打成jar包。

我们看jar形式的情况,mvn package 会调用 maven-jar-plugin 这个插件进行打包。
下面我们做一些实验来看这个插件打包的时候的情况

1. 修改target目录下打好的jar包中class以及配置文件的内容,在运行命令mvn package,结果target包中的内容没有被覆盖。
2. 修改源代码中的内容,再运行命令mvn package,结果target包中的内容被覆盖了,产生了新的包。
3. 修改target目录下打好的jar包中的内容,运行命令mvn package -Djar.forceCreation,这个参数应该是强制创建jar包,所以结果target中的jar包内容被覆盖了,产生了新的jar包。

根据上面的实验好像还是不能解释什么时候应该用clean将target下面的内容删除重新生成,jar包,不过至少是明白了一些规则。

总结
1. 理论上来讲不做mvn clean 得到的jar包应该是最新的,除非其他方式修改jar包中的内容而不修改源代码。
2. 平时可以用mvn install,而不进行chean节省时间(如果你觉得节省时间多的话),但最保险还是用 mvn clean install 生成最新的jar包或其他包
3. 不想用mvn clean又想保证jar包最新,建议添加 -Djar.forceCreation 参数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

eclipse 中Maven项目 的maven install 、build 、clean 的相关文章

随机推荐

  • 初识Python装饰器

    Python装饰器 听过Python的人 肯定也听过装饰器的名头 但是好多人不明白装饰器是什么 是如何工作的 原理又是什么 先看看装饰器的定义 如果想要修改某个函数的功能 但是又不想修改这个函数的定义 这种在函数运行期间动态增加功能的方式成
  • ABP-使用Dapper框架

    ABP使用Dapper框架已经有很成熟的第三方包 简单的几句代码就能完成 一 首先准备好一个数据库建一个表 二 建一个实体表 Table BasBloodLevel public class BasBloodLevel Entity
  • 《设计模式》-代码质量评价标准和设计原则

    系列文章目录 设计模式 代码质量评价标准和设计原则 设计模式 创建型 单例模式 工厂模式 建造者模式 原型模式 设计模式 结构型 代理模式 装饰者模式 适配器模式 桥接模式 门面模式 组合模式 亨元模式 文章目录 系列文章目录 前言 一 代
  • 第10章 近似推断

    10 近似推断 在概率模型的应用中 一个中心任务是在给定观测 可见 数据变量X的条件下 计算潜在变量Z的后验概率分布 p Z X p Z X p Z X 以及计算
  • element表格翻页后回到顶部

  • Linux mode命令,linux命令

    一 inode节点号 在linux中 每一个文件都有唯一的inode号 inode号也是系统识别的唯一编码 而文件名仅仅是为了使用者区分辨认 inode index node 表中包含文件系统所有文件列表 一个节点 索引节点 是在一个表项
  • 数字IC设计——跨时钟域篇2(亚稳态)

    数字IC设计 跨时钟域篇2 亚稳态 一 建立时间与保持时间 前提条件 对任何一种触发器 在时钟触发沿前 后的一个小时间窗口内 输入信号必须稳定 输入信号应提前时钟上升沿 假设上升沿有效 T时间到达芯片 这个T就是建立时间Setup time
  • 海思3518E V200中RTSP实验自己构建RTP发送的函数代码及VLC播放器的一个播放注意事项

    在VLC播放器中 工具 首选项 设置里面需要注意必须使用下图中红色框圈出来的设置 如果选择的是后面的 RTP over RTSP TCP 的话会播放不出画面 具体原因未去深入探究 另可以参考他人的代码完成其他功能 网址如下 https bl
  • msi afterburner怎么设置最好?推荐设置

    msi afterburner是一款为显卡超频和监控提供的软件 广泛应用于游戏玩家和电脑爱好者之间 通过适当的设置 可以显著提升显卡的性能 下面就给大家介绍一下msi afterburner推荐设置 纯净之家 win7纯净版系统 win7
  • 使用Prometheus实现大规模的应用程序监视

    Prometheus是一个越来越受欢迎的开源工具 这有充分的理由 它可以为应用程序和服务器提供监视和警报 Prometheus的强大优势在于监视服务器端指标 并将其存储为时间序列数据 尽管Prometheus不适合应用程序性能管理 主动控制
  • 【转】一个FAE(AE)的体会和大家交流

    原文网址 http www 52rd com bbs dispbbs asp boardID 63 ID 228682 本人在国内某芯片设计公司工作近5年时间岗位是AE和FAE 两个工作量各一半吧 今日闲来无事写一些自己的体会与大家分享 不
  • 【一、搭建通用Arm平台的QT交叉编译环境】

    搭建通用Arm平台的QT交叉编译环境 前言 准备 一 下载arm平台交叉编译工具链 1 下载工具链 2 解压到交叉编译平台 Ubuntu 3 配置环境变量 二 下载QT源码 版本与交叉编译工具链版本保持一致 三 下载并编译tslib库 1
  • 微信小程序实现下载功能(以下载视频为例)

    首先 采用 wx downloadFile 方法 访问视频对应的Url 回调函数返回一个该视频文件的临时路径 wx downloadFile url app serverUrl me data videoInfo videoPath suc
  • getDerivedStateFromProps和componentDidUpdate的使用

    react 17版本 使用getDerivedStateFromProps接收外部数据同步到本地state componentDidUpdate里面发送异步请求 Foo js import useState from react impor
  • iMX6ULL-UBoot移植

    U Boot移植 文章目录 U Boot移植 1 获取源码 1 1 从u boot官网获取 1 2 从芯片厂商获取 1 3 从开发板厂商获取 2 移植 2 1 生成自己的配置文件 2 1 1 拷贝参考板的配置文件 2 1 2 生成修改配置文
  • pcb设计50经典实例_数字IC设计职位经典笔试面试100题(41~50)

    41 用与非门等设计全加法器 数字电子技术基础 192页 通过摩根定律化成用与非门实现 42 A B C D E进行投票 多数服从少数 输出是F 也就是如果A B C D E中1的个数比0 多 那么F输出为1 否则F为0 用与非门实现 输入
  • Unity导入模型UnityPacket

    asset gt import package gt import custom package
  • C++ 代码评审最终指南——第 1 部分

    C 语言功能强大 但也极其复杂 复杂性使其极易引发误解和过度复杂化 相比简单语言 C 中的程序错误难以发现 相比其他语言 生产环境中的 C 程序错误更难定位 简而言之 需要谨慎处理 C 甚至是用鹰眼那样锐利的目光进行评审 本篇分为两部分 第
  • 前端鉴权如何做

    登录接鉴权 用户名密码 gt 客户端 gt login gt 服务端 gt 比对数据库 gt 数据库返回数据 gt 服务端 gt 返回数据 gt 给客户端 鉴权 基础鉴权 session cookie JWT Oauth 算法加密 Base
  • eclipse 中Maven项目 的maven install 、build 、clean

    自己在对maven项目打成war包的时候 首先是maven clean 之后maven build的时候出现报错 说找不到该项目下的target 文件 具体的英文我就不复制了 自己倒腾了好长的时间 最后maven install一下皆可以了