是否有类似VirtualEnv for Java的东西?

时间:2011-09-04 15:15:36

标签: java python virtualenv jvm-languages

对于Java或JVM语言,是否有类似于Python virtualenv的内容?

8 个答案:

答案 0 :(得分:34)

根据我的理解,virtualenv使您可以拥有单独的库安装路径,有效地分离“虚拟”Python安装。

Java没有“系统范围安装”库(*)的概念:它总是在类路径中搜索要加载的库。由于类路径可以(并且需要!)为每个应用程序定义,因此每个应用程序都可以选择要加载的库和哪个版本。

如果你深入到一个级别并且只有一个应用程序同时需要同一个库的两个不同版本,那么你甚至可以用一些类路径技巧来做。它可能变得复杂,但它绝对可能(OSGi是支持它的一个例子,即使Tomcat有两个独立的web应用程序也可以这样做)。

我在virtualenv描述中看到了一些安全性的引用:Java内置了一个非常彻底的安全系统。在服务器应用程序中,它经常被关闭,因为它更容易以这种方式配置,但是你可以轻松配置到底是什么允许Java应用程序。

(*)几乎有extensions or extension libraries,但它们没有被大量使用,甚至可以从任意目录轻松加载。

答案 1 :(得分:6)

像Ant,Maven和gradle这样的构建工具是最接近pipeasy_install的工具。

virtualenv的概念是由类路径完成的。所以没有真正需要virtualenv for Java

答案 2 :(得分:3)

我知道这可能有点晚了,但Groovy / Java有gvm http://gvmtool.net/这是Ruby的renv的Groovy版本。

我会尊重Gautam K,Luthur。项目的依赖关系和包版本管理与维护不同项目的独立自包含虚拟环境不同。

我的2美分 -W

答案 3 :(得分:2)

我对“Java没有”系统范围内安装的“库的概念”的断言感到困惑。你会在$ JAVA_HOME / jre / lib和$ JAVA_HOME / jre / lib / ext中调用jar文件?

无论Java是否“需要”像virtualenv这样的工具,似乎有些东西允许您在不同的Java环境之间快速切换(例如Java 6具有类似的安全扩展,Java 7等)会很方便 - 即使它实际上只是在幕后做了操作PATH,JAVA_HOME和CLASSPATH env变量。

答案 4 :(得分:2)

我一直在寻找类似的解决方案来简化使用不同Maven版本/设置和/或Java SDK的项目之间的切换上下文,而不必每次都修改M2_HOMEJAVA_HOME设置。 / p>

为此,我开发了一个解决方案,可帮助执行基于每个项目设置(存储在mvn文件夹中)的相应配置的.mvn命令。

请参阅:https://github.com/AlejandroRivera/maven-env

请注意,只有在您使用Maven构建和/或运行项目时,这才有用。

答案 5 :(得分:1)

Maven,您可以明确指定要在java项目中使用的包

答案 6 :(得分:0)

Java作为一种语言不需要virtualenv的沙盒功能,但像Jython这样的JVM语言可以让VirtualEnv使用不同的环境而不会产生任何冲突。

概述于this blog post

引用:

  

为Jython安装virtualenv。只需输入“jeasy_install   virtualenv“。一旦完成,你应该有一个'virtualenv'工具   Jython安装的bin文件夹。

因此,当使用Jython时,可以使用不同的框架和包,而不会与全局包冲突。

答案 7 :(得分:0)

是的(请参阅http://www.jenv.be/),就像许多其他语言(Ruby,Python,Go,R,Php等)一样。