MATSim example-project を CUI で動かす手順メモ

■背景

『行政府が提供するアプリを使うと、下手なウィルスより、酷い結果が待っている』 『メインの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 -versionCommand '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.RunMatsimApplication
  • org.matsim.project.RunMatsim
  • org.matsim.project.RunMatsimFromExamplesUtils
  • org.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.xml
  • output_events.xml.gz
  • output_plans.xml.gz
  • output_network.xml.gz
  • logfile.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無し)
  • RunMatsimmvn exec:java で起動し、config を渡して CUI 実行する
  • 成功判定は output ディレクトリと生成ファイルで行う

GUIの再構築はあとでやる、とする

 

 

未分類

Posted by ebata