maven关键知识点总结

上传源码包

用下面这个插件,可以上传源码到仓库中

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <phase>verify</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

命令总结

#第一步, 执行该命令,可以在本地仓库 安装 jar, 这样 本地应用就可以直接读取到最新的jar包

mvn clean install -U

#第二步,上传到远程仓库, 如果本地打了源码包,那么会将源码包上传到仓库
mvn deploy

问题总结

有时候,拉取最新的jar包后,查看源码 发现 不是最新的。

可以反编译一下 .class ,确认是不是最新的。一般都是最新的,为什么 查看源码缺拿不到最新的呢?

可能原因是 没有上传 最新的源码包 到远程仓库,导致 本地 idea 依然用的旧的源码文件。

idea配置maven

在快速迭代的过程,版本一般使用快照版本。可以看下idea的设置:

多模块管理

通常一个项目是由多模块进行管理。父pom 用特殊标签 管理模块。现在有 A/B/C三个模块,

    <modules>
        <module>A</module>
        <module>B</module>
        <module>c</module>
    </modules>
    <packaging>pom</packaging>

A/B/C三个模块的父pom都是这个pom。

   <parent>
        <artifactId>le-mav/artifactId>
        <groupId>com.wxj</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath/>
    </parent>

一种场景是, 如果父pom 需要显示添加 A模块作为默认的依赖包进行传递。打包时 会报错:

[ERROR] [ERROR] The projects in the reactor contain a cyclic reference: Edge between 

出现了循环引用。原因是父pom 强制传递了A模块,A模块自己怎么依赖自己?!

解决方法:

第一种:

A 模块 不用 父pom作为自己的 父pom。 把父pom 移除即可。

第二种:

A模块 不用 父pom 进行管理。 A模块的父pom不用移除。也可以解决。

依赖管理

maven的两个标签可以管理依赖传递:

属性传递:

<properties>
    <java.version>1.8</java.version>
</properties>

依赖传递:

// 子模块强制引入该依赖
<dependencies>
        <dependency>
             
        </dependency>
</dependencies>



// 子模块 继承,子模块 需要依赖的时候 显示引用,可以不用加版本号,版本号由父pom继承
<dependencyManagement>
    <dependencies>
        <dependency>
        </dependency>
    <dependencies>
</dependencyManagement>

寻找依赖包

maven 在 引入依赖时,必须有 三个坐标 来定位 具体的依赖包。 如果 看到 只有两个坐标,没有 版本号的时候,可以知道,版本号 一定是 在 依赖 中 继承到的。那么可以到 父pom中,或者 父pom 依赖的 包中。

spring boot 正是充分利用了 依赖包管理的特性:

<!-- 一般 spring boot 都会 加入 spring-boot-starter-parent 作为 父pom -->


<!-- spring-boot-starter-parent pom:  -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/>


<!-- spring-boot-starter-parent pom的 父pom: -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.12.RELEASE</version>
  </parent>


<!-- spring-boot-dependencies 管理的依赖包: -->

  <dependencyManagement>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot</artifactId>
        <version>2.3.12.RELEASE</version>
      </dependency>
  </dependencyManagement>


<!-- spring-boot 的依赖: -->

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.2.15.RELEASE</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

IDEA Maven 依赖插件:

Maven Helper

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340