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

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

7 ответов

Решение

Насколько я понимаю, virtualenv позволяет вам иметь отдельные пути установки библиотек, эффективно отделяя "виртуальные" установки Python.

У Java нет концепции "общесистемной установленной" библиотеки(*): она всегда ищет путь к классам для библиотек, которые будут загружены. Поскольку classpath может быть (и должен быть!) Определен для каждого приложения, каждое приложение может выбирать, какие библиотеки и какие версии оно хочет загрузить.

Если вы спуститесь на один уровень глубже и у вас будет одно приложение, которому каким-то образом понадобятся две разные версии одной и той же библиотеки одновременно, то вы можете сделать это даже с помощью некоторой хитрости пути к классам. Это может быть сложно, но это определенно возможно (OSGi - один из примеров, где это поддерживается, даже Tomcat с двумя отдельными веб-приложениями делает это).

Я видел несколько ссылок на безопасность в описании virtualenv: в Java встроена довольно тщательная система безопасности. В серверных приложениях она часто отключается, потому что так проще настроить, но вы можете легко настроить, что именно является Java-приложением. разрешено делать

(*) Почти есть расширения или библиотеки расширений, но они не используются часто, и даже они могут быть легко загружены из произвольных каталогов.

Инструменты сборки, такие как Ant, Maven и Gradle, являются самыми близкими pip или же easy_install,

Понятие virtualenv сделано классным путем. Так что в Java нет реальной необходимости в virtualenv

Да (см. http://www.jenv.be/), как и многие другие языки (Ruby, Python, Go, R, Php и т. Д. И т. Д.).

Я также искал подобное решение для упрощения переключения контекста между проектами, которые используют разные версии / настройки Maven и / или Java SDK без необходимости изменения M2_HOME а также JAVA_HOME настройки каждый раз.

С этой целью я разработал решение, которое помогает выполнить mvn Команды с соответствующей конфигурацией, основанной на настройках проекта (хранятся в .mvn папка).

Смотрите: https://github.com/AlejandroRivera/maven-env

Имейте в виду, что это помогает, только если вы используете Maven для создания и / или запуска проекта.

Я знаю, что это может быть немного поздно, но в Groovy/Java есть gvm http://gvmtool.net/ который является Groovy-версией Ruby Renv.

Я бы с уважением согласился с Gautam K, luthur. Зависимость и управление версиями пакетов для проектов - это не то же самое, что изолированная автономная виртуальная среда для поддержки другого проекта.

Мои 2 цента -W

Меня смущает утверждение, что "в Java нет концепции" общесистемной установленной "библиотеки". Как бы вы назвали файлы jar в $JAVA_HOME/jre/lib и $JAVA_HOME/jre/lib/ext?

Независимо от того, нуждается ли Java в таком инструменте, как virtualenv, кажется, что то, что позволило бы вам быстро переключаться между различными средами Java (например, Java 6 с такими-то расширениями безопасности, Java 7 и т. Д.), Было бы удобно - даже если все, что он на самом деле делал под прикрытием, это манипулирование переменными env PATH, JAVA_HOME и CLASSPATH.

Maven, вы можете явно указать, какие пакеты вы будете использовать в проекте Java

Java как язык не нуждается в функциях песочницы в virtualenv, но язык JVM, такой как Jython, может иметь VirtualEnv для использования в различных средах без каких-либо конфликтов.

Это изложено в этом сообщении в блоге

Цитата:

Установите virtualenv для Jython. Просто введите "jeasy_install virtualenv". Как только это закончится, вы должны иметь инструмент virtualenv в папке bin установки Jython.

Таким образом, при использовании Jython могут использоваться разные фреймворки и пакеты без какого-либо конфликта с глобальными пакетами.

Другие вопросы по тегам