LinuxでJavaを実行するには?JARファイルの作成について
- システム
エンジニア - LinuxでJavaを実行するにはどうすれば良いのでしょうか。
- プロジェクト
マネージャー - まずはJavaのインストールが必要です。具体的な方法などについて解説しますので、一緒に見ていきましょう。
LinuxでJavaを実行するには
LinuxでJavaを実行するにはJavaがインストールされていなければなりません。それを確かめるには次のコマンドをシェルに打ち込んでください。
1
|
$ java --version
|
そして例えば次のように出力されればJavaはインストールされています。
1
2
3
|
java version ""15.0.2"" 2021-01-19
Java(TM) SE Runtime Environment (build 15.0.2+7-27)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.2+7-27, mixed mode, sharing)
|
OSの環境
環境は次の通りです。
1
2
3
4
5
6
7
8
9
10
|
$ cat /etc/os-release
NAME=""Amazon Linux""
VERSION=""2""
ID=""amzn""
ID_LIKE=""centos rhel fedora""
VERSION_ID=""2""
PRETTY_NAME=""Amazon Linux 2""
ANSI_COLOR=""0;33""
CPE_NAME=""cpe:2.3:o:amazon:amazon_linux:2""
HOME_URL=""https://amazonlinux.com/""
|
Javaプログラム
JavaプログラムはWindowsでもLinuxでもmacOSでも全てのプラットフォームで実行可能で、javacツールでjavaファイルをコンパイルするとバイトコード(中間コードともいいます)のclssファイルが生成されます。
Javaプログラムを実行するには次のようにします。
1
|
$ java (クラス名)
|
LinuxにおいてJavaでHello world!
それではLinuxにおいてJavaでプログラミングを学ぶときのお決まりのHello world!の出力を行いましょう。エディタは何でもいいのですが、Linuxにvimがインストールされているとします。プログラムは次の通りです。
1
2
3
4
5
6
7
|
class App {
public static void main(String[] args) {
System.out.println(""Hello world!"");
}
}
|
これを次のように保存します。
1
|
「Esc」:wq App.java「Enter」
|
コンパイルと実行
Linux環境でもjavaファイルのコンパイルはjavacでコンパイルします。コンパイル時はroot権限で行ってください。
1
2
3
|
$ sudo su -
password:
$ javac App.java
|
コンパイルするとバイトコードのclassファイルが生成されます。
1
2
|
$ ls
App.class App.java
|
バイトコードを実行します。
1
2
|
$ java App
Hello world!
|
これでHello world!を表示させるプログラムは完了です。
引数を渡す
ここでは実行時に引数を渡します。App.javaファイルを以下のように修正します。
1
2
3
4
5
6
7
8
9
|
class App {
public static void main(String[] args) {
for (String arg: args) {
System.out.println(String.format(""Hello %s."", arg));
}
}
}
|
先と同じようにコンパイルします。そして、バイトコードを実行しますが、その時に引数を渡します。
1
2
3
4
|
$ java App Anne Ben Carol
Hello Anne.
Hello Ben.
Hello Carol.
|
引数のAnne、Ben、Carolが渡されて出力されています。
他クラスの利用
プログラム内で他クラスにアクセスします。新たにHumanクラスをApp.javaファイルとは別に作ります。Human.javaファイルのソースコードは次の通りです。
1
2
3
4
5
6
7
8
9
10
11
|
class Human {
String name;
Human(String name) {
this.name = name;
}
void introduceMyself() {
System.out.println(String.format(""My name is %s."", this.name));
}
}
|
Appクラスも以下に書き換えます。
1
2
3
4
5
6
7
8
9
10
|
class App {
public static void main(String[] args) {
for (String arg: args) {
Human human = new Human(arg);
human.introduceMyself();
}
}
}
|
Humanクラスをインスタンス化し、Humanクラスの関数introduceMyself()を呼び出しています。これらを次のようにコンパイルします。
1
|
$ javac App.java
|
すると、App.javaとHuman.javaが一緒にコンパイルされていることが分かります。
1
2
|
$ ls
App.class App.java Human.class Human.java
|
次のようにバイトコードを実行すると確かにHumanクラスが利用されていることが分かります。
1
2
3
4
|
$ java App Anne Ben Carol
My name is Anne.
My name is Ben.
My name is Carol.
|
パッケージ
各クラスにパケージ名をつけると別階層のjavaファイルでも同階層にあるのと同じようにコンパイルができて、実行ができます。階層は次の通りです。
1
2
3
4
5
6
7
8
9
|
$ tree
.
└── jp
└── co
└── sample
├── App.java
└── lib
└── Human.java
4 directories, 2 files
|
Human.javaはlibディレクトリにありますので、Human.javaのパッケージは次のように付与されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package jp.co.sample.lib;
public class Human {
private String name;
public Human(String name) {
this.name = name;
}
public void introduceMyself() {
System.out.println(String.format(""My name is %s."", this.name));
}
}
|
App.javaには次のようにパッケージが付与されます。また、Humanクラスをimportしなければなりません。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package jp.co.sample;
import jp.co.sample.lib.Human;
class App {
public static void main(String[] args) {
for (String arg: args) {
Human human = new Human(arg);
human.introduceMyself();
}
}
}
|
そして、App.javaを次のようにコンパイルします。すると、バイトコードが次のように生成されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
$ javac jp/co/sample/App.java
$ tree
.
└── jp
└── co
└── sample
├── App.class
├── App.java
└── lib
├── Human.class
└── Human.java
4 directories, 4 files
|
そして、次のようにプログラムを実行します。
1
2
3
4
|
$ java jp.co.sample.App Anne Ben Carol
My name is Anne.
My name is Ben.
My name is Carol.
|
JARファイルの作成
生成したclassファイルをjarファイルにまとめるということを行います。javaファイルはjarファイルに含めませんので、srcディレクトリに次のようにまとめます。
1
2
3
4
5
6
7
8
9
10
11
|
$ tree
.
└── src
└── jp
└── co
└── sample
├── App.java
└── lib
└── Human.java
5 directories, 2 files
|
パッケージ起点がsrcディレクトリでない場所でコンパイルする場合は-sourcepathオプションでコンパイルする場所を指定しなければなりません。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
$ javac -sourcepath src -d classes src/jp/co/sample/App.java
$ tree
.
├── classes
│ └── jp
│ └── co
│ └── sample
│ ├── App.class
│ └── lib
│ └── Human.class
└── src
└── jp
└── co
└── sample
├── App.java
└── lib
└── Human.java
10 directories, 4 files
|
classesディレクトリが作成され、その下にパッケージと同じ階層にclassファイルが生成されていることが確認できます。バイトコードを実行するとき-classpathオプションをつけなければなりません。
1
2
3
4
|
$ java -classpath classes jp.co.sample.App Anne Ben Carol
My name is Anne.
My name is Ben.
My name is Carol.
|
JARファイル作成
いよいよjarファイルを作成しますが、jarファイル作成にはmanifestファイルが必要になります。manifest.mfファイルを作成します。manifest.mfには次のように書き込みます。最後に1行空けないとmanifestファイルとして認識しませんので、ご注意願います。
1
|
Main-Class: jp.co.sample.App
|
manifest.mfファイルが作成できたならば、jarコマンドでjarファイルを作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
$ jar cvfm sample.jar manifest.mf -C classes .
added manifest
adding: jp/(in = 0) (out= 0)(stored 0%)
adding: jp/co/(in = 0) (out= 0)(stored 0%)
adding: jp/co/sample/(in = 0) (out= 0)(stored 0%)
adding: jp/co/sample/App.class(in = 469) (out= 344)(deflated 26%)
adding: jp/co/sample/lib/(in = 0) (out= 0)(stored 0%)
adding: jp/co/sample/lib/Human.class(in = 595) (out= 379)(deflated 36%)
$ ls
classes manifest.mf sample.jar src
$ jar -tf sample.jar
META-INF/
META-INF/MANIFEST.MF
jp/
jp/co/
jp/co/sample/
jp/co/sample/App.class
jp/co/sample/lib/
jp/co/sample/lib/Human.class
|
jarファイルにmanifestファイルとclassファイルが含まれていることが確認できます。それではjarファイルを使ってプログラムを実行してみます。
1
2
3
4
|
$ java -jar sample.jar Anne Ben Carol
My name is Anne.
My name is Ben.
My name is Carol.
|
- システム
エンジニア - LinuxでJavaを実行する方法などがよく理解できました。
- プロジェクト
マネージャー - やり方が理解できたら、実際にソースコードを書いてみましょう。
実際にコードを書いて実践しよう
LinuxでJavaを実行するのに、お決まりのHello world!の出力からjarファイルの作成までを見てきました。実際に自分の手でコードを書いて実践してみてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
Java新着案件New Job
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)