Tracの導入

tracのインストール

バージョン:trac-0.9.5-1.fc3.rf

# yum install trac

プロジェクト作成

# mkdir /home/trac
# trac-admin /home/trac/project initenv

プロジェクト名:project
データベース名:(未入力でEnter)
Subversionリポジトリのパス:/home/svn/project
テンプレートのパス:(未入力でEnter)

Shift_JISソースコードをブラウザへ表示する為の設定

# vi /home/trac/project/conf/trac.ini
[trac]
default_charset = japanese.shift_jis
ignore_auth_case = false

Subversionのサイトファイルを編集

# vi /etc/httpd/conf.d/subversion.conf

   AuthType Basic
   AuthName "Trac Authentication"
   AuthUserFile /home/svn/project/.htpasswd
   Require valid-user


ScriptAlias /trac/project /usr/share/trac/cgi-bin/trac.cgi

   SetEnv TRAC_ENV "/home/trac/project"

権限を変更する

# chown -R apache:apache /home/trac

サーバをリスタート

# /etc/init.d/httpd restart

Subversionの導入

Subversionのインストール

バージョン:subversion-1.2.1-0.1.1.fc3.rf

# yum install subversion
# yum install mod_dav_svn

リポジトリの作成

# mkdir -p /home/svn/project
# svnadmin create /home/svn/project

トランク、タブ、ブランチの作成

# export SVN_EDITOR='vi'
# svn mkdir \
file:///home/svn/project/trunk \
file:///home/svn/project/tags \
file:///home/svn/project/branches

インポート

# mkdir sen
# echo HelloWorld! > sen/text.txt
# svn import sen file:///home/svn/project/trunk/sen

チェックアウト

# mkdir co
# cd co
# svn
# svn co file:///home/svn/project/trunk/sen

WebDAV設定ファイル作成

# vi  /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so


   DAV svn
   SVNPath /home/svn/project
   AuthType Basic
   AuthName "Subversion Repository"
   AuthUserFile /home/svn/project/.htpasswd
   Require valid-user

ユーザの作成

# htpasswd -cm /home/svn/project/.htpasswd admin
New password:
Re-type new password:
Adding password for user admin

権限を変更する

# chown -R apache:apache /home/trac

サーバをリスタート

# /etc/init.d/httpd restart

メタアノテーションとは?

アノテーションアノテーションです(^^;)


以下のものが、java.lang.annotationパッケージに定義されています。
①Target
②Retention
③Documented
④Inherited


①Target

アノテーション型の宣言にのみ利用できるもので
アノテーションの対象を指定します。

java.lang.annotation.ElementType.ANNOTATION_TYPE - アノテーション
java.lang.annotation.ElementType.CONSTRUCTOR - コンストラク
java.lang.annotation.ElementType.FIELD - フィールド
java.lang.annotation.ElementType.LOCAL_VARIABLE - ローカル変数
java.lang.annotation.ElementType.METHOD - メソッド
java.lang.annotation.ElementType.PACKAGE - パッケージ
java.lang.annotation.ElementType.PARAMETER - パラメータ
java.lang.annotation.ElementType.TYPE - クラス、インタフェース、列挙型

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
public @interface AnnotationTest {
	String value();
}

このアノテーションは、フィールド以外に指定するとコンパイル時に怒られます。

②Retention

アノテーション型の宣言にのみ利用できるもので
アノテーションの利用局面を指定します。
java.lang.annotation.RetentionPolicy.CLASS
- コンパイル後、クラスファイルに記録される。しかし、実行時に VM に読み込まれない。
java.lang.annotation.RetentionPolicy.RUNTIME
- コンパイル後、クラスファイルに記録される。実行時に VM に読み込まれる。
java.lang.annotation.RetentionPolicy.SOURCE
- コンパイル時に破棄される。

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationTest {
	String value();
}

デフォルトはCLASSが指定される。
その為、実行時にリフレクションAPIを使用して、アノテーションにアクセスしたようなら
RUNTIME を指定する必要がある。
しかし、SOURCEやCLASSのアノテーションに関してもapt(Annotation Processor Tool)
というコマンドが提供されており、パーサの役割を果たしてくれるとのこと。
暇があればまた調べてみよう。

独自アノテーションの作成

アノテーションの宣言は @interface キーワードを用います。
また、java.lang.annotation.Annotationを暗黙的に継承する為、別のアノテーション
を継承させるといった使い方はできません。


①メンバを持たないアノテーション

public @interface AnnotationTest { }

②1つのメンバを持つアノテーション

public @interface AnnotationTest {
	String value();
}

特にメンバが1つの場合、valueというメンバを定義します。

③複数のメンバを持つアノテーション

public @interface AnnotationTest {
	int id();
	String[] names();
	String comment() default "no comment."; // デフォルトを指定すると省略できる
	AnnotationTypeEnum type(); // 列挙型
}
public enum AnnotationTypeEnum {
	TYPE_1,
	TYPE_2,
	TYPE_3
}

※.列挙型を指定した例
※.デフォルト値を指定すると省略可能。(デフォルト値の指定には、defaultキーワードを使う。)


また、メソッドの戻り値には、プリミティブ型、String、Class、列挙型、アノテーション
しか指定できないとのこと。

利用方法は?

実行時に読み込んで何かの処理を後付けするような動的な使い方や
ソースコードXMLなどをJavaソースをもとに生成するような静的な使い方が
あるらしい。
どちらかというと後者に興味あり。