空っぽのLinuxからJavaを動作させる & Mavenを動作させる
空っぽのOSから一歩を踏み出す
前回までのところで、ローカルで空っぽのUbuntuを用意することができました。
おそらく、評価環境や商用環境など成果物のデプロイ先は、AWSなどで空っぽのOSを立てることからのスタートです。
Java自体の復習をしたいという狙いもありますが、同時に、成果物を動作させていくのに必要な内容を掴んでいきたいと思います。
これ以降のコマンドは、基本、立ち上げたUbuntuで打っていくことを想定しています。
Javaを動作させる
Javaとは何ぞや的な詳細は、ほかのところに譲ります。
Sun Microsystemsがリリースしたオブジェクト指向のプログラミング言語で、 JVMと呼ばれるJava仮想マシン上で動作します。
仮想マシンをかませるところには、 "write once, run anywhere"の思想が埋まっています。
ということで、早速セットアップを進めます。
$ sudo apt update $ sudo apt install -y default-jdk $ export JAVA_HOME=/usr/lib/jvm/default-java $ export PATH=$PATH:$JAVA_HOME/bin
今回は実際にJavaのソースを仮想マシン上で用意してコンパイル、実行するところまでやりたいので、JDK(Java Development Kit)をインストールします。
実行環境だけ必要であれば、JRE(Java Runtime Environment)だけあれば十分です。
JREには先に述べたJVMが含まれます。
# 実行させたいだけならJREのみでOK $ sudo apt install -y default-jre
なお、JDKにはJREも内包されているので、重ねてインストールコマンドを叩く必要はありません。
ここまでで、java -version
, javac -version
といったコマンドでバージョン確認ができるようになっています。
$ java -version java version "1.7.0_151" OpenJDK Runtime Environment (IcedTea 2.6.11) (7u151-2.6.11-2ubuntu0.14.04.1) OpenJDK 64-Bit Server VM (build 24.151-b01, mixed mode) $ javac -version javac 1.7.0_151
ではHello World してしまいましょう。
$ echo 'public class Hello{ public static void main(String[] args){ System.out.println("Hello World"); } } ' > Hello.java $ javac Hello.java $ java Hello Hello World
Javaファイルを作成して、コンパイルして、実行する、という流れですね。
引数をつけたければ次のように行いましょう。
$ echo 'public class WithArg{ public static void main(String[] args){ System.out.println("See it, " + args[0]); } }' > WithArg.java $ javac WithArg.java $ java WithArg this-is-argument See it, this-is-argument
Mavenを使う
ビルドツールを利用するのが普通だと思っているので、mavenを利用したプロジェクト作成から実行もやってみます。
(厳密には、mavenはもっと大きな役割を包含したものですが、便宜上そう呼称します)
https://maven.apache.org/index.html
Apache Maven is a software project management and comprehension tool.
# インストール $ sudo apt install -y maven $ mvn -version Apache Maven 3.0.5 Maven home: /usr/share/maven Java version: 1.7.0_151, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.13.0-141-generic", arch: "amd64", family: "unix" # サンプルプロジェクトの作成 $ mvn archetype:generate \ > -DarchetypeArtifactId=maven-archetype-quickstart \ > -DinteractiveMode=false \ > -DgroupId=com.sample \ > -DartifactId=mvn-example # 雛形の作成を確認 $ cd mvn-example/ $ ls -R .: pom.xml src ./src: main test ./src/main: java ./src/main/java: com ./src/main/java/com: sample ./src/main/java/com/sample: App.java ./src/test: java ./src/test/java: com ./src/test/java/com: sample ./src/test/java/com/sample: AppTest.java # コンパイル $ mvn compile # targetディレクトリ以下が作成されていることを確認 $ ls target/ -R target/: classes target/classes: com target/classes/com: sample target/classes/com/sample: App.class # mavenで実行 $ mvn exec:java -Dexec.mainClass=com.sample.App ... Hello World! [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 20.487s [INFO] Finished at: Thu Feb 08 13:58:23 UTC 2018 [INFO] Final Memory: 8M/21M [INFO] ------------------------------------------------------------------------ # もちろんjavaコマンドも利用可能 $ java -cp target/classes/ com.sample.App Hello World!
雛形の作成から実行まで、スムーズに進められるようになりました。
おまけ的に、mvnコマンドに引数を設定する方法もメモしておきます。
# 引数を使うプログラムへ、App.javaを書き換え $ echo 'package com.sample; public class App{ public static void main( String[] args ){ System.out.println("See it, " + args[0]); } }' > src/main/java/com/sample/App.java # 再度コンパイル、引数をつけて実行 $ mvn compile $ mvn exec:java -Dexec.mainClass=com.sample.App -Dexec.args=mvn-sample-arg ... See it, mvn-sample-arg [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.088s [INFO] Finished at: Thu Feb 08 14:06:16 UTC 2018 [INFO] Final Memory: 7M/17M [INFO] ------------------------------------------------------------------------
20180210追記;
Mavenについての説明記事を投稿しました。