95

質問は次のとおりです。Java プロジェクト (またはコンパイル済み言語プロジェクト) に Vagrant を使用する場合、VM またはホストでコンパイルする必要がありますか? また、IDE とすべての開発ツールを VM 内から実行したいですか、それともホスト上で実行したいですか?

Java IDE とコンパイル/デプロイ プロセスが Vagrant VM でどのように機能するかは、正確にはあまり明確に定義されていないようです。一般的に、コードはホスト上で編集され、VM 上で実行されるというのが私の印象です。これは、コンパイルされていない言語でうまく機能します。Stackoverflow に関する他の回答は、余分なコンパイル手順があるため、Vagrant はコンパイルされた言語にはあまり役に立たないことを暗示していますが、それでも何ができるかを見たいと思っています。

私がすでに考えたいくつかのこと:

VM でコンパイルする理由

  • ホストでコンパイルする場合、Java はインストールするもう 1 つのソフトウェアです。
  • ホストでコンパイルする場合、ホストの Java バージョンを手動で VM の最新の状態に保つ必要があります。
  • ホスト上の対応する Java バージョンが利用できない可能性があります (たとえば、Mac 上)。

VM に IDE がある理由

  • 環境と IDE 間のより緊密な統合、ショートカットを使用してアプリケーションを実行できます
  • リモートデバッグなしでJavaアプリケーションのデバッガーを接続できます(ワンステップ実行/デバッグ)

ホスト上でコンパイルする理由

  • コンパイル時間の短縮
  • VM を可能な限り本番環境に近づけたい

ホストに IDE がある理由

  • ホスト上でコードを編集して VM 上で実行するのは vagrant の慣習です。
  • UI パフォーマンスの向上 (X 転送と VNC が遅い)

VM またはホスト内から IDE を実行する必要がありますか? VM またはホスト内からコンパイルする必要がありますか?

4

2 に答える 2

62

熟考と実験を重ねた結果、Vagrant をどこで使用するか、および Java 開発ワークフローとどのように統合するかを決定しました。

JavaEE /デプロイされたアプリケーションの場合、Webサーバーとデータベースサーバーの構成は、間違いなくVagrantの使用を保証するのに「十分な」複雑さを持っています. 2 つのサーバーとそれらを構成するための無数の方法があるため、ある開発者から別の開発者への構成が簡単に同期されなくなり、「自分のマシンで動作する」シンドロームが発生します。この種のソフトウェアの場合、ホスト上でコードを編集してコンパイルし、本番環境を模倣する Vagrant VM にデプロイするのが最適です。Web サーバーのデプロイ フォルダーは、ホスト上のコンパイル ターゲットにシンボリック リンクすることもでき、手動で再デプロイする必要がなくなります。したがって、Vagrant は開発ライフサイクルの重要な部分になる可能性があります。

スタンドアロンの Java アプリケーション (ライブラリやデスクトップ アプリケーションなど) の場合、話は少し変わります。この場合、Vagrant の使用を完全に避けて、ホスト マシン上で編集、コンパイル、および実行することが最も理にかなっています。大規模な Java IDE (Eclipse、Netbeans、IntelliJ...) のいずれかを使用している場合は、既にマシンに Java がインストールされています。その時点で、Vagrant を使用するオーバーヘッドに比べて利点はほとんどなく、開発プロセスの複雑さがさらに増すだけです。これは、IDE で Java を編集できるようになるまでに、ホスト上ですべてを実行できるようになるためです。1 つの問題は、プロジェクトに必要な Java のバージョンが、ホストで IDE を実行しているバージョンと一致しない可能性があることです。一般に (願わくは) これはそれほど大きな問題ではありません。この記事の執筆時点では、JDK6 はサポートが終了しており、JDK8 はまだリリースされていません (どうなるかはわかりません)。ただし、複数のバージョンを実行する必要がある場合は、必要に応じてホストに JAVA_HOME を設定できるはずです。これにより複雑さが増しますが、異なるバージョンの Java を使用するプロジェクトで作業するためだけに Vagrant ランタイムを維持するよりも複雑ではありません。

興味深いのは、コンテナレス Web アプリケーションをどうするかということです。外部 Web サーバーの場合と同様に、Web サーバー (この場合はアプリケーションの内部) を VM 内で実行する必要がありますか? それとも、スタンドアロン アプリケーションの場合と同じようにホスト上で実行しますか? コンテナーレス Web アプリケーションの場合、心配する外部 Web サーバーはありませんが、データベースが存在する可能性があります。このような状況では、ハイブリッド アプローチを取ることができます。コンテナーレス Web アプリの実行は、スタンドアロン アプリケーションの実行と本質的に同じであるため、ホスト コンピューターでコードをコンパイルして実行すると効果的です。しかし、データベースが関係しているため、データベースサーバーを独自の Vagrant VM 上に配置することは理にかなっています。

これが、Vagrant に関心のある Java 開発者に、その使用方法に関するコンテキストを提供することを願っています。

于 2013-07-26T09:41:42.063 に答える
3

私は昨年、このトピックに興味を持っていました:)

私の解決策は、フラグを使用して構成可能な vagrant マシンを用意することです。たとえば、このフラグの 1 つはデスクトップ GUI を有効にします。これは、ホスト マシン上でコーディングすることを好む開発者もいれば、デスクトップと IDE とのより統合された環境を好む開発者もいるからです。

デスクトップの遅さに直面するには、非常に便利な vagrant プラグインを次のようにインストールする必要があります (はい... vagrant には開発環境を大幅に改善するプラグインがあります)。 virtualbox インターフェイスの使用中に使用できるようにします。次に、GUI を有効にするには、Vagrantfile を次のように編集します。

config.vm.provider "virtualbox" do |vb| vb.gui = 真の終わり

共有フォルダーのパフォーマンスを高速化する代わりに、rsync を使用することをお勧めします: config.vm.synced_folder "./git", "/home/vagrant/git", type: "rsync", rsync__exclude: ".git/" この中でソースコードをホストで編集してから、ゲストに rsync する方法。

于 2016-02-08T09:21:23.570 に答える