有没有类似于用于 Java 或 JVM 语言的 Python virtualenv的东西?
8 回答
据我了解,virtualenv 使您能够拥有单独的库安装路径,有效地分离“虚拟”Python 安装。
Java 没有“系统范围内安装的”库(*)的概念:它总是在类路径中搜索要加载的库。由于可以(并且需要!)为每个应用程序定义类路径,因此每个应用程序都可以选择要加载的库和版本。
如果你更深入一层并且有一个应用程序同时需要同一个库的两个不同版本,那么你甚至可以使用一些类路径技巧来做到这一点。它可能会变得复杂,但绝对有可能(OSGi 是支持此功能的一个示例,即使具有两个独立 Web 应用程序的 Tomcat 也可以这样做)。
我在 virtualenv 描述中看到了一些对安全性的引用:Java 内置了一个非常全面的安全系统。在服务器应用程序中,它经常被关闭,因为这样配置更容易,但您可以轻松配置 Java 应用程序的确切含义允许做。
(*) 几乎,有扩展或扩展库,但它们的使用并不多,甚至可以很容易地从任意目录加载。
Ant、Maven 和 gradle 等构建工具是最接近pip
或easy_install
.
virtualenv 的概念是由类路径完成的。所以对于 Java 来说并没有真正需要 virtualenv
我知道这可能有点晚了,但是 Groovy/Java 有 gvm http://gvmtool.net/这是 Ruby 的 renv 的 Groovy 版本。
我会恭敬地同意 Gautam K,luthur。项目的依赖和包版本管理不同于一个独立的自包含虚拟环境来维护不同的项目。
我的 2 美分 -W
我对“Java没有'系统范围内安装'库的概念”的断言感到困惑。$JAVA_HOME/jre/lib 和 $JAVA_HOME/jre/lib/ext 中的 jar 文件叫什么?
不管 Java 是否“需要”像 virtualenv 这样的工具,似乎可以让你在不同的 Java 环境之间快速切换的东西(例如,带有某某安全扩展的 Java 6、Java 7 等)会很方便- 即使它实际上在幕后所做的只是操纵 PATH、JAVA_HOME 和 CLASSPATH 环境变量。
我也一直在寻找类似的解决方案来简化使用不同 Maven 版本/设置和/或 Java SDK 的项目之间的切换上下文,而无需每次都进行修改M2_HOME
和设置。JAVA_HOME
为此,我开发了一个解决方案,该解决方案有助于mvn
根据每个项目的设置(存储在.mvn
文件夹中)使用适当的配置执行命令。
见:https ://github.com/AlejandroRivera/maven-env
请注意,这仅在您使用 Maven 构建和/或运行项目时才有帮助。
是的(参见http://www.jenv.be/),就像许多其他语言(Ruby、Python、Go、R、Php 等)一样。
Maven,您可以明确指定将在 java 项目中使用哪些包
Java 作为一种语言不需要 virtualenv 的沙盒功能,但是像 Jython 这样的 JVM 语言可以让 VirtualEnv 使用不同的环境而不会产生任何冲突。
此博客文章中对此进行了概述
引用:
为 Jython 安装 virtualenv。只需输入“jeasy_install virtualenv”。完成后,您应该在 Jython 安装的 bin 文件夹中拥有一个“virtualenv”工具。
因此,在使用 Jython 时,可以使用不同的框架和包,而不会与全局包发生任何冲突。