Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有类似VirtualEnv for Java的东西吗?_Java_Python_Virtualenv_Jvm Languages - Fatal编程技术网

有类似VirtualEnv for Java的东西吗?

有类似VirtualEnv for Java的东西吗?,java,python,virtualenv,jvm-languages,Java,Python,Virtualenv,Jvm Languages,Java或JVM语言是否有类似于Python的东西?据我所知,virtualenv使您能够拥有单独的库安装路径,有效地分离“虚拟”Python安装 Java没有“系统范围安装”库(*)的概念:它总是在类路径中搜索要加载的库。由于可以(并且需要!)为每个应用程序定义类路径,因此每个应用程序都可以选择要加载的库和版本 如果您深入一层,并且有一个应用程序不知何故同时需要同一库的两个不同版本,那么您甚至可以通过一些类路径技巧来实现这一点。它可能会变得复杂,但这绝对是可能的(OSGi就是一个支持这一点的例

Java或JVM语言是否有类似于Python的东西?

据我所知,virtualenv使您能够拥有单独的库安装路径,有效地分离“虚拟”Python安装

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

如果您深入一层,并且有一个应用程序不知何故同时需要同一库的两个不同版本,那么您甚至可以通过一些类路径技巧来实现这一点。它可能会变得复杂,但这绝对是可能的(OSGi就是一个支持这一点的例子,即使Tomcat有两个独立的Web应用程序也可以做到这一点)

我在virtualenv描述中看到了一些关于安全性的参考:Java内置了一个非常全面的安全系统。在服务器应用程序中,它经常被关闭,因为这样配置更容易,但您可以轻松地配置Java应用程序到底可以做什么


(*)几乎有,但使用不多,甚至可以从任意目录轻松加载。

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

这是在

引述:

为Jython安装virtualenv。只需键入“jeasy_安装” 虚拟的”。一旦完成,你应该有一个“virtualenv”工具 Jython安装的bin文件夹


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

Maven,您可以明确指定在java项目中使用哪些软件包,如Ant、Maven和gradle等构建工具最接近于
pip
easy\u install


virtualenv的概念是通过类路径实现的。因此,对于Java来说,没有真正需要VirtualNV,我知道这可能有点晚了,但是Groovy/Java有gvm,它是Ruby的renv的Groovy版本

我恭敬地同意乔塔姆·K·路德的观点。项目的依赖项和包版本管理不同于一个独立的自包含虚拟环境来维护不同的项目

我的2美分
-我被“Java没有‘系统范围安装’库的概念”的断言弄糊涂了。$JAVA_HOME/jre/lib和$JAVA_HOME/jre/lib/ext中的jar文件叫什么


不管Java是否“需要”virtualenv这样的工具,似乎允许您在不同的Java环境之间快速切换的东西(例如带有这样或那样的安全扩展的Java 6、Java 7等)会很方便-即使它实际上在幕后操纵的只是路径、Java_HOME、,和CLASSPATH env变量。

我也一直在寻找类似的解决方案,以简化使用不同Maven版本/设置和/或Java SDK的项目之间的上下文切换,而无需每次修改
M2_HOME
Java_HOME
设置

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

见:


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

是的(请参阅),就像许多其他语言(Ruby、Python、Go、R、Php等)一样。

Maven是一个构建工具,与virtualenv没有任何共同之处!这是一个完全不同的概念。!!!!!!!!maven配置文件可以指定您将在特定java项目中使用的版本和软件包,不是吗!!!!!!!!!!!!!!!!OP的问题很经典。他问的是如何将Python解决方案映射到Java,而不是如何解决问题。问题应该是“我如何管理Java中的依赖关系?”正确的答案是使用Maven或它的竞争对手之一。我认为这应该是对我答案的评论。我以前没有看到它,所以很抱歉我的反应太晚了:
jre/lib/ext
包含扩展库,我在脚注中简要提到了扩展库,它们确实没有被大量使用。是的,我同意在JRE/JDK之间快速切换有一些实用程序,并且存在一些这样的工具(例如,Debian/Ubuntu有一个替代系统,允许您切换用于不同java命令的JDK(除其他外))。这可能适用于包,但是python虚拟环境帮助管理的另一件事是python本身的版本。Java开发人员如何处理使用不同版本Java的项目?为什么不使用?