■背景
『行政府が提供するアプリを使うと、下手なウィルスより、酷い結果が待っている』 『メインのPCには絶対にインストールしないこと』
■目的
\\wsl$\Ubuntu\home\tomoi\matsim-example-project でMATSimが動くかの確認したい
以下は、**「CUIでMATSim example-project を確実に動かす」**ところまでの手順を、今回あなたが辿った順番に沿って、抜け漏れが出ないようにメモ化したものです(ファイル改変は不要、pom.xmlも触らない前提).
MATSim example-project を CUI で動かす手順メモ
0. 前提
- 作業ディレクトリ:
~/matsim-example-project - 目的:
config-test1.xml(例:scenarios/equil3/config-test1.xml)を CUIで実行して、出力ファイル(output_*)を生成する. - 重要:MATSim は実行結果を 画面ではなく出力ディレクトリにファイルとして作る.そのため「成功しても派手な完了表示はない」.
1. example project の取得
cd ~
git clone https://github.com/matsim-org/matsim-example-project.git
cd matsim-example-project
2. Maven の導入
(未導入なら)
sudo apt update
sudo apt install maven
3. まずビルド(jar を作る)
mvn clean package
3.1 ビルド時の典型的な失敗と原因
今回出たエラー:
Fatal error compiling: error: release version 21 not supported
- これは「Java 21 でコンパイルしろ」と言われているのに、手元のコンパイラ(
javac)が 21 ではない/そもそも無い、という意味.
4. Java/JDK 状況の確認(重要)
以下で状況が分かる.
java -version
javac -version
mvn -version
今回の状態:
java -versionは 21 でOKだがjavac -versionがCommand 'javac' not foundになっていた
→ つまり JREはあるがJDKが無い(コンパイルに必要なjavacが無い).
5. JDK 21 を入れて javac を用意する(ビルド失敗の決定打)
sudo apt update
sudo apt install openjdk-21-jdk
導入後の確認:
javac -version
# 期待:javac 21.0.xx
(念のため)
mvn -version
# 出力に "Java version: 21..." が出ていればOK
6. ビルドし直し
cd ~/matsim-example-project
mvn clean package
ここで jar が生成される:
target/matsim-example-project-0.0.1-SNAPSHOT.jar
7. java -jar ... が動かない理由(重要)
java -jar target/matsim-example-project-0.0.1-SNAPSHOT.jar をすると:
no main manifest attribute
これは「jarのMANIFESTにMain-Classが入っていない」ためで、この jar は java -jar 実行用ではない.
(異常ではなく、そういう作りの jar)
→ 実行は Maven(exec)で mainClass を指定して行うのが基本.
8. 実行に使える main クラスを調べる
main(public static void main)があるクラスを探す:
grep -R "public static void main" -n src/main/java
今回出た候補(例):
org.matsim.project.RunMatsimApplicationorg.matsim.project.RunMatsimorg.matsim.project.RunMatsimFromExamplesUtilsorg.matsim.gui.MATSimGUI
CUIで回す入口としては org.matsim.project.RunMatsim を使うのが素直.
9. CUIでMATSimを実行する(ここがゴール)
9.1 config を指定して実行
(今回の例:equil3)
mvn -Dexec.mainClass=org.matsim.project.RunMatsim \
-Dexec.args="scenarios/equil3/config-test1.xml" \
exec:java
これで MATSim が実行される.
9.2 実行結果の見え方
実行が通ると最後に概ねこう出る:
[INFO] BUILD SUCCESS
[INFO] Total time: ...
終了間際に以下の警告が出る場合がある:
NOTE: 2 thread(s) did not finish despite being asked to via interruption.
- これは exec-maven-plugin の問題ではなく、終了時に残ったスレッドがあるという警告
- 多くの場合、結果の生成自体とは無関係
- まずは無視してよい(少なくとも「失敗」ではない)
10. 「成功したか分からない」時の確認方法
MATSim は結果を 出力ディレクトリにファイルとして生成するので、以下で確認する。
10.1 output ディレクトリを探す
find . -maxdepth 3 -type d -name "output*"
10.2 出力の中身を見る
(例:./scenarios/equil3/output ができていた場合)
ls -la scenarios/equil3/output
典型的に生成されるファイル例:
output_config.xmloutput_events.xml.gzoutput_plans.xml.gzoutput_network.xml.gzlogfile.log
これらが出ていれば シミュレーション成功と判断してよい.
補足:GUIが起動しても Start で落ちる件(今回の背景整理)
mvn -Dexec.mainClass=org.matsim.gui.MATSimGUI exec:javaで GUI は起動する- しかし GUI の Start は内部で別プロセス
java ... org.matsim.project.RunMatsimを起動しようとし、classpath不足で落ちることがある:ClassNotFoundException: org.matsim.project.RunMatsim
→ そのため現状は CUI実行が最も確実(今回のゴール).
まとめ(このメモの到達点)
- JDK 21(
javac)を入れてビルドできる状態にする java -jarでは動かないことを理解する(Main-Class無し)RunMatsimをmvn exec:javaで起動し、config を渡して CUI 実行する- 成功判定は output ディレクトリと生成ファイルで行う
GUIの再構築はあとでやる、とする