【问题标题】:Is there anything like VirtualEnv for Java?有没有类似 Java 的 VirtualEnv 之类的东西?
【发布时间】:2011-09-04 15:15:35
【问题描述】:

对于 Java 或 JVM 语言有没有类似于 Python virtualenv 的东西?

【问题讨论】:

    标签: java python virtualenv jvm-languages


    【解决方案1】:

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

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

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

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

    (*) 差不多,有extensions or extension libraries,但它们用得不多,甚至可以从任意目录轻松加载。

    【讨论】:

    • 这可能适用于包,但 python 虚拟环境帮助管理的另一件事是 python 本身的版本。 Java 开发人员如何处理使用不同 Java 版本的项目?
    • 脚本启动需要特定安装Java虚拟机的Java应用程序,通常在JAVA_HOME变量中设置路径。
    【解决方案2】:

    Ant、Maven 和 gradle 等构建工具最接近 pipeasy_install

    virtualenv 的概念是由类路径完成的。所以对于 Java 来说并没有真正需要 virtualenv

    【讨论】:

      【解决方案3】:

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

      我会恭敬地同意 Gautam K,luthur。项目的依赖和包版本管理不同于一个独立的自包含虚拟环境来维护不同的项目。

      我的 2 美分 -W

      【讨论】:

        【解决方案4】:

        我对“Java 没有‘系统范围内安装’库的概念”的断言感到困惑。 $JAVA_HOME/jre/lib 和 $JAVA_HOME/jre/lib/ext 中的 jar 文件叫什么?

        不管 Java 是否“需要”像 virtualenv 这样的工具,似乎它可以让您在不同的 Java 环境之间快速切换(例如,带有某某安全扩展的 Java 6、Java 7 等)会很方便 - 即使它实际上只是在操纵 PATH、JAVA_HOME 和 CLASSPATH 环境变量。

        【讨论】:

        • 我认为这应该是对我的回答的评论。我以前没有看到它,很抱歉我迟到的回复:jre/lib/ext 包含扩展库,我在脚注中简要提到了它们,它们确实没有被大量使用。是的,我同意在 JRE/JDK 之间快速切换有一些实用程序,并且存在一些这样的工具(例如,Debian/Ubuntu 有替代系统,它允许您切换用于不同 java 命令的 JDK(以及许多其他东西)) .
        【解决方案5】:

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

        为此,我开发了一个解决方案,可以根据每个项目 设置(存储在.mvn 文件夹中)使用适当的配置来帮助执行mvn 命令。

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

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

        【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          Maven,您可以明确指定您将在 java 项目中使用哪些包

          【讨论】:

          • Maven 是一个构建工具,与 virtualenv 没有任何共同之处!这是一个完全不同的概念。
          • !!!!!!!!!maven 配置文件可以指定你将在特定的java项目中使用哪个版本和包,不是吗!!!!!!!!!!!!!!! !!!!
          • OP的问题是经典的XY problem。他问的是如何将 Python 解决方案映射到 Java,而不是问如何解决问题。问题应该是“如何在 Java 中管理依赖项?”正确答案是使用 Maven 或其竞争对手之一。
          【解决方案8】:

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

          this blog post中有概述

          引用:

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

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

          【讨论】:

            猜你喜欢
            • 2011-04-07
            • 1970-01-01
            • 1970-01-01
            • 2020-03-11
            • 2011-09-25
            • 2011-01-20
            • 2011-02-26
            • 2011-01-01
            • 1970-01-01
            相关资源
            最近更新 更多