Управление несколькими комплектами разработки программного обеспечения с помощью SDKMAN в Linux
Вы разработчик и часто тестируете приложения на разных SDK? У меня для вас хорошие новости! SDKMAN — это инструмент CLI, который помогает легко управлять несколькими комплектами разработки программного обеспечения в Linux. Он обеспечивает удобный способ установки, переключения, составления списка и удаления кандидатов. Используя SDKMAN, мы можем легко управлять параллельными версиями нескольких SDK. Это позволяет разработчикам устанавливать комплекты разработки программного обеспечения для JVM, такие как Java, Groovy, Scala, Kotlin и Ceylon. Также поддерживаются Ant, Gradle, Grails, Maven, SBT, Spark, Spring Boot, Vert.x и многие другие. SDKMAN — это бесплатная, легкая утилита с открытым исходным кодом, написанная на Bash.
Установите SDKMAN в Linux
Установка SDKMAN тривиальна. Сначала убедитесь, что у вас установлены приложения zip и unzip. Он доступен в репозиториях по умолчанию большинства дистрибутивов Linux. Например, чтобы установить unzip в системах на базе Debian, просто запустите:
sudo apt-get install zip unzip
Затем установите SDKMAN с помощью команды:
curl -s "https://get.sdkman.io" | bash
Это так просто. Эта команда установит SDKMAN в папку $HOME/.sdkman.
Пример вывода:
-+syyyyyyys:
`/yho:` -yd.
`/yh/` +m.
.oho. hy .`
.sh/` :N` `-/o` `+dyyo:.
.yh:` `M- `-/osysoym :hs` `-+sys: hhyssssssssy+
.sh:` `N: ms/-`` yy.yh- -hy. `.N-````````+N.
`od/` `N- -/oM- ddd+` `sd: hNNm -N:
:do` .M. dMMM- `ms. /d+` `NMMs `do
.yy- :N` ```mMMM. - -hy. /MMM: yh
`+d+` `:/oo/` `-/osyh/ossssssdNMM` .sh: yMMN` /m.
-dh- :ymNMMMMy `-/shmNm-`:N/-.`` `.sN /N- `NMMy .m/
`oNs` -hysosmMMMMydmNmds+-.:ohm : sd` :MMM/ yy
.hN+ /d: -MMMmhs/-.` .MMMh .ss+- `yy` sMMN` :N.
:mN/ `N/ `o/-` :MMMo +MMMN- .` `ds mMMh do
/NN/ `N+....--:/+oooosooo+:sMMM: hMMMM: `my .m+ -MMM+ :N.
/NMo -+ooooo+/:-....`...:+hNMN. `NMMMd` .MM/ -m: oMMN. hs
-NMd` :mm -MMMm- .s/ -MMm. /m- mMMd -N.
`mMM/ .- /MMh. -dMo -MMMy od. .MMMs..---yh
+MMM. sNo`.sNMM+ :MMMM/ sh`+MMMNmNm+++-
mMMM- /--ohmMMM+ :MMMMm. `hyymmmdddo
MMMMh. ```` `-+yy/`yMMM/ :MMMMMy -sm:.``..-:-.`
dMMMMmo-.``````..-:/osyhddddho. `+shdh+. hMMM: :MmMMMM/ ./yy/` `:sys+/+sh/
.dMMMMMMmdddddmmNMMMNNNNNMMMMMs sNdo- dMMM- `-/yd/MMMMm-:sy+. :hs- /N`
`/ymNNNNNNNmmdys+/::----/dMMm: +m- mMMM+ohmo/.` sMMMMdo- .om: `sh
`.-----+/.` `.-+hh/` `od. NMMNmds/ `mmy:` +mMy `:yy.
/moyso+//+ossso:. .yy` `dy+:` .. :MMMN+---/oys:
/+m: `.-:::-` /d+ +MMMMMMMNh:`
+MN/ -yh. `+hddhy+.
/MM+ .sh:
:NMo -sh/
-NMs `/yy:
.NMy `:sh+.
`mMm` ./yds-
`dMMMmyo:-.````.-:oymNy:`
+NMMMMMMMMMMMMMMMMms:`
-+shmNMMMNmdy+:`
Now attempting installation...
Looking for a previous installation of SDKMAN...
Looking for unzip...
Looking for zip...
Looking for curl...
Looking for sed...
Installing SDKMAN scripts...
Create distribution directories...
Getting available candidates...
Prime the config file...
Download script archive...
######################################################################## 100.0%
Extract script archive...
Install scripts...
Set version to 5.8.3+506 ...
Attempt update of interactive bash profile on regular UNIX...
Added sdkman init snippet to /home/ostechnix/.bashrc
Attempt update of zsh profile...
Updated existing /home/ostechnix/.zshrc
All done!
Please open a new terminal, or run the following in the existing one:
source "/home/ostechnix/.sdkman/bin/sdkman-init.sh"
Then issue the following command:
sdk help
Enjoy!!!
После завершения установки выполните следующую команду для инициализации SDKMAN:
source "$HOME/.sdkman/bin/sdkman-init.sh"
Если вы хотите установить его в любое место по вашему выбору, отличное от $HOME/.sdkman, например /usr/local/, выполните:
export SDKMAN_DIR="/usr/local/sdkman" && curl -s "https://get.sdkman.io" | bash
Убедитесь, что у вашего пользователя есть полные права доступа к этой папке.
Наконец, проверьте, успешна ли установка, с помощью команды:
sdk version
Пример вывода:
==== BROADCAST =================================================================
* 2020-06-27: sbt 1.3.13 released on SDKMAN! #scala
* 2020-06-26: Micronaut 2.0.0 released on SDKMAN! #micronautfw
* 2020-06-22: Micronaut 2.0.0.RC2 released on SDKMAN! #micronautfw
================================================================================
SDKMAN 5.8.3+506
Поздравляем! SDKMAN установлен. Давайте продолжим и посмотрим, как устанавливать SDK и управлять ими.
Управление несколькими комплектами разработки программного обеспечения с помощью SDKMAN
Список всех доступных комплектов разработки программного обеспечения (SDK)
Чтобы просмотреть список всех доступных кандидатов (SDK), запустите:
sdk list
Пример вывода:
================================================================================
q-quit /-search down
j-down ?-search up
k-up h-help
--------------------------------------------------------------------------------
Ant (1.10.1) https://ant.apache.org/
Apache Ant is a Java library and command-line tool whose mission is to drive
processes described in build files as targets and extension points dependent
upon each other. The main known usage of Ant is the build of Java applications.
Ant supplies a number of built-in tasks allowing to compile, assemble, test and
run Java applications. Ant can also be used effectively to build non Java
applications, for instance C or C++ applications. More generally, Ant can be
used to pilot any type of process which can be described in terms of targets and
tasks.
$ sdk install ant
--------------------------------------------------------------------------------
AsciidoctorJ (2.3.1) http://asciidoctor.org/
AsciidoctorJ is the official library for running Asciidoctor on the JVM. Using
AsciidoctorJ, you can convert AsciiDoc content or analyze the structure of a
parsed AsciiDoc document from Java and other JVM languages.
:
Как видите, SDKMAN перечисляет по одному кандидату вместе с описанием кандидата, официальным сайтом и командой установки. Нажмите клавишу ENTER, чтобы просмотреть список следующих кандидатов. Чтобы закрыть его, нажмите q.
Установите новый SDK
Чтобы установить SDK, например Java JDK, запустите:
sdk install java
Пример вывода:
Downloading: java 11.0.7.hs-adpt
In progress...
################################################################################################################################################################### 100.0%################################################################################################################################################################### 100.0%
Repackaging Java 11.0.7.hs-adpt...
Done repackaging...
Installing: java 11.0.7.hs-adpt
Done installing!
Setting java 11.0.7.hs-adpt as default.
Мы только что установили Java. Давайте проверим его версию:
$ java --version
openjdk 11.0.7 2020-04-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.7+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.7+10, mixed mode)
Если уже имеется несколько SDK, будет предложено установить, хотите ли вы, чтобы текущая установленная версия была установлена как по умолчанию. Если ответить Да, текущая установленная версия будет установлена по умолчанию.
Установите конкретную версию SDK
Чтобы установить определенную версию SDK, выполните следующие действия:
sdk install ant 1.10.1
Приведенная выше команда установит Ant версии 1.10.1.
Если у вас уже есть локальная установка определенного кандидата, вы можете установить его как локальную версию, как показано ниже.
sdk install groovy 3.0.0-SNAPSHOT /path/to/groovy-3.0.0-SNAPSHOT
Список версий-кандидатов
Чтобы перечислить конкретные версии кандидатов:
sdk list ant
Пример вывода:
================================================================================
Available Ant Versions
================================================================================
> * 1.10.1
1.10.0
1.9.9
1.9.8
1.9.7
================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
Как вы видите в приведенном выше выводе, ant 1.10.1 имеет префикс «>» и «*». Здесь > указывает, что эта версия используется в данный момент, а * указывает, что это версия по умолчанию.
Установить SDK по умолчанию
Как я уже говорил, если вы установили несколько версий, SDKMAN спросит, хотите ли вы, чтобы текущая установленная версия была установлена как по умолчанию. Вы можете ответить «Да», чтобы установить его по умолчанию. Кроме того, вы можете сделать это позже, используя следующую команду:
sdk default ant 1.9.9
Приведенная выше команда установит Apache Ant версии 1.9.9 по умолчанию.
Используйте специальный SDK для текущей оболочки.
Вы можете выбрать конкретную версию-кандидат для использования в текущей оболочке.
sdk use ant 1.9.9
Обратите внимание, что при этом данная версия будет использоваться только в текущем сеансе. Чтобы сделать его постоянным, используйте команду «по умолчанию», как показано выше.
Версии отображения, используемые в настоящее время
Чтобы проверить, что в данный момент используется кандидатом, например Java, запустите:
$ sdk current java
Using java version 8.0.172-zulu
Чтобы проверить, что сейчас используется для всех кандидатов, например Java, запустите:
$ sdk current
Using:
ant: 1.10.1
java: 8.0.172-zulu
Обновить кандидатов
Чтобы обновить устаревшего кандидата, выполните:
sdk upgrade scala
Вы также можете проверить, что у всех кандидатов устарело.
sdk upgrade
Офлайн-режим
SDKMAN имеет функцию автономного режима, которая позволяет SDKMAN работать в автономном режиме. Вы можете включить или отключить автономный режим в любое время, используя следующие команды:
sdk offline enable
sdk offline disable
Удаление установленных SDK
Чтобы удалить установленный SDK, запустите:
sdk uninstall ant 1.9.9
Получать помощь
Чтобы отобразить раздел справки, запустите:
$ sdk help
Usage: sdk <command> [candidate] [version]
sdk offline <enable|disable>
commands:
install or i <candidate> [version]
uninstall or rm <candidate> <version>
list or ls [candidate]
use or u <candidate> [version]
default or d <candidate> [version]
current or c [candidate]
upgrade or ug [candidate]
version or v
broadcast or b
help or h
offline [enable|disable]
selfupdate [force]
update
flush <broadcast|archives|temp>
candidate : the SDK to install: groovy, scala, grails, gradle, kotlin, etc.
use list command for comprehensive list of candidates
eg: $ sdk list
version : where optional, defaults to latest stable if not provided
eg: $ sdk install groovy
Обновить SDKMAN
Следующая команда устанавливает новую версию SDKMAN, если она доступна.
sdk selfupdate
SDKMAN также будет периодически проверять наличие обновлений и сообщать вам инструкции по обновлению.
WARNING: SDKMAN is out-of-date and requires an update.
sdk update
Adding new candidates(s): scala
Удалить кеш
Рекомендуется время от времени очищать кеш, содержащий загруженные двоичные файлы SDK. Для этого просто запустите:
sdk flush archives
Также полезно очистить временную папку, чтобы сэкономить место:
sdk flush temp
Удалить SDKMAN
Если SDKMAN вам не нужен или он вам не нравится, удалите его, как показано ниже.
tar zcvf ~/sdkman-backup_$(date +%F-%kh%M).tar.gz -C ~/ .sdkman
rm -rf ~/.sdkman
Наконец, откройте файл .bashrc (или .bash_profile или .profile):
nano ~/.bashrc
Найдите и удалите следующие строки.
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/home/ostechnix/.sdkman"
[[ -s "/home/ostechnix/.sdkman/bin/sdkman-init.sh" ]] && source "/home/ostechnix/.sdkman/bin/sdkman-init.sh"
Если вы используете ZSH, удалите приведенные выше строки из файла .zshrc.
Связанное чтение:
- Как управлять несколькими версиями Java с помощью jEnv в Linux
- Как управлять несколькими версиями Python с помощью Pyenv в Linux
Ресурсы:
- Веб-сайт SDKMAN
- Репозиторий SDKMAN GitHub