<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
	<properties>
		<title>アノテーション処理</title>
	</properties>
	<body>
		<section name="目次">
			<ul>
				<li><a href="#概要">概要</a></li>
				<li><a href="#オプション">オプション</a>
					<ul>
						<li><a href="#Eclipseでのオプション指定">Eclipseでのオプション指定</a></li>
						<li><a href="#javacでのオプション指定">javacでのオプション指定</a></li>
						<li><a href="#Antでのオプション指定">Antでのオプション指定</a></li>
						<li><a href="#Mavenでのオプション指定">Mavenでのオプション指定</a></li>
						<li><a href="#Gradleでのオプション指定">Gradleでのオプション指定</a></li>
					</ul>
				</li>
			</ul>
		</section>
		<section name="概要">
			<p>
				<a href="http://java.sun.com/javase/6/docs/technotes/guides/apt/index.html">Annotation Processing Tool （apt）  </a> 
				を利用すると、ソースコードの自動生成や検証を<b>コンパイル時</b>に行うことができます。
			</p>
			<p>
				DomaではこのAPIを利用し、@Entityや@Daoと言ったアノテーションが注釈されたクラスやインタフェースを処理し、必要なクラスを自動生成します。
				また、注釈されたクラスやインタフェースの検証を行い、Domaの規約に従っていないソースコードがある場合は
				エラーメッセージをIDE（Eclipseなど）のエディタやjavacを実行したコンソール上に表示します。
			</p>
		</section>
		<section name="オプション">
			<p>
				注釈処理にはオプションを与えることができます。
				Domaで定義しているオプションには次のものがあります。
				必要に応じて使用してください。
			</p>
			<table>
				<tr>
					<th>key</th>
					<th>説明</th>
					<th>デフォルトの値</th>
				</tr>
				<tr>
					<td>dao.package</td>
					<td>@Daoが注釈されたインタフェースの実装クラスが生成されるパッケージ。
					何らかの値を指定した場合、dao.subpackageの指定よりも優先される。</td>
					<td>@Daoが注釈されたインタフェースと同じパッケージ</td>
				</tr>
				<tr>
					<td>dao.subpackage</td>
					<td>@Daoが注釈されたインタフェースの実装クラスが生成されるサブパッケージ。
					dao.packageに値を指定していない場合にのみ有効。
					@Daoが注釈されたインタフェースのパッケージが「example.dao」で、ここに指定した値が「impl」の場合、
					生成されるクラスのパッケージは「example.dao.impl」となる。</td>
					<td></td>
				</tr>
				<tr>
					<td>dao.suffix</td>
					<td>@Daoが注釈されたインタフェースの実装クラスの名前のサフィックス。
					@Daoが注釈されたインタフェースの単純名が「EmployeeDao」で、ここに指定した値が「Bean」の場合、
					生成されるクラスの単純名は「EmployeeDaoBean」となる。</td>
					<td>Impl</td>
				</tr>
				<tr>
					<td>debug</td>
					<td>注釈処理のデバッグ情報をログ出力するかどうか。「true」の場合、ログ出力を行う。</td>
					<td>false</td>
				</tr>
				<tr>
					<td>domain.converters</td>
					<td>任意の型と基本型を相互変換するDomainConverterのプロバイダとなるクラスの完全修飾名のカンマ区切り。
					クラスは<a href="http://doma.seasar.org/apidocs/org/seasar/doma/DomainConverters.html"><code>org.seasar.doma.DomainConverters</code></a>
					によって注釈されていないければいけない。</td>
					<td></td>
				</tr>
				<tr>
					<td>entity.field.prefix</td>
					<td>@Entityが注釈されたクラスごとに生成されるタイプクラスで使用される。
					タイプクラスのpublicなフィールド名のプレフィックス。
					「none」を指定すると、プレフィックスを使用しないという意味になる。</td>
					<td>$</td>
				</tr>
				<tr>
					<td>expr.functions</td>
					<td><a href="sqlfile.html#SQLコメント">式コメント</a>で利用可能な関数群を表すクラスの完全修飾名。
					<a href ="../apidocs/org/seasar/doma/expr/ExpressionFunctions.html"><code>org.seasar.doma.expr.ExpressionFunctions</code></a>のサブタイプでなければいけない。</td>
					<td>org.seasar.doma.expr.ExpressionFunctions</td>
				</tr>
				<tr>
					<td>sql.validation</td>
					<td>SQLファイルの存在チェックとSQLコメントの文法チェックを行う場合は、true。行わない場合は、false。</td>
					<td>true</td>
				</tr>
				<tr>
					<td>version.validation</td>
					<td>
						注釈処理によるソースコード生成で利用したDomaのバージョンと実行時のDomaのバージョンが同じであることをチェックする場合は、true。しない場合は、false。
						Domaのあるバージョンで生成されたコードを含むライブラリを作成する場合にfalseを指定してビルドすると、そのライブラリの再利用性が高まります。
						ライブラリが依存するDomaのバージョンとは異なるバージョンのDomaで実行できるからです（Domaのバージョンに互換性がある限りにおいて）。
					</td>
					<td>true</td>
				</tr>
			</table>
			<subsection name="Eclipseでのオプション指定">
				<p>
					Ecipseでは、プロジェクトのプロパティの「Annotation Processing」の項目でオプションを登録します。
				</p>
				<img src="../images/eclipse_apt_options.png" width="454" height="152" alt="Eclipseでのオプション指定" />
			</subsection>
			<subsection name="javacでのオプション指定">
				<p>
					-Aオプションにより登録します。詳細は<a href="http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/javac/index.html">javacのドキュメント</a>を参照してください。
				</p>
			</subsection>
			<subsection name="Antでのオプション指定">
				<p>
					javacタスクのcompilerargタグのlineパラメータを使用します。
				</p>
				<source><![CDATA[<javac fork="yes" srcdir="src" compiler="javac1.6"
	classpathref="classpath" destdir="target" debug="on" encoding="UTF-8" >
	<compilerarg line="-Adao.subpackage=impl -Adto.suffix=Dao -Adto.debug=true "/>
</javac>]]></source>
			</subsection>
			<subsection name="Mavenでのオプション指定">
				<p>
					maven-compiler-pluginのcompilerArgumentタグを使用します。
				</p>
				<source><![CDATA[<plugin>
	<artifactId>maven-compiler-plugin</artifactId>
	<configuration>
		<source>1.6</source>
		<target>1.6</target>
		<encoding>UTF-8</encoding>
		<compilerArgument>-Adao.subpackage=impl</compilerArgument>
	</configuration>
</plugin>]]></source>
				<p>
					指定したいオプションが1つの場合は問題ありませんが、複数のオプションは<a href="http://jira.codehaus.org/browse/MCOMPILER-62">Mavenの制限</a>により指定できません。
					複数のオプションを使いたい場合は、maven-processor-pluginの利用を検討してください。
					maven-processor-pluginとmaven-compiler-pluginの併用方法については、<a href="app_build.html">アプリケーションのビルド方法</a>を参照してください。
				</p>
			</subsection>
			<subsection name="Gradleでのオプション指定">
				<p>
					compileJava.options.compilerArgsに指定します。
					以下の例では、'-Adao.subpackage=impl' と '-Adao.suffix=Impl' が注釈処理のオプション指定です。
				</p>
				<source><![CDATA[def aptGeneratePath = 'build/apt_generated'
compileJava.options.compilerArgs = ['-s', aptGeneratePath, '-Adao.subpackage=impl', '-Adao.suffix=Impl']]]></source>
			</subsection>
		</section>
	</body>
</document>