Pregunta

¿Hay algo similar a Python? virtualenv ¿Para idiomas Java o JVM?

¿Fue útil?

Solución

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

Java no tiene el concepto de una biblioteca "instalada en todo el sistema"(*): Siempre busca en la clase de las bibliotecas que se cargan las bibliotecas. Dado que el ClassPath puede estar (y debe ser definido para cada aplicación, cada aplicación puede elegir qué bibliotecas y qué versiones desea cargar.

Si baja 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, entonces puede hacerlo con algunos trucos de clases. Puede complicarse, pero definitivamente es posible (OSGI es un ejemplo en el que esto es compatible, incluso Tomcat con dos aplicaciones web separadas hace esto).

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

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

Otros consejos

Construir herramientas como Ant, Maven y Gradle son lo más cercano a pip o easy_install.

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

Sé que esto puede ser un poco tarde, pero Groovy/Java tiene GVM http://gvmtool.net/ que es la versión maravillosa de Ruby's Renv.

Estaría respetuosamente de acuerdo con Gautam K, Luthur. La dependencia y la gestión de la versión de paquete para proyectos no son lo mismo que un entorno virtual autónomo aislado para mantener diferentes proyectos.

Mis 2 centavos -W

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

Para este fin, desarrollé una solución que ayuda a ejecutar mvn comandos con la configuración apropiada basada en por proyecto configuración (almacenada en un .mvn carpeta).

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

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

Maven, puede especificar explícitamente qué paquetes usaría en un proyecto Java

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" una herramienta como VirtualEnv, parece que algo que le permitió cambiar rápidamente entre diferentes entornos de Java (por ejemplo, Java 6 con tales extensiones de seguridad, Java 7, etc.) sería útil - Incluso si todo lo que realmente estaba haciendo debajo de las portadas era manipular las variables de la ruta, java_home y classpath env.

Java como idioma 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

Cotizar:

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

Entonces, cuando se usa Jython, diferentes marcos y paquetes se pueden usar sin ningún conflicto con los paquetes globales.

Sí (ver http://www.jenv.be/), como muchos otros idiomas (Ruby, Python, Go, R, PHP, etc.).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top