-
Notifications
You must be signed in to change notification settings - Fork 0
HowToBuildJava
高島望 edited this page Jul 13, 2019
·
3 revisions
自動生成の手順は以下の流れで行います。

-
GenerateContextの生成
GenerateContextとは、本ライブラリの中心的コンテキストであり情報保持クラスです。
オプションで指定された値や、自動生成対象等を管理しています。
詳細に関しては、公開しているJavaDocを参照してください。 -
GenerateTargetの生成
GenerateTargetは自動生成対象のクラス毎の情報保持クラスです。
利用するJavaクラスのTemplateの指定や、変数、クラスモデルを管理しています。
内部管理用のパラメータであるため利用時に意識することは、カスタムを行わない限りはありません。 -
ClassModelの生成&構築
クラスの内容を保持するクラスです。
利用時に一番扱うことが多いクラスでもあります。
このClassModel配下の様々な内容を構築することで、どのようなクラスを出力するかを指定します。 -
任意のGeneratorによる自動生成の実行
Version毎にGeneratorが存在するため、自動生成したいGeneratorを選択の上実行します。
どのようなGeneratorが存在するのかは、サポートしているJavaのバージョンは参照してください。
自動生成フローの大まかな動きをコードにしたものです。
// 1 : GenerateContextの生成
GenerateContext context = new GenerateContext();
// 2 : GenerateTargetの生成
GenerateTarget target = context.newTarget(DefaultTemplate.JAVA8);
StringWriter sw = new StringWriter();
target.setOutputWriter(sw);
// 3 : ClassModelの生成&構築
ClassModel clazz =
ClassModel.builder()
...
...
.build();
target.setClazz(clazz);
// 4 : 任意のGeneratorによる自動生成の実行
Java8Generator generator = new Java8Generator();
generator.generate(context);
// 自動生成した内容をログ表示(文字列)
log.info(sw.toString());ClassModelは以下のような構成になっています。
構成要素それぞれを構築することによって細かいJavaクラスの表現が可能になります。
Class
|
|-- package
|-- import
|-- JavaDoc
|-- Annotaion(アノテーション)
|-- Access Modifier(アクセス修飾子 public等)
|-- Type Modifier(型修飾子 final等)
|-- Class Name
|-- Super Class
|-- Interface
|
|-- Field(フィールド)
| |
| |-- JavaDoc
| |-- Access Modifier(アクセス修飾子 public等)
| |-- Field Modifier(フィールド修飾子)
| |-- Annotation(アノテーション)
| |-- Type (ClassModelで表す)
| |-- Name
| `-- Initialization Value (初期値)
|
|-- Enumerator(Enumの列挙子 Enumの時だけ使う)
| |
| |-- JavaDoc
| |-- Name
| `-- Value
|
|-- Constructor(コンストラクタ)
| |
| |-- JavaDoc
| |-- Access Modifier(アクセス修飾子 public等)
| |-- Method Modifier(メソッド修飾子)
| |-- Annotation(アノテーション)
| |-- Name
| |-- Args(引数)
| |-- Throws(throws)
| `-- Logic(ロジック)
|
|-- Method(メソッド)
| |
| |-- JavaDoc
| |-- Access Modifier(アクセス修飾子 public等)
| |-- Method Modifier(メソッド修飾子)
| |-- Annotation(アノテーション)
| |-- Return Type(戻り値の型 当然voidも可)
| |-- Name
| |-- Args(引数)
| |-- Throws(throws)
| `-- Logic(ロジック)
JavaDoc、Annotation、引数のように共通的な要素と、Class、Field、Method毎の固有の設定要素が存在しています。それぞれについては以降で詳細に説明します。