Есть ли pip/easy_install для Scala?

Я хочу организовать пакеты Scala и любить, как Python решает эту проблему с помощью pip.

Вы можете рекомендовать аналогичный инструмент для управления пакетами Scala?

EDIT: Я ищу легкую установку новых пакетов со всеми зависимостями, такими как

 >>> pip install <a_package> # installs a_package with all dependencies.

Ответ 1

Наиболее похожим образом, вероятно, Scala Инструмент сборки. В частности, Зависимости библиотек. Экосистема Java включает в себя множество библиотек и инструменты сборки, Scala построен на Java. Таким образом, вы получаете возможность использовать такие вещи, как -

Кроме того, поскольку все выполняется внутри виртуальной машины; нет установки "системы". Вы можете начать с CLASSPATH и более подробно изучить загрузку классов.

#!/bin/sh
# From http://www.scalaclass.com/node/10 - CLASSPATH
L=`dirname $0`/../lib
cp=`echo $L/*.jar|sed 's/ /:/g'`
exec scala -classpath "$cp" "$0" "[email protected]"
!#
import com.my.Goodness
val goodness = new Goodness
world.hello

Ответ 2

Pythonistas устанавливает системные пакеты, которые затем используются всеми проектами python. Это приводит к множеству проблем, которые virtualenv пытается решить. Scala ребята и вообще люди Java имеют определение для каждого проекта, которое написано для инструмента управления зависимостями: либо mvn (xml), sbt (scala), gradle (groovy) и т.д.

Большинство этих инструментов имеют системный кеш, поэтому обычно он загружает некоторую версию зависимости только один раз, а затем помещает ее в определенное место на вашем диске. Когда вам нужно запустить/собрать вашу программу java или Scala, она создаст так называемую переменную CLASSPATH, которая состоит из патчей в нужные библиотеки. Затем переменная CLASSPATH (aka PYTHONPATH в мире python) используется средой выполнения для поиска необходимых частей. Опять же, CLASSPATH сильно варьируется от проекта к проекту, тогда как PYTHONPATH является довольно постоянным. Я действительно верю, что могут быть инструменты, которые выполняют ту же самую работу, но это не принято в мире JVM.