Maven 笔记

By | 2021年12月31日

本地仓库设置、IDEA Maven全局设置

本地仓库设置

目的:将Maven下载的依赖包全部下载到指定的目录下,方便管理。

IDEA Maven 全局设置

提示:全局设置仅还未生成 .idea 目录的项目有效,因此为了让此配置生效,若已有此目录,则请先删除。

依赖版本范围

maven项目中所依赖的jar包版本不是唯一特定的版本,可以使用版本范围设定,设定的规则见下表:

1.0x >= 1.0 * The default Maven meaning for 1.0 is everything (,) but with 1.0 recommended. Obviously this doesn’t work for enforcing versions here, so it has been redefined as a minimum version.
(,1.0]x <= 1.0
(,1.0)x < 1.0
[1.0]x == 1.0
[1.0,)x >= 1.0
(1.0,)x > 1.0
(1.0,2.0)1.0 < x < 2.0
[1.0,2.0]1.0 <= x <= 2.0
(,1.0],[1.2,)x <= 1.0 or x >= 1.2. Multiple sets are comma-separated
(,1.1),(1.1,)x != 1.1
<dependency>
    <groupId>com.falsec.nsm</groupId>
    <artifactId>fal-common</artifactId>
    <version>[1.4.0,1.5.0)</version>
</dependency>

标识依赖版本为大于等于1.4.0,且小于1.5.0的jar包。

Nexus-Maven仓库管理器

介绍

私服具有降低中央仓库负荷、节省外网带宽、以及提高项目稳定性等优点。Sonatype Nexus 是当前最流行,使用最广泛的 Maven 仓库管理器。Nexus仓库属性和分类

下载地址:https://help.sonatype.com/en/download.html
Docker 安装参考:https://hub.docker.com/r/sonatype/nexus3

Docker 安装

docker pull sonatype/nexus3:3.66.0

mkdir /home/nexus-data && chown -R 200 /home/nexus-data
docker run -d -p 8081:8081 --name nexus -v /home/nexus-data:/nexus-data sonatype/nexus3:3.66.0

# 安装或重启都需要几分钟,可用下面命令打印日志查看安装进度,
# 直到出现:Started Sonatype Nexus OSS 3.66.0-02,
# 装好后,可以直接在浏览器里访问了:http://127.0.0.1:8081
docker container logs -f nexus

# 停止时,请确保留出足够的时间让数据库完全关闭
docker stop --time=120 <CONTAINER_NAME>

登录

点击首页右上角的 Sign in 按钮登录,默认用户名为 admin,默认密码则保存在 /nexus-data/admin.password 文件中:

创建 Nexus 宿主仓库(hosted)

Releases仓库配置为 Disable redeploy、Snapshots仓库配置为 Allow redeploy

创建自定义匿名角色,支持 deploy

nexus默认2个账号admin和anonymous,为了给让开发正常使用并确保安全,可以为开发新建个角色develop,权限需要nx-repository-view-maven2-*-edit和read,建立develop账号捆绑develop角色即可实现对nexus软件包的上传下载。但是这里我为了简单,直接使用 anonymous 账号来演示了。

创建 nx-anonymous-custom 角色,添加 nx-repository-view-maven2-*-edit和read 权限即可实现 deploy 发布:

把新创建的角色 nx-anonymous-custom 设置到 anonymous 用户上即可:

配置参考:https://zhuanlan.zhihu.com/p/507608150?utm_id=0

mvn clean deploy 报错:Failed to transfer file xxx.jar with status code 400

这个问题是在创建 snapshot 仓库时没有修改 Version Policy 导致的:

FAQ

1 设置第三方依赖包中依赖scope值,由runtime到compile

我们在pom文件中添加 dependency时,如果不设置 scope,那么默认使用的是 compile,例如:

<dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-core-webflow</artifactId>
    <version>5.2.0</version>
</dependency>

这个依赖包中,又包含了 org.apereo.cas:cas-server-core-util:jar:5.2.0:runtime,注意它的scope是 runtime:

mvn dependency:tree

......
......
+- org.apereo.cas:cas-server-core-webflow:jar:5.2.0:compile
[INFO] |  +- org.apereo.cas:cas-server-core-api-ticket:jar:5.2.0:compile
[INFO] |  +- org.apereo.cas:cas-server-core-api:jar:5.2.0:compile
[INFO] |  |  +- org.apereo.cas:cas-server-core-api-logout:jar:5.2.0:compile
[INFO] |  |  \- org.apereo.cas:cas-server-core-api-validation:jar:5.2.0:compile
[INFO] |  +- org.apereo.cas:cas-server-core-util:jar:5.2.0:runtime
[INFO] |  |  +- org.bitbucket.b_c:jose4j:jar:0.6.1:runtime
[INFO] |  |  +- org.apereo.cas:cas-server-core-api-util:jar:5.2.0:runtime
[INFO] |  |  +- org.apereo.cas:cas-server-core-api-web:jar:5.2.0:runtime
[INFO] |  |  +- org.apache.shiro:shiro-core:jar:1.4.0:runtime
[INFO] |  |  |  +- org.apache.shiro:shiro-lang:jar:1.4.0:runtime
[INFO] |  |  |  +- org.apache.shiro:shiro-cache:jar:1.4.0:runtime
[INFO] |  |  |  +- org.apache.shiro:shiro-crypto-hash:jar:1.4.0:runtime
[INFO] |  |  |  |  \- org.apache.shiro:shiro-crypto-core:jar:1.4.0:runtime
[INFO] |  |  |  +- org.apache.shiro:shiro-crypto-cipher:jar:1.4.0:runtime
[INFO] |  |  |  +- org.apache.shiro:shiro-config-core:jar:1.4.0:runtime
[INFO] |  |  |  +- org.apache.shiro:shiro-config-ogdl:jar:1.4.0:runtime
[INFO] |  |  |  \- org.apache.shiro:shiro-event:jar:1.4.0:runtime
[INFO] |  |  +- com.google.zxing:core:jar:3.3.0:runtime
[INFO] |  |  \- com.vdurmont:semver4j:jar:2.0.3:runtime
......
......

同事直接使用它来在项目中写代码,提交后,导致我这边一片红:

解决方法很简单,将这个 runtime 改为 compile 就可以了:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注