Есть ли что-то вроде VirtualEnv для Java? - PullRequest
34 голосов
/ 04 сентября 2011

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

Ответы [ 8 ]

35 голосов
/ 04 сентября 2011

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

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

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

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

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

6 голосов
/ 08 августа 2012

Инструменты сборки, такие как Ant, Maven и gradle, наиболее близки к pip или easy_install.

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

3 голосов
/ 07 февраля 2013

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

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

Мои 2 цента -W

2 голосов
/ 21 декабря 2014

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

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

См .: https://github.com/AlejandroRivera/maven-env

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

1 голос
/ 11 июля 2014

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

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

1 голос
/ 30 июля 2012

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

0 голосов
/ 03 декабря 2018

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

0 голосов
/ 11 сентября 2011

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

Описано в этом сообщении в блоге

Цитата:

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

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

...