Javaプログラミングで避けるべき9つの間違い
Javaでのプログラミングで避けるべき間違いとは?次の記事では、この質問にお答えします。
1台のマシンで多数の環境を処理するための黄金手段はあるのでしょうか?私たちのJavaエキスパートBartłomiejがその答えを知っています!
典型的な職場環境を見てみよう。 ソフトハウス.異なる環境を持つ顧客が何人かいる。MySQLを好む顧客もいれば、Postgresを好む顧客もいます。あるバージョンのアプリケーションには ジャワ 11とJava 17がある。フロントエンドは、異なるバージョンの 角ばった.最終的に、すべてのDB、バックエンド、フロントエンドのバージョンの組み合わせを含む3次元配列ができる。しかしある日、上司がこう言った。
上記のような状況は珍しいことではない。言語やフレームワークのバージョン間の移行、データベースの更新、あるいは単に顧客からの異なる要求によって、すべての構成がひっくり返る可能性がある。私たちは、そのような変更を管理するのに役立つ、いくつかの仮定や要件や目標に合致するソリューションを持つべきです:
今回は3つの分野に焦点を当てる。第一はJavaとJVMのためのツール。2つ目は汎用ツール。3つ目は、目的を達成するためのdockerの使い方だ。
あなたが Java開発者 あるいは、もっと一般的には JVM技術を使うことができる。 SDKMAN!.これは、多くのライブラリ、フレームワーク、言語をサポートする、とても素晴らしく使いやすいツールだ。
のインストールプロセス SDKMAN! とても簡単だ。走る必要がある:
curl -s "https://get.sdkman.io" | bash
そして
ソース "$HOME/.sdkman/bin/sdkman-init.sh"
これで ジャワ, スカラ そして メイブン のバージョンがある。
この例では、いくつかのツールのインストールとバージョン更新を行う。これは利用可能なツールのほんの一部です。
あなたの新しい プロジェクト 用途 ジャワ17.あなたは何も持っていない ジャワ バージョンがインストールされている。それをインストールし、さらにビルドを高速化するためにMavenデーモン・ツールを追加したい。そこで、Mavenもインストールする必要がある。そのためには、3つの簡単なコマンドを実行する必要がある:
$ sdk install java 17-open
$ sdk インストール maven 3.8.4
$ sdk インストール mvnd 0.7.1
各ツールのインストールの最後に、デフォルトにするかどうか尋ねられます:
Java17-openをデフォルトに設定しますか(Y/n):
これは、ライブラリや言語の新しいバージョンをインストールするときに重要です。SDKMAN! は、そのデフォルトバージョンを現在のユーザーのすべての端末のグローバルバージョンとして設定するからです。
時々、SDKMAN! はインデックスを更新する必要があります。その際、使用しているツールの新しいバージョンがあるというメッセージが表示されることがあります。どのバージョンが利用可能かを確認するには、次のように入力します。 sdk ls <TOOL
.について sdk ls maven
:
利用可能なMavenバージョン
================================================================================
3.8.6 3.3.3
3.8.5 3.3.1
3.8.4 3.2.5
3.8.3 3.2.3
3.8.2 3.2.2
3.8.1 3.2.1
3.6.3 3.1.1
3.6.2 3.1.0
3.6.1 3.0.5
3.6.0 3.0.4
3.5.4
3.5.3
3.5.2
3.5.0
3.3.9
================================================================================
ローカルバージョン
現在使用中
================================================================================
上で見たように、Mavenは私たちが使っているものよりも新しいバージョンを持っている。同じことが mvnd
(0.8.2)とJava(19-open)だ。すべてをアップデートしよう。そのためにはインストール・コマンドを呼び出せばいいのだが、今回はバージョン指定子は使わない:
$ sdk インストール maven
$ sdk インストール mvnd
$ sdk javaのインストール
しかし、何かが間違っていた。 メイブン
そして mvnd
は正しいバージョンを持っているが ジャワ バージョン 17.0.5-tem
.それは、ツールの「最新」バージョンは、ローカルSDKMAN!ではなく、そのベンダーによって管理されているからです。このベンダーとは誰ですか?SDKMAN!におけるベンダーとは、バージョンを公開できる人のことです。しかし、最終的に 19-オープン
をデフォルトにした。 17-オープン
.
を設定することができる。 デフォルト
あるツールのバージョンは、すべてのプロジェクトと端末に対してグローバルである。しかし、特定のバージョンが必要な場合は、2つの方法がある。ひとつは sdk使用 <VERSION
コマンドを毎回実行する。二つ目は .sdkmanrc
ファイルに保存される。
1つ目のオプションは1人で使用するためのものですが、2つ目はチームで作業し、コンフィギュレーションを共有するためのものです。 チーム メンバーだ。
SDKMAN!は非常に使いやすく、サポートされているツール、フレームワーク、言語の豊富なライブラリを持っています。Linux、MacOS、Windowsで動作する。一方、このツールはJVMに特化しており、作者がベンダーであることを承認する必要がある。さらに .sdkmanrc
は非常に貧弱で、ディレクトリを変更するプロセスを大幅に遅らせる可能性がある。
多くの言語やツールを使用する必要がある場合は、以下を参照してください。 アズダフ.このツールは「高レベル」ツールに焦点を当てている。SDKMAN!では、BpipeやZnaiのようなJavaに特化したツールが多数提供されているが、asdfではより多くのツールが提供されている。もちろん、これらのツールの一部は重複しており、たとえばJava、Tomcat、mvndは両方で利用できる。
を使用したい場合 アズダフ
を持っている必要がある。 ギット
そして カール
をインストールする。その後は
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.2
に以下の行を追加する。 ~/.bashrc
file:
.$HOME/.asdf/asdf.sh
.$HOME/.asdf/completions/asdf.bash
プラグインやツールをお好きなバージョンでインストールできるようになりました。
SDKMAN!とは違います、 アズダフ
はプラグインを使ってツールを管理する。つまり、ツールをインストールする前に、プラグインをインストールする必要がある。例のプロジェクトに戻り、次のコマンドを使って環境を設定してみよう。 アサドフスフ
.
まず、プラグインをインストールする必要がある:
asdfプラグインにJavaを追加
asdfプラグインにmavenを追加する
asdfプラグインにmvndを追加する
それからツールをインストールする:
asdfはJavaをインストールする openjdk-17
asdf maven 3.8.4 をインストールする
asdf インストール mvnd 0.7.1
そしてまた、SDKMANと違って!、 アズダフ
を実行しても、私たちの環境は何も変わりません。javaを使おうとすると、次のようなエラーメッセージが表示される:
Javaコマンドにバージョンが設定されていない
以下のバージョンのいずれかを、~/.tool-versionsの設定ファイルに追加してください。
Java openjdk-17
ファイルを作成する必要がある。 ツールバージョン
をホームディレクトリに置いて、デフォルトのバージョンを管理する。
でソフトウェアのバージョンを更新する。 アズダフ
はとてもシンプルだ。新しいバージョンをインストールするだけだ。このプロセスは環境に影響を与えないので、いつでもファイルシステムのどの場所でもできる。あるソフトウェアの特定のバージョンを使いたいときは、プロジェクト・ディレクトリに ツールバージョン
ファイルをチームメンバー間で共有することができます。チームメンバー全員が以下のファイルを持っていることを保証する必要があることを忘れないでください。 アズダフ
とプラグインがインストールされています。プラグイン一覧 これ.
アズダフ
vimやkubernetessのようなプログラミング言語やフレームワーク、ツールだけをサポートしているわけではない。データベースもサポートしている。このような場合、例えばPostgresの複数のバージョンをインストールしても、実行できるインスタンスは1つだけだ。それは アズダフ
は、分離レイヤーを介さずにOS上で直接コマンドを実行する。そのため、「ポートがすでに使用中である」といった問題や、リソースの競合が発生する。
アズダフ
は、ポリグロット環境で作業したい場合に非常に優れたツールだ。多くのツール、言語、フレームワークをサポートしている。プラグイン・ベース・アーキテクチャにより、拡張も非常に簡単だ。しかし、ライブラリにあるツールの中には、必要な依存関係をすべて提供するためにインストール時に追加作業が必要なものもある。 アズダフ
を使用しても、Windowsでは動作しません。 WSL.
上でポートの衝突について述べたとき、多くの人はその解決策を知っているだろう。
ドッカー は、場合によっては私たちを助けてくれるかもしれない。このツールは非常に大きく複雑なので、1つの記事で論じることはできない。
Dockerと一緒に ドッカーコンポース マルチコンテナ環境を調整する可能性を与えてくれるツールだ。
Dockerは、ポートやファイルといった特定のリソースを必要とするツールの管理に役立つ。Dockerはインスタンスをコンテナに分離し、それらを完全に制御できる。とはいえ、Dockerは作業環境に多くの複雑さをもたらすツールであり、場合によっては問題になることもある。テストでDockerを使用するケースの1つは、私たちの以前の記事の1つに記載されています。 記事.
ツールのバージョン管理に使えるすべてのツールについて説明したわけではないことは承知している。例えば jEnv SDKMANを置き換えることができる、
または エヌブイエム npm または RVM Rubyのために。私が「戦場でテスト」し、誰にでも勧められるツールに焦点を当てた。