Подтвердить что ты не робот

Есть что-то вроде VirtualEnv для Java?

Есть ли что-то похожее на Python virtualenv для языков Java или JVM?

4b9b3361

Ответ 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 и т.д.).