java python virtualenv jvm-languages

¿Hay algo como VirtualEnv para Java?



python jvm-languages (7)

Estoy confundido por la afirmación de que "Java no tiene el concepto de una ''biblioteca instalada en todo el sistema''". ¿Cómo llamarías los archivos jar en $ JAVA_HOME / jre / lib y $ JAVA_HOME / jre / lib / ext?

Independientemente de si Java "necesita" o no una herramienta como virtualenv, parece que algo que le permite cambiar rápidamente entre diferentes entornos Java (por ejemplo, Java 6 con tales y tales extensiones de seguridad, Java 7, etc.) sería útil. - incluso si todo lo que realmente estaba haciendo bajo las cubiertas era manipular las variables de entorno PATH, JAVA_HOME y CLASSPATH.

¿Hay algo similar a Python virtualenv para Java o JVM Languages?


Java como lenguaje no necesita las características de sandboxing de virtualenv, pero un lenguaje JVM como Jython puede tener VirtualEnv para usar diferentes entornos sin ningún conflicto.

Se describe en esta publicación de blog

Citar:

Obtenga virtualenv instalado para Jython. Simplemente escriba "jeasy_install virtualenv". Una vez que termine, debe tener una herramienta ''virtualenv'' en la carpeta bin de la instalación Jython.

Por lo tanto, al usar Jython, se pueden usar diferentes marcos y paquetes sin ningún conflicto con los paquetes globales.


Maven, puedes especificar explícitamente qué paquetes usarías en un proyecto de Java


Por lo que entiendo, virtualenv le permite tener rutas de instalación de biblioteca separadas, separar efectivamente las instalaciones "virtuales" de Python.

Java no tiene el concepto de una biblioteca "instalada en todo el sistema" (*) : siempre busca en el classpath las bibliotecas que se cargarán. Dado que el classpath puede definirse (¡y debe definirse!) Para cada aplicación, cada aplicación puede escoger y elegir qué bibliotecas y qué versiones desea cargar.

Si desciende un nivel más profundo y tiene una sola aplicación que de alguna manera necesita dos versiones diferentes de la misma biblioteca al mismo tiempo, puede hacerlo incluso con algún truco de classpath. Puede ser complicado, pero definitivamente es posible (OSGi es un ejemplo en el que esto es compatible, incluso Tomcat con dos aplicaciones de Internet separadas lo hace).

He visto algunas referencias a la seguridad en la descripción de virtualenv: Java tiene un sistema de seguridad muy completo. En aplicaciones de servidor a menudo se apaga porque es más fácil de configurar de esta manera, pero se puede configurar fácilmente qué es exactamente una aplicación de Java. permitido hacer

(*) Casi, hay extensiones o bibliotecas de extensión , pero no se usan mucho e incluso pueden cargarse fácilmente desde directorios arbitrarios.


Sé que esto puede ser un poco tarde, pero Groovy / Java tiene gvm http://gvmtool.net/ que es la versión Groovy del renv de Ruby.

Estoy respetuosamente de acuerdo con Gautam K, luthur. La administración de dependencias y versiones de paquetes para proyectos no es lo mismo que un entorno virtual autónomo aislado para mantener un proyecto diferente.

Mis 2 centavos -W


También he estado buscando una solución similar para simplificar el cambio de contexto entre proyectos que usan diferentes versiones / configuraciones de Maven y / o SDK de Java sin tener que modificar las configuraciones de M2_HOME y JAVA_HOME todo el tiempo.

Con este fin, desarrollé una solución que ayuda a ejecutar comandos mvn con la configuración adecuada basada en configuraciones por proyecto (almacenadas en una carpeta .mvn ).

Ver: https://github.com/AlejandroRivera/maven-env

Tenga en cuenta que esto solo ayuda si está usando Maven para construir y / o ejecutar su proyecto.


Las herramientas de compilación como Ant, Maven y gradle son lo más parecido a pip o easy_install .

El concepto de virtualenv lo hace el classpath. Entonces no hay una necesidad real de virtualenv para Java