上传源码包
用下面这个插件,可以上传源码到仓库中
<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
在Nexus Repository Manager的上下文中,"Group", "Hosted", 和 "Proxy" 是三种不同的仓库类型,每种类型服务于不同的目的:
Hosted(托管):
定义: 这是一种用于存储和分发您自己组织生成的组件的仓库。您可以上传您的软件包(如Maven的JAR文件、npm包等)到这个仓库中,并供内部或外部用户下载。
用途: 适合存放私有项目或者希望控制发布版本的公开项目,确保团队成员和客户端能够访问到经过批准的组件。
Proxy(代理):
定义: 此类型的仓库充当远程公共仓库(如Maven Central、npmjs.com等)的缓存和代理。当请求到达Nexus时,如果该组件尚未缓存,Nexus会从远程仓库下载并存储起来,以便后续请求能更快地从本地获取。
用途: 减少对外部资源的网络请求,提高构建速度,同时可以在企业内部网环境下提供稳定可靠的依赖获取途径。
Group(组):
定义: Group仓库不直接存储任何组件,而是作为一个逻辑上的集合,将多个Hosted和/or Proxy仓库聚合在一起,对外展示为单个仓库URL。
用途: 这使得开发人员可以通过一个单一的URL访问所有所需的组件,无论是内部托管的还是通过代理访问的外部组件,简化了依赖管理配置,提高了效率。
综上所述,这三种类型的仓库共同构成了Nexus Repository Manager的核心功能,支撑着现代软件开发中的依赖管理和分发需求。