LoginSignup
1
0

はじめに

こんにちは、絶賛Java修行中の@fsd-shoyaです。
.javaファイルをすべてコンパイルして実行する。というコマンドを毎度叩くのに嫌気が差したので、再利用可能なワンライナーを書いてみました。

実行環境

$ echo $SHELL
/bin/bash
$ java --version
openjdk 21.0.1 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-Ubuntu-222.04)
OpenJDK 64-Bit Server VM (build 21.0.1+12-Ubuntu-222.04, mixed mode, sharing)
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"

WSL2を使用しています

今回使用するコード

構成

本記事では複数ファイルをコンパイルして実行するため、2つのファイルを作成しています。

app/
├── Main.java
└── sub
    └── Sub.java

コード

app/Main.java
package app;
import app.sub.Sub;
public class Main{
        public static void main(String[] args){
                Sub.helloworld();
        }
}
app/sub/Sub.java
package app.sub;
public class Sub{
        public static void helloworld(){
                System.out.println("Hello, world");
        }
}

Before

まずは今まで私が打っていたコードを見てみましょう。

bash
javac app/Main.java app/sub/Sub.java
java app.Main

上記では、javacの引数にファイルを1つずつ追加しています。
今回扱うjavaファイルは2つだけなので大変ではありませんが、今後ファイルが増えていくことを考えると、より短く、汎用性のあるコマンドで実行出来るのが望ましいです。

改善してみる

それでは改善してみましょう。
まずはカレントディレクトリ以下のすべてのjavaファイルを取得します。

bash
find ./ | grep java

次に、上記コマンドの返り値をjavacの引数にします。

bash
find ./ | grep java | xargs javac

最後に、javaを実行すると完成です。

bash
find ./ | grep java | xargs javac && java app.Main

正しく実行されると、Hello, worldと出力されるはずです。

After

出来上がったものがこちらになります。

bash
find ./ | grep java | xargs javac && java app.Main

どんなにjavaファイルが増えてもこの1行で実行出来るようになりました。
だいぶスッキリしましたね。

おまけ

無事1行に収まりましたが、毎度入力するのも大変です。
そこで、シェルスクリプトにすることでより簡単に実行してみましょう!
appディレクトリのある場所でrunファイルを作成します。

bash
vi run
run
#!/bin/bash
find ./ | grep java | xargs javac && java app.Main

runファイルの実行権限を付与して実行します。

bash
chmod +x run
./run

正しく実行されると、先程と同様Hello, worldと出力されます。

さいごに

いかがでしたでしょうか?

コンパイルして実行の2ステップを1行で済ますことが出来ました。
Javaのみでなく、C言語などのコンパイル言語でも本記事を応用することで、コンパイルして実行することが出来るようになるかと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0