Есть ли что-то похожее на Python virtualenv для языков Java или JVM?
Есть что-то вроде VirtualEnv для Java?
Ответ 1
Из того, что я понимаю, virtualenv позволяет вам иметь отдельные пути установки библиотеки, эффективно разделять "виртуальные" установки Python.
В Java нет понятия "общесистемной установленной" библиотеки (*): она всегда ищет путь к классам для загружаемых библиотек. Поскольку путь к классам может быть (и должен быть!) Определен для каждого приложения, каждое приложение может выбирать и выбирать, какие библиотеки и какие версии он хочет загрузить.
Если вы опускаетесь на один уровень глубже и имеете одно приложение, которое каким-то образом нуждается в двух разных версиях одной и той же библиотеки в одно и то же время, то вы можете сделать это даже с помощью некоторой обходной схемы classpath. Это может усложниться, но это определенно возможно (OSGi - один из примеров, когда это поддерживается, даже Tomcat с двумя отдельными веб-приложениями делает это).
В описании virtualenv есть некоторые ссылки на безопасность: у Java есть довольно основательная система безопасности. В серверных приложениях она часто отключается, потому что ее проще настроить таким образом, но вы можете легко настроить, что именно Приложение Java разрешено делать.
(*) Почти есть расширения или библиотеки расширений, но они не используются много, и даже те могут легко загружаться из произвольных каталогов.
Ответ 2
Построение таких инструментов, как Ant, Maven и gradle, является самым близким к pip
или easy_install
.
Концепция virtualenv выполняется путем classpath. Таким образом, нет реальной потребности в virtualenv для Java
Ответ 3
Я знаю, что это может быть немного поздно, но Groovy/Java имеет gvm http://gvmtool.net/, который является версией Groovy Ruby renv.
Я бы с уважением согласился с Гаутамом К, luthur. Зависимость и управление версиями пакетов для проектов - это не то же самое, что изолированная автономная виртуальная среда для поддержки разных проектов.
Мои 2 цента -W
Ответ 4
Меня смущает утверждение о том, что "Java не имеет понятия" общесистемной установленной "библиотеки". Что бы вы назвали файлами jar в $JAVA_HOME/jre/lib и $JAVA_HOME/jre/lib/ext?
Независимо от того, требует ли Java "инструмент, подобный virtualenv", похоже, что-то, что позволяло вам быстро переключаться между различными средами Java (например, Java 6 с такими-то расширениями безопасности, Java 7 и т.д.), было бы удобно - даже если все, что он делал под обложками, манипулировал переменными env PATH, JAVA_HOME и CLASSPATH.
Ответ 5
Я также искал аналогичное решение для упрощения контекста переключения между проектами, использующими разные версии/настройки Maven и/или Java SDK без необходимости изменять настройки M2_HOME
и JAVA_HOME
каждый раз.
С этой целью я разработал решение, которое помогает выполнять команды mvn
с соответствующей конфигурацией, основанной на настройках для каждого проекта (сохраненных в папке .mvn
).
Смотрите: https://github.com/AlejandroRivera/maven-env
Помните, что это помогает только в том случае, если вы используете Maven для создания и/или запуска вашего проекта.
Ответ 6
Maven, вы можете явно указать, какие пакеты вы будете использовать в проекте java
Ответ 7
Java как язык не нуждается в функциях песочницы virtualenv, но язык JVM, такой как Jython, может иметь VirtualEnv для использования в разных средах без каких-либо конфликтов.
Об этом говорится в этом сообщении в блоге
Цитата:
Установите virtualenv для Jython. Просто введите "jeasy_install virtualenv". После этого вы должны иметь инструмент "virtualenv" в папка установочного bin Jython.
Поэтому при использовании Jython различные фреймворки и пакеты могут использоваться без каких-либо конфликтов с глобальными пакетами.
Ответ 8
Да (см. Http://www.jenv.be/), как и многие другие языки (Ruby, Python, Go, R, Php и т.д.).