1 - 安装JDK
强烈建议使用 sdkman 之类的多版本管理方案来安装 jdk。
安装 JDK
列出当前系统中所有可用的 jdk 版本:
sdk list java
我偏好使用 zulu 的 openjdk 版本,所以这里以 zulu 为例。
jdk21(LTS)
虚拟线程正式发布,分代 ZGC、序列集合等新特性。
sdk install java 21.0.6-zulu
jdk17(LTS)
包含密封类(Sealed Classes)、模式匹配等新特性。
sdk install java 17.0.14-zulu
jdk11(LTS)
移除 Java EE 模块,引入 HTTP Client API、局部变量类型推断(var)等
sdk install java 11.0.26-zulu
jdk8(LTS)
jdk8 是最广泛使用的版本,支持 Lambda 表达式、Stream API 等。
sdk install java 8.0.442-zulu
使用 jdk
列出目前已经安装的 jdk 版本:
ls ~/.sdkman/candidates/java/
输出如下:
11.0.26-zulu 17.0.14-zulu 21.0.6-zulu 8.0.442-zulu current
设置默认的 jdk 版本:
sdk default java 17.0.14-zulu
在当前 shell 中使用指定版本的 jdk,可覆盖默认设置:
sdk use java 11.0.26-zulu
查看当前使用的 jdk 版本:
sdk current java
查看 jdk 版本信息:
$ java --version
openjdk 17.0.14 2025-01-21 LTS
OpenJDK Runtime Environment Zulu17.56+15-CA (build 17.0.14+7-LTS)
OpenJDK 64-Bit Server VM Zulu17.56+15-CA (build 17.0.14+7-LTS, mixed mode, sharing)
2 - 安装 Maven
安装
sdkman 安装
列出当前系统中所有可用的 maven 版本:
sdk list maven
输出为:
Available Maven Versions
4.0.0-rc-3 3.9.0 3.5.2
4.0.0-rc-2 3.8.8 3.5.0
4.0.0-rc-1 3.8.7 3.3.9
4.0.0-beta-5 3.8.6 3.3.3
4.0.0-beta-4 3.8.5 3.3.1
4.0.0-beta-3 3.8.4 3.2.5
* 3.9.9 3.8.3 3.2.3
3.9.8 3.8.2 3.2.2
3.9.7 3.8.1 3.2.1
3.9.6 3.6.3 3.1.1
3.9.5 3.6.2 3.1.0
3.9.4 3.6.1 3.0.5
3.9.3 3.6.0 3.0.4
3.9.2 3.5.4
3.9.1 3.5.3
================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
安装指定版本的 maven, 4.0 还是 rc 版本, 先用 3.9 系列:
sdk install maven 3.9.9
输出为:
Downloading: maven 3.9.9
In progress...
########################################################################################################################################### 100.0%
Installing: maven 3.9.9
Done installing!
重启 shell 或者执行下列命令重新加载 sdkman :
source ~/.sdkman/bin/sdkman-init.sh
验证 maven 安装版本:
mvn --version
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /home/sky/.sdkman/candidates/maven/current
Java version: 17.0.14, vendor: Azul Systems, Inc., runtime: /home/sky/.sdkman/candidates/java/17.0.14-zulu
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.1.0-31-amd64", arch: "amd64", family: "unix"
配置
配置代理服务器
如有需要,配置代理服务器:
export MAVEN_OPTS="-DsocksProxyHost=192.168.0.1 -DsocksProxyPort=7891"
配置 maven 仓库
maven 的 settings.xml 文件可以在多个地方配置,优先级从高到低依次为:
- 用户目录下的
.m2/settings.xml
文件 - 项目根目录下的
pom.xml
文件 - 全局配置文件, 一般在 maven 安装路径下的
conf/settings.xml
文件
在当前用户目录下创建 .m2
目录:
mkdir -p ~/.m2
cd ~/.m2
在 .m2
目录下创建 settings.xml
文件:
vi settings.xml
在 settings.xml
文件中添加如下内容:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 服务器认证信息 -->
<servers>
<!-- 用于发布到 hosted 仓库的认证 -->
<server>
<id>maven-releases</id>
<username>deployment</username>
<password>12345678</password>
</server>
<server>
<id>maven-snapshots</id>
<username>deployment</username>
<password>12345678</password>
</server>
</servers>
<!-- 镜像配置 -->
<mirrors>
<mirror>
<id>nexus-mirror</id>
<name>Nexus Repository</name>
<url>http://192.168.0.246:8081/repository/maven-public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<!-- 仓库配置 -->
<profiles>
<profile>
<id>nexus</id>
<properties>
<altSnapshotDeploymentRepository>maven-snapshots::default::http://192.168.0.246:8081/repository/maven-snapshots/</altSnapshotDeploymentRepository>
<altReleaseDeploymentRepository>maven-releases::default::http://192.168.0.246:8081/repository/maven-releases/</altReleaseDeploymentRepository>
</properties>
<repositories>
<repository>
<id>maven-releases</id>
<url>http://192.168.0.246:8081/repository/maven-releases/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>false</enabled></snapshots>
</repository>
<repository>
<id>maven-snapshots</id>
<url>http://192.168.0.246:8081/repository/maven-snapshots/</url>
<releases><enabled>false</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
验证
验证 nexus 代理仓库的缓存功能
mkdir -p ~/work/code/temp/java-demo
cd ~/work/code/temp/java-demo
git clone https://github.com/dapr/java-sdk.git
cd java-sdk
mvn install -DskipTests -Djacoco.skip=true
第一次运行时,会因为要下载大量的依赖,速度非常慢。
之后检查 nexus 的 maven-public 和 maven-central 仓库,会发现缓存了很多依赖。
验证 nexus 缓存的效果,可以先删除本地已经下载的 maven 依赖:
rm -rf ~/.m2/repository
然后再次执行 maven 命令,会发现速度非常快。
验证 nexus hosted 仓库的上传功能
指定 maven deploy 时要用的分发仓库的方式有三种:
-
在 pom.xml 中配置分发仓库
<distributionManagement> <snapshotRepository> <id>maven-snapshots</id> <url>http://192.168.0.246:8081/repository/maven-snapshots/</url> </snapshotRepository> <repository> <id>maven-releases</id> <url>http://192.168.0.246:8081/repository/maven-releases/</url> </repository> </distributionManagement>
这个方式要在每个项目的 pom.xml 中配置分发仓库,如果项目很多,配置起来比较麻烦。不推荐。
-
在命令行中强制指定仓库
mvn deploy -DaltDeploymentRepository=maven-snapshots::default::http://192.168.0.246:8081/repository/maven-snapshots/
这个方式每次执行 maven deploy 命令时都要指定仓库,也嫌麻烦。不推荐。
-
在 settings.xml 中配置分发仓库
在配置 profile 时,可以设置 altSnapshotDeploymentRepository 和 altReleaseDeploymentRepository 属性,指定分发仓库。
<profiles> <profile> <id>nexus</id> <properties> <altSnapshotDeploymentRepository>maven-snapshots::default::http://192.168.0.246:8081/repository/maven-snapshots/</altSnapshotDeploymentRepository> <altReleaseDeploymentRepository>maven-releases::default::http://192.168.0.246:8081/repository/maven-releases/</altReleaseDeploymentRepository> </properties> <repositories> </repositories> </profile> </profiles>
这样执行 maven deploy 命令时,会使用配置的分发仓库。非常方便。
注意: 要在项目的 pom.xml 中配置使用 maven-deploy-plugin 插件,不要使用 nexus-staging-maven-plugin。
<project>
......
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.4</version>
</plugin>
</plugins>
</build>
</project>