Teedaにおけるpom.xmlの設定
Teedaでプロジェクトを利用していると、通常Maven2でパッケージを作ると思いますが、その設定例を書き出してみます。基本的にはEclipse上でDoltengを利用して作成したものに手をいれています。あとちょっと昔のプロジェクトなのでバージョンとかは少し古いものです。
注意事項としては、小規模から中規模案件向けの設定になります。
build
ビルドに関してはpathなどはデフォルト設定のまま使っています。ここは妙に変えると面倒ですからね。会社規定のpath構造などをあって、デフォルトと違う場所に移動するとパッケージを作る際に特別な手順などが必要なのと、導入教育が面倒なのでデフォルトで使うのが良いと思います。(共通Path設定にするためのMavenだよね?)
コンパイラバージョンの指定
<plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> <encoding>UTF-8</encoding> </configuration> </plugin>
通常1.6の新機能って使うことないと思いますので、1.5にしておきます。この辺は環境依存しますが確実に1.6の使える環境であれば1.6を使った方が動作が早いような気もしますが、まだまだサーバーが1.5で動いていることが多いので。。。
javadocの設定
<plugin> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <source>1.5</source> <minmemory>128m</minmemory> <maxmemory>512m</maxmemory> <encoding>UTF-8</encoding> <docencoding>UTF-8</docencoding> <charset>UTF-8</charset> <locales>ja</locales> </configuration> </plugin>
個人的には使いませんが、とりあえず入れておきます。パッケージを作るだけであれば利用されないですしね。なんとなくDoxygen派です。でも基本的にはソースは頭で覚えるか実物見るのであまりこの手のドキュメントは使いません。
profiles
環境別のビルドファイルを作る設定を追加します。
<profiles> <profile> <id>development</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <finalName>neko-development</finalName> <resources> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> </resource> </resources> </build> </profile> <profile> <id>ita</id> ... 略 ... </profile> <profile> <id>itb</id> ... 略 ... </profile> <profile> <id>product</id> <build> <finalName>neko-product</finalName> <resources> <resource> <directory>src/product/resources</directory> </resource> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> </resource> </resources> </build> </profile> </profiles>
src/main/resources にデフォルト環境+開発環境
src/ita/resources に社内テストサーバー用設定(差分のみ)
src/itb/resources に本番テストサーバー用設定(差分のみ)
src/product/resources に本番サーバー用設定(差分のみ)
って使い分けをしています。中身は
env.txt | 環境別にitやproductを指定 |
jdbc.dicon | DBのIPやパスワードの設定 |
log4j.properties | テストサーバーはdebugなど出力レベル調整 |
siteSetting.dicon | そのサーバー特有の設定 |
みたいなものを入れています。デフォルトでないのがsiteSetting.diconです。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <component name="SiteSettingService" class="neko.service.SiteSettingService"> <property name="csvBasePath"> "C:/neko-data/csv/" </property> <property name="siteBaseURL"> "http://127.0.0.1:8080/neko/" </property> </component> </components>
上記のようにサーバーによって変わってくる部分を記述します。メールとかに埋め込むサイトのURLとか、管理者のメールアドレスとかDBに設定すればいいのですが、ちょっとしたものはここで設定しています。propertiesでもいいのですが、なんとなく(笑)
package neko.service; public class SiteSettingService { public String csvBasePath; public String siteBaseURL; }
受側のjavaファイルです。サンプルでは何もしていませんが、実際にはURLの合成などのちょっとした処理が入っていたりします。利用するときにはこのサービスを宣言すると自動的にDIされて設定したdiconファイルの内容が初期値に入っています。
pluginRepositories
リポジトリの設定ですが利用していません。個人的にはプロジェクトで利用するファイルはすべてSVNにコミットする方針を採っているので、インターネットやイントラからのダウンロードはしない方針です。
dependencies
すべてプロジェクト内部にファイルを持ちます。これによってMaven系のプラグインのダウンロードは発生しますが、個別のライブラリのダウンロードは必要なくなります。
<dependencies> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jsp_2.0_spec</artifactId> <version>2.0</version> <scope>system</scope> <systemPath>${basedir}/lib/geronimo-jsp_2.0_spec-1.0.jar</systemPath> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-servlet_2.4_spec</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${basedir}/lib/geronimo-servlet_2.4_spec-1.0.jar</systemPath> </dependency> ... 略 ...
パッケージの作り方
バッチファイルで以下のコマンドを実行しています。Eclipse上から実行するとEclipseの実行Pathからになるので、エクスプローラーかDOS窓上から実行しています。内容は本番テストサーバーと本番サーバーのパッケージになります。開発系も一緒にパッケージングしてもいいのですが、開発系はHudsonとかで自動デプロイされる環境がこのましいのと、別タイミングで作ることが多いのでこんな感じになっています。
mkdir package call mvn clean package -P itb copy /y target\*.war package call mvn clean package -P product copy /y target\*.war package call mvn clean
全文
<?xml version="1.0" encoding="UTF-8"?><project> <modelVersion>4.0.0</modelVersion> <groupId>neko</groupId> <artifactId>neko</artifactId> <packaging>war</packaging> <name>neko</name> <version>0.0.1</version> <build> <sourceDirectory>src/main/java</sourceDirectory> <outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory> <testOutputDirectory>target/test-classes</testOutputDirectory> <testSourceDirectory>src/test/java</testSourceDirectory> <testResources> <testResource> <directory>src/test/resources</directory> </testResource> </testResources> <defaultGoal>validate</defaultGoal> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>source-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>src/main/webapp/view</source> </sources> </configuration> </execution> </executions> </plugin> <plugin> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <source>1.5</source> <minmemory>128m</minmemory> <maxmemory>512m</maxmemory> <encoding>UTF-8</encoding> <docencoding>UTF-8</docencoding> <charset>UTF-8</charset> <locales>ja</locales> </configuration> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <artifactId>maven-eclipse-plugin</artifactId> <configuration> <wtpversion>1.5</wtpversion> </configuration> </plugin> </plugins> </pluginManagement> </build> <!-- [[profiles]] how to use : mvn package -P product --> <profiles> <profile> <id>development</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <finalName>neko-development</finalName> <resources> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> </resource> </resources> </build> </profile> <profile> <id>ita</id> <build> <finalName>neko-ita</finalName> <resources> <resource> <directory>src/ita/resources</directory> </resource> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> </resource> </resources> </build> </profile> <profile> <id>itb</id> <build> <finalName>neko-itb</finalName> <resources> <resource> <directory>src/itb/resources</directory> </resource> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> </resource> </resources> </build> </profile> <profile> <id>product</id> <build> <finalName>neko-product</finalName> <resources> <resource> <directory>src/product/resources</directory> </resource> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> </resource> </resources> </build> </profile> </profiles> <!-- <pluginRepositories> <pluginRepository> <id>maven.seasar.org</id> <name>The Seasar Foundation Maven2 Repository</name> <url>http://maven.seasar.org/maven2</url> </pluginRepository> </pluginRepositories> <repositories> <repository> <id>maven</id> <name>Maven2 Repository</name> <url>http://repo1.maven.org/maven2/</url> </repository> <repository> <id>maven.seasar.org</id> <name>The Seasar Foundation Maven2 Repository</name> <url>http://maven.seasar.org/maven2</url> </repository> </repositories> --> <dependencies> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jsp_2.0_spec</artifactId> <version>2.0</version> <scope>system</scope> <systemPath>${basedir}/lib/geronimo-jsp_2.0_spec-1.0.jar</systemPath> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-servlet_2.4_spec</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${basedir}/lib/geronimo-servlet_2.4_spec-1.0.jar</systemPath> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.2</version> <scope>system</scope> <systemPath>${basedir}/lib/junit-3.8.2.jar</systemPath> </dependency> <dependency> <groupId>junit-addons</groupId> <artifactId>junit-addons</artifactId> <version>1.4</version> <scope>system</scope> <systemPath>${basedir}/lib/junit-addons-1.4.jar</systemPath> </dependency> <dependency> <groupId>rhino</groupId> <artifactId>rhino</artifactId> <version>1.6r2</version> <scope>system</scope> <systemPath>${basedir}/lib/rhino-1.6r2.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-webunit</artifactId> <version>0.2.2</version> <scope>system</scope> <systemPath>${basedir}/lib/teeda-webunit-0.2.2.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-xmlunit</artifactId> <version>0.1.0</version> <scope>system</scope> <systemPath>${basedir}/lib/teeda-xmlunit-0.1.0.jar</systemPath> </dependency> <dependency> <groupId>xmlunit</groupId> <artifactId>xmlunit</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${basedir}/lib/xmlunit-1.0.jar</systemPath> </dependency> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/aopalliance-1.0.jar</systemPath> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.1</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/commons-collections-3.1.jar</systemPath> </dependency> <dependency> <groupId>commons-el</groupId> <artifactId>commons-el</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/commons-el-1.0.jar</systemPath> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/commons-fileupload-1.2.jar</systemPath> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/commons-io-1.3.2.jar</systemPath> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/commons-logging-1.1.jar</systemPath> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jta_1.1_spec</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/geronimo-jta_1.1_spec-1.0.jar</systemPath> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.0.69</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/h2-1.0.69.jar</systemPath> </dependency> <dependency> <groupId>jboss</groupId> <artifactId>javassist</artifactId> <version>3.4.ga</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/javassist-3.4.ga.jar</systemPath> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.1.2</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/jstl-1.1.2.jar</systemPath> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.13</version> <scope>provided</scope> </dependency> <dependency> <groupId>ognl</groupId> <artifactId>ognl</artifactId> <version>2.6.9-patch-20070908</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ognl-2.6.9-patch-20070908.jar</systemPath> </dependency> <dependency> <groupId>poi</groupId> <artifactId>poi</artifactId> <version>3.0-FINAL</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/poi-3.0-FINAL.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.dao</groupId> <artifactId>s2-dao</artifactId> <version>1.0.49</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/s2-dao-1.0.49.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.dao</groupId> <artifactId>s2-dao-tiger</artifactId> <version>1.0.49</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/s2-dao-tiger-1.0.49.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-extension</artifactId> <version>2.4.33</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/s2-extension-2.4.33.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-framework</artifactId> <version>2.4.33</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/s2-framework-2.4.33.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-tiger</artifactId> <version>2.4.33</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/s2-tiger-2.4.33.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-ajax</artifactId> <version>1.0.13-sp4</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/teeda-ajax-1.0.13-sp4.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-core</artifactId> <version>1.0.13-sp4</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/teeda-core-1.0.13-sp4.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-extension</artifactId> <version>1.0.13-sp4</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/teeda-extension-1.0.13-sp4.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-tiger</artifactId> <version>1.0.13-sp4</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/teeda-tiger-1.0.13-sp4.jar</systemPath> </dependency> <dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.6.2</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/xercesImpl-2.6.2.jar</systemPath> </dependency> <dependency> <groupId>xerces</groupId> <artifactId>xmlParserAPIs</artifactId> <version>2.6.2</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/xmlParserAPIs-2.6.2.jar</systemPath> </dependency> <dependency> <groupId>net.arnx.jsonic</groupId> <artifactId>jsonic</artifactId> <version>1.0.3</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/jsonic-1.0.3.jar</systemPath> </dependency> <dependency> <groupId>com.lowagie.text</groupId> <artifactId>iText</artifactId> <version>2.1.4</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/iText-2.1.4.jar</systemPath> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang</artifactId> <version>2.4</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/commons-lang-2.4.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.chronos</groupId> <artifactId>s2chronos-core</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/s2chronos-core-1.0.0.jar</systemPath> </dependency> <dependency> <groupId>org.seasar.chronos</groupId> <artifactId>s2chronos-extension</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/s2chronos-extension-1.0.0.jar</systemPath> </dependency> </dependencies> </project>