1. 序章

このチュートリアルでは、JBangについて説明します。

JBangを使用すると、学生、教育者、および専門の開発者は、自己完結型のソースのみまたはバイナリJavaプログラムをこれまでになく簡単に作成、編集、および実行できます。 JBangの目標は、誰もがJavaの周りに慣れているセレモニーと面倒なセットアップを減らすか、削除することです。

1回のダウンロードと1回のコマンドでJBangを有効にして、Python、JavaScript、PHP、および同様の言語と同じくらい簡単にJava を作成、編集、実行できます。

一見すると、JBangはLaunchのように見えます Java11で導入された単一ファイルのソースコード機能。 ただし、JBang これを超えて Maven互換リポジトリからの依存関係を使用して複数のファイルをサポートする 、そしてそれはで動作します Java 8 最近リリースされたまで Java17以降

2. JBangのインストール

最初に行うことは、JBangをインストールすることです。

OSに選択したパッケージマネージャーを使用することも、より一般的な curl /iexベースのダウンロードを使用することもできます。 すべての主要なオペレーティングシステムのダウンロード手順は、jbang.dev/downloadにあります。 このガイドでは、一般的なアプローチを使用します。

Linux、Mac、またはbash互換シェルを備えたWindowsでは、curlを使用できます。

curl -Ls https://sh.jbang.dev | bash -s - app setup

または、PowerShellを使用するWindowsでは、iexを使用できます。

iex "& { $(iwr https://ps.jbang.dev) } app setup"

どちらの場合も、新しいシステムで実行すると、次のように出力されます。

$ curl -Ls https://sh.jbang.dev | bash -s - app setup
Downloading JBang...
Installing JBang...
Downloading JDK 11. Be patient, this can take several minutes...
Installing JDK 11...
[jbang] Default JDK set to 11
[jbang] Setting up Jbang environment...
Please start a new Shell for changes to take effect

開始するためにJavaをインストールする必要がないことに気付くでしょう。JBangは必要に応じてadoptopenjdk(現在はEclipse Adoptium)からJava開発キット(JDK)をダウンロードします。

JBangが正しくインストールされているかどうかを確認するには、新しいシェルを起動してjbangバージョンを実行します。JBangはバージョン情報を出力します(注:JBangは頻繁にリリースされるため、バージョンはすでに高い可能性があります)。

$ jbang version
0.83.1

これで、JBangの使用を開始する準備が整いました。

3. 私たちの最初のJava(スクリプト)

最初のJavaファイルを作成するには、jbanginitを使用できます。

$ jbang init hello.java
[jbang] File initialized. You can now run it with 'jbang hello.java' or edit it using 'jbang edit --open=[editor] hello.java' where [editor] is your editor or IDE, e.g. 'netbeans'

シェルで許可されている場合は、 jbanghello.javaまたは./hello.javaでこれを実行できるようになりました。 2回実行してみましょう。

./hello.java
[jbang] Building jar...
Hello World
❯ ./hello.java
Hello World

ビルドツールやコンパイルを設定せずにJavaを作成して実行します。 すべてJBangによって処理されます。 最初に「Buildingjar」を印刷しますが、2回目は印刷しないことに注意してください。 2回目は、「HelloWorld」を出力するだけです。

JBangがすでにビルドされたjarを再利用する2回目は、ソースコードは変更されていません。

もっとエキサイティングにして、外部依存関係を使用するjavaファイルを作成しましょう。 テンプレートを使用してこれを行うことができます。

jbang init -t cli hellocli.java

cli は、使用可能なデフォルトテンプレートの1つです。 jbang template list を実行すると、使用可能なリストを確認できます。

$ jbang template list
agent = Agent template
cli = CLI template
hello = Basic Hello World template
hello.kt = Basic kotlin Hello World template
qcli = Quarkus CLI template
qmetrics = Quarkus Metrics template
qrest = Quarkus REST template

作成したhellocli.javaを実行すると、Picocli依存関係がフェッチされ、渡された引数が使用されることがわかります。

$ jbang hellocli.java Baeldung
[jbang] Resolving dependencies...
[jbang]     Resolving info.picocli:picocli:4.5.0...Done
[jbang] Dependencies resolved
[jbang] Building jar...
Hello Baeldung

2回目に実行する場合、ソースコードを編集しなかったため、依存関係を再度解決する必要はありません。

4. JBangコメント

ここで、hello.javaまたはhellocli.javaを調べると、それが単なるJavaクラスであることがわかります。

///usr/bin/env jbang "$0" "$@" ; exit $?
//DEPS info.picocli:picocli:4.5.0

import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Parameters;

import java.util.concurrent.Callable;

@Command(name = "hellocli", mixinStandardHelpOptions = true, version = "hellocli 0.1",
        description = "hellocli made with jbang")
class hellocli implements Callable<Integer> {

    @Parameters(index = "0", description = "The greeting to print", defaultValue = "World!")
    private String greeting;

    public static void main(String... args) {
        int exitCode = new CommandLine(new hellocli()).execute(args);
        System.exit(exitCode);
    }

    @Override
    public Integer call() throws Exception { // your business logic goes here...
        System.out.println("Hello " + greeting);
        return 0;
    }
}

最初の2行が//で始まることに注意してください。これは、この行がJavaのコメントであることを意味します。

///usr/bin/env jbang "$0" "$@" ; exit $?

ただし、bash / zshシェルでは、最初の行でこのファイルを./hellocli.javaとして直接実行できます。

//DEPS info.picocli:picocli:4.5.0

// DEPS で始まる2行目は、jbangが取得して依存関係として使用するマジックマーカー行です。 依存関係に使用される構文は、Gradleなどのビルドツールで使用される正規のMaven依存関係形式です。 必要なすべての依存関係を宣言して、各行に複数の依存関係を持つ複数の行を作成できます。 JBangは推移的な依存関係もフェッチします。 したがって、トップレベルのものだけをリストする必要があります。

JBangが拾う他の魔法のマーカーがあります。 主なものは次のとおりです。

JAVA –使用するJavaバージョンを指定します。JAVA11+はJava 11以降を意味し、JAVA14は正確にJava14を意味します。

JAVA_OPTIONS – javaコマンドラインに追加され、メモリ設定とシステムプロパティの設定に使用します

JAVAC_OPTIONS –javacコンパイルコマンドに追加されます。 プレビューまたはその他のフラグを有効にするために使用します。

JBangのドキュメントにはさらに多くの例があります。

5. 編集

これで、JBangがファイルから何を読み取って動作させるかがわかりました。 では、このような.javaファイルを編集して、コンテンツアシスト、リファクタリング、および従来のJavaベースのエディターで知られているその他の貴重な機能をどのように利用できるでしょうか。

答えは jbang edit. jbang editを使用すると、JBangは、ほとんどの最新のJava対応エディターが開くことができるシンボリックリンクされたプロジェクトを準備します jbang edit hellocli.javaとして実行すると、 JBangは、手動セットアップなしで開始するためにVSCodiumをダウンロードして構成する必要があるかどうかを尋ねます。 もちろん、お気に入りのIDEがPATHで利用できる場合、つまりIntellij IDEAの場合は、 jbang edit –open = idea hellocli.java を実行でき、代わりにideaを介してJBangが開きます。 。

6. 複数のファイル

これまでのところ、1つのファイルのみを処理してきました。 複数のファイルがある場合はどうですか? JBangは、複数のソースファイルと任意のリソース(.htmlファイルなど)を処理します。 そのための2つのコマンドは、 //SOURCES//FILESです。

特定のソースファイルを含めるには、 // SOURCE myfile.java を使用します。すべてのJavaソースファイルを含めるには、 // SOURCE **/*。javaを使用します。

リソースの場合、構文は次のとおりです。 //ファイル [=]

//FILES resource.properties
//FILES META-INF/resources/index.html=index.html

ここで、 resource.properties はそのままコピーされ、 META-INF / resources /index.htmlindex.htmlからコンテンツを取得します。

すべての場所は、スクリプトの場所を基準にしています。

以下は、複数のファイルを使用した最小限の完全な実例です。

///usr/bin/env jbang "$0" "$@" ; exit $?
// Update the Quarkus version to what you want here or run jbang with
// `-Dquarkus.version=<version>` to override it.
//DEPS io.quarkus:quarkus-bom:${quarkus.version:2.4.0.Final}@pom
//DEPS io.quarkus:quarkus-resteasy
//JAVAC_OPTIONS -parameters

//FILES META-INF/resources/index.html=index.html

import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/hello")
@ApplicationScoped
public class jbangquarkus {
    @GET
    public String sayHello() {
        return "Hello from Quarkus with jbang.dev";
    }
}

この例は、JBangとQuarkusの統合も示しています。 Quarkusを依存関係として使用することにより、この例は正しく機能し、 http:// localhost:8080にインデックスページとhttp:// localhost:8080 /helloにRESTエンドポイントを提供します。 。

これにより、JavaベースのフレームワークでJBangを使用して、小さなスクリプトや本格的なマイクロサービス、さらにはアプリケーションを構築できます。

7. 共有コード

これで、JBangベースのアプリケーションを作成、実行、編集できるようになりましたが、他の人が実行できるようにコードを共有するのはどうでしょうか。

jbang export を使用すると、他のJavaアプリと同じように共有できるjarが作成されます。 さらに興味深いのは、GitHub、Gitlab、BitBucketなどを使用して共有することです。

JBangは、URLにあるソースコードの実行をサポートし、その背後にあるサービスの種類を理解します。 したがって、たとえば、上記のJBang Quarkusの例を実行するには、ソースリポジトリから直接実行できます。

jbang https://github.com/eugenp/tutorials/blob/jbangguide/jbang/jbangquarkus.java

JBangは、ローカルファイルで初期に行ったように、ダウンロード、コンパイル、および実行に必要な複数のファイルを把握します。

このようにして、他の人のコードをすばやく試したり、他の人と共有したりできます。パッケージ設定の必要はありません–JBangは本質的に簡単な共有を可能にします

7.1. エイリアス

URLは入力が難しい場合があります。 幸い、エイリアスを使用することもできます。つまり、 jbang alias add https://github.com/eugenp/tutorials/blob/jbangguide/jbang/jbangquarkus.javaを使用すると、jbangjbangquarkusとして使用できます。

デフォルトでは、JBangはこれらのエイリアスを現在のユーザーに対してグローバルにインストールします。 それでも、 -f、を使用して特定のディレクトリに追加することもできるため、このディレクトリとそのサブディレクトリにのみ適用されます。

jbang alias add -f . https://github.com/eugenp/tutorials/blob/jbangguide/jbang/jbangquarkus.java

プロジェクト固有のコマンドを追加するのに最適です。 共有できるコマンドは、GradleまたはMavenプラグインに関連付けられておらず、作成する必要もありません

これらのエイリアスはjbang-catalog.jsonファイルに保存され、どこにでも追加してどこからでもホストできます。

7.2. アプリのインストール

エイリアスは、Javaを除く他のほとんどの一般的なエコシステムに見られる別の便利なコマンドにつながります。スクリプト/アプリケーションのインストールです。 npm install pipinstallなどを考えてください。

JBangでは、 jbang app install、と呼ばれ、ローカルとリモートの両方のJBangスクリプトとjarで動作します。

たとえば、hello.javaをインストールするには:

jbang app install hello.java

これで、`hello`コマンドがパスに追加されました。

同じことがリモートjbangquarkus.javaにも当てはまります。

jbang app install https://github.com/eugenp/tutorials/blob/jbangguide/jbang/jbangquarkus.java

このような行を実行すると、jbangquarkusというコマンドがパスで使用できるようになります。

jbang appinstallはエイリアスでも機能します。

前述のように、エイリアスはどこにでも保存および共有でき、それを見つけることができるように、aliasesjbang.devはhttps://jbang.dev/apppstoreでJBangAppStoreをホストしています。 ここでは、jbang-catalog.jsonファイルを介して公開されたスクリプトを検索して見つけることができます。

したがって、 jbang-catalog.json、を作成すると、その内容と説明がここに表示されます。 「eugenp」を検索して、この記事で使用されているスクリプトを見つけてください。

8. 結論

この記事では、JBangをインストールしました。これにより、Javaアプリケーションとスクリプトをこれまでになく簡単に作成、編集、ビルド、実行、およびインストールできるようになりました。 Java を開始するために、MavenまたはGradleに関するセットアップや既存の知識は必要ありません。 さらに進むと、JBangはMaven座標を使用して依存関係をフェッチすることをサポートし、SpringやQuarkusなどのランタイムフレームワークやJavaFXなどのグラフィカルフレームワークなど、広大なJavaエコシステムから何でも使用できるようにします。

JBangは最新のIDEで動作し、複数のファイルをサポートし、URLの背後にあるものを理解するため、jarを実行するソースコードとエイリアスを簡単に公開および共有できます

JBangには、Webサイトから入手できるドキュメントとAppStoreがあります。

このチュートリアルの例は、GitHubから入手できます。