kusumotolab / kGenProg

A High-performance, High-extensibility and High-portability APR System
MIT License
48 stars 13 forks source link

ビルドツールの設定が有効活用されていない #830

Open shinsuke-mat opened 3 years ago

shinsuke-mat commented 3 years ago

ref #596

前提

題材がビルドツール(maven/gradle)を利用している場合の話.

前提として,kgpの起動パラメタは2種類ある. A. GAのパラメタ(兄弟の数,世代の数,タイムリミット等) B. 題材の実行情報(ソースパス,テストパス,クラスパス)

やりたいこと

題材がビルドツールを利用している場合,Bの情報はビルドツールの設定を自動的に取り込むべき. kgp利用者による明示的な指定が不要になり,kgpの可搬性が上がる.

596 で部分的にその機能が実装された.

build.gradlepom.xml 等の設定ファイルを読み込んで,ソースパス・テストパスを自動解決する.

問題点

しかし,設定ファイルの読み込みはあくまで静的な処理であるため,依存解決は適用されない. よってクラスパスの適切な処理ができていない.Bの一部の情報が解決できていない. (あとAも微妙に不完全)

idea

もしkgp内で各種ビルドツールを実行できれば, 以下依存解決関連の処理をビルドツールに委譲して,クラスパスの解決が可能になる.

shinsuke-mat commented 3 years ago

maven/gradleはjavaで実装されており,スタンドアローンではなくライブラリとして利用もできる. https://mvnrepository.com/artifact/org.gradle/gradle-tooling-api https://mvnrepository.com/artifact/org.apache.maven/maven-embedder

手元で上記2つのビルドツールをkgp内から実行して, 動的に依存解決できることは確認した.

shinsuke-mat commented 3 years ago

こっから議論.

kgpのcuiからどのようにビルドツールの設定を読み込ませるかを検討すべき.

ビルドツールの実行はそれなりに時間を要するので,常にビルドツールを実行するのはどうだろう. ただし差分ビルドが適用されるので2回目はそれなりに高速.

問題A

ビルドツールの設定ファイルがあった場合に自動的に読み込むか否か.

$ java -jar kgp.jar          # A1. 自動的に読み込む
$ java -jar kgp.jar --gradle # A2. 指定すれば自動的に読み込む

問題B.

同項目の設定が重複した場合にどうする?

$ java -jar kgp.jar --config kgp.toml --gradle                     # toml vs gradle
$ java -jar kgp.jar --config kgp.toml --gradle --src src/main/java # toml vs gradle vs cui

設定内容に齟齬があったときはどれを優先する?

起動時にオプション一覧が並ぶので,一応利用者にどの値が反映されたかは見える. 見えるだけで伝わるかは別問題.警告を出す?

[WARN] the following kgp parameters have inconsistency. we pick * value
--src
  - *src/main/java (from build.gradle)
  - src (from cui parameter)
shinsuke-mat commented 3 years ago

結論