Python virtualenv for JavaまたはJVM言語に似ていますか?
私が理解していることから、virtualenvを使用すると、個別のライブラリインストールパスを作成でき、「仮想」Pythonインストールを効果的に分離できます。
Javaには、「システム全体にインストールされる」ライブラリの概念はありません。(*):ロードするライブラリのクラスパスを常に検索します。クラスパスはアプリケーションごとに定義できる(そして定義する必要がある!)ため、各アプリケーションは、ロードするライブラリとバージョンを自由に選択できます。
1レベル下がって、何らかの方法で同じライブラリの2つの異なるバージョンを同時に必要とする単一のアプリケーションがある場合は、クラスパスのトリックを使用してそれを行うこともできます。複雑になる可能性がありますが、それは確実に可能です(OSGiは、これがサポートされている1つの例です。2つの個別のWebアプリケーションを備えたTomcatでもこれを行います)。
Virtualenvの説明でセキュリティへの参照をいくつか見ました。Javaには、非常に徹底したセキュリティシステムが組み込まれています。サーバーアプリケーションでは、このように構成する方が簡単なため、オフになっていることがよくありますが、 Javaアプリケーションに許可されていることを簡単に構成できます。
(*)ほとんど、 extensionsまたはextension libraries がありますが、あまり使用されておらず、任意のディレクトリから簡単にロードできます。
Ant、Maven、gradleなどのビルドツールは、pip
またはeasy_install
に最も近いものです。
Virtualenvの概念はクラスパスによって行われます。したがって、Javaのvirtualenvは実際には必要ありません。
これは少し遅いかもしれませんが、Groovy/Javaにはgvm http://gvmtool.net/ があり、これはRubyのrenvのGroovyバージョンです。
私はゴータムK、luthurに敬意を表します。プロジェクトの依存関係とパッケージバージョンの管理は、異なるプロジェクトを維持するための独立した自己完結型仮想環境とは異なります。
私の2セント-W
また、異なるMavenバージョン/設定やJava SDKを使用するプロジェクト間でコンテキストを切り替えることなく、M2_HOME
およびJava_HOME
設定を毎回変更する必要がない、同様のソリューションを探していました。
このために、per-project設定に基づいて適切な構成でmvn
コマンドを実行するのに役立つソリューションを開発しました( .mvn
フォルダー)。
参照: https://github.com/AlejandroRivera/maven-env
これは、プロジェクトのビルドや実行にMavenを使用している場合にのみ役立つことに注意してください。
Maven、Javaプロジェクトで使用するパッケージを明示的に指定できます
「Javaには「システム全体にインストールされる」ライブラリの概念がない」という主張に戸惑っています。 $ Java_HOME/jre/libおよび$ Java_HOME/jre/lib/extにあるjarファイルを何と呼びますか?
Javaがvirtualenvのようなツールを「必要とする」かどうかに関係なく、さまざまなJava環境をすばやく切り替えることができるように思われます(例:Java 6このようなセキュリティ拡張機能を使用すると、Java 7など)は便利です。実際に内部で行われていたことはすべて、PATH、Java_HOME、およびCLASSPATH環境変数の操作でした。
はい(他の多くの言語(Ruby、Python、Go、R、Phpなど)と同様に http://www.jenv.be/ を参照)。
言語としてのJavaはvirtualenvのサンドボックス機能を必要としませんが、JythonなどのJVM言語はVirtualEnvを使用して、競合することなく異なる環境を使用できます。
このブログ投稿 で概説されています
見積もり:
Jython用にvirtualenvをインストールします。 「jeasy_install virtualenv」と入力するだけです。これが完了すると、Jythonインストールのbinフォルダーに「virtualenv」ツールが含まれているはずです。
したがって、Jythonを使用すると、グローバルパッケージと競合することなく、さまざまなフレームワークとパッケージを使用できます。