这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

编程语言

安装和配置各种编程语言的开发环境: Java,Golang,Rust,Python,Nodejs,Python

1 - Java 编程语言

安装和配置 Java 的开发环境: sdkman, JDK, Maven

1.1 - 安装JDK

使用 sdkman 安装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)

1.2 - 安装 Maven

安装配置 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 文件可以在多个地方配置,优先级从高到低依次为:

  1. 用户目录下的 .m2/settings.xml 文件
  2. 项目根目录下的 pom.xml 文件
  3. 全局配置文件, 一般在 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 时要用的分发仓库的方式有三种:

  1. 在 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 中配置分发仓库,如果项目很多,配置起来比较麻烦。不推荐。

  2. 在命令行中强制指定仓库

    mvn deploy -DaltDeploymentRepository=maven-snapshots::default::http://192.168.0.246:8081/repository/maven-snapshots/
    

    这个方式每次执行 maven deploy 命令时都要指定仓库,也嫌麻烦。不推荐。

  3. 在 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>

2 - Golang 编程语言

安装和配置 Golang 的开发环境

参考:

https://skyao.io/learning-golang/docs/develop/installation/

包括安装 golang 并配置 nexus 的 golang proxy 仓库来加速构建。

3 - Rust编程语言

安装和配置 Rust 的开发环境

参考:

https://skyao.io/learning-rust/docs/installation/linux/

4 - Python 编程语言

安装和配置 Python 的开发环境: python / pip

参考:

https://skyao.io/learning-python/docs/installation/linux/

包括使用 pyevn 管理多个 python 版本,配置 pip 镜像源和使用 nexus 代理仓库。

5 - Nodejs 编程语言

安装和配置 Nodejs 的开发环境: nodejs / npm

安装

在以下网站下载nodejs的安装包:

https://nodejs.org/en/download

按照提示进行安装即可:

# Download and install nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash

# in lieu of restarting the shell
\. "$HOME/.nvm/nvm.sh"

# Download and install Node.js:
nvm install 22

# Verify the Node.js version:
node -v # Should print "v22.14.0".
nvm current # Should print "v22.14.0".

# Verify npm version:
npm -v # Should print "10.9.2".

安装完成后验证:

$ node -v
v22.14.0

$ nvm current
v22.14.0

$ npm -v 
10.9.2

这里用了 nvm 来进行跨平台的 node 多版本管理。

“nvm” is a cross-platform Node.js version manager

升级 npm

有时会提示 npm 有新版本,可以升级:

npm notice
npm notice New major version of npm available! 10.9.2 -> 11.3.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.3.0
npm notice To update run: npm install -g npm@11.3.0
npm notice

升级:

npm install -g npm@11.3.0

配置 npm 镜像源

查看当前默认的镜像源:

npm config get registry

输出为:

https://registry.npmjs.org/

查看 npm 镜像源的速度

安装 nrm 来测试各源的速度:

npm install -g nrm

列出可用源:

nrm ls

输出为:

  npm ---------- https://registry.npmjs.org/
  yarn --------- https://registry.yarnpkg.com/
  tencent ------ https://mirrors.tencent.com/npm/
  cnpm --------- https://r.cnpmjs.org/
  taobao ------- https://registry.npmmirror.com/
  npmMirror ---- https://skimdb.npmjs.com/registry/
  huawei ------- https://repo.huaweicloud.com/repository/npm/

切换源(例如切换到淘宝源):

nrm use taobao

测试各源速度:

nrm test

输出为:

  npm ---------- 171 ms
  yarn --------- 125 ms
  tencent ------ 472 ms
  cnpm --------- 175 ms
  taobao ------- 113 ms
  npmMirror ---- 1516 ms
  huawei ------- 461 ms

可以看到淘宝源的速度最快,切换过去:

nrm use taobao

此时打开文件 ~/.npmrc :

vi ~/.npmrc

可以看到淘宝的 npm 镜像网站 registry.npmmirror.com 已经配置好了:

home=https://npmmirror.com
registry=https://r.cnpmjs.org/

配置 npm 镜像源

也可以手工修改 ~/.npmrc 文件:

vi ~/.npmrc

添加以下内容:

home=https://cnpmjs.org
registry=https://r.cnpmjs.org/

配置 nexus 代理仓库

新建代理仓库

在 nexus 中新建两个 npm proxy 代理仓库:

再新建一个名为 npm-public 的 npm group 仓库,将上面两个仓库加入其中,顺序为:

  • npm-proxy-taobao
  • npm-proxy-cnpm

使用代理仓库

使用代理仓库:

vi ~/.npmrc

设置为以下内容:

home=http://192.168.0.246:8081
registry=http://192.168.0.246:8081/repository/npm-public/

验证代理

安装一些东西:

npm install --save-dev autoprefixer
npm install --save-dev postcss-cli
npm install -D postcss

然后去看 nexus 的代理仓库:

可以看到代理仓库中已经有了这些包。