Maven + JFreeChart

「Maven + JFreeChart」の編集履歴(バックアップ)一覧はこちら

Maven + JFreeChart」(2006/03/19 (日) 01:25:06) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

* Maven + JfreeChart Servlet ** 環境構築 maven genapp type=web *** build.xml に jfreechart を登録 <dependency> <id>jfreechart</id> <version>1.0.1</version> </dependency> このままではダウンロードに失敗する。リモートレポジトリを探しても よいが、面倒なのでローカルレポジトリに jfreechart/jars/jfreechart-1.0.1.jar というパスで jar ファイルを おくことで解決。 つぎは jelly だ。 *** ソースを変更 デフォルトで用意されているサーブレットのファイル名を変更し、 簡単なチャートを作るサンプルを入れておく。 サンプルと jfreechart の版が異なるためか、import に関してエラーが 発生。jar ファイルを調べるとパッケージが変わっていることがわかり、 ソースを修正 *** web.xml ビルド過程で web.xml が生成されているが、build.xml には明示的な 指定が見当たらない。タイプが web の場合には XDoclet を使用する 様になっているらしいので Servlet class の javadoc 部分に次の 行を追加 * @web.servlet name="ChartServlet" * @web.servlet-mapping url-pattern="/ChartServlet" mave jar の結果次の行が web.xml に現れた。 <servlet> <servlet-name>ChartServlet</servlet-name> <servlet-class>yt.web.ChartServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ChartServlet</servlet-name> <url-pattern>/ChartServlet</url-pattern> </servlet-mapping> ** war ファイルの作成 ビルドには maven jar で jar ファイルを作っていたが JBoss に インストールするには war でないと(多分)だめ。これは maven war で作成された。 ** deploy war ファイルを JBoss の deploy ディレクトリにコピーする。 23:48:49,068 INFO [TomcatDeployer] deploy, ctxPath=/jfcserv, warUrl=.../tmp/dep loy/tmp33342jfcserv-exp.war/ 23:48:51,740 INFO [JBossCacheManager] init(): replicationGranularity_ is 0 and invaldateSessionPolicy is 2 23:48:51,818 ERROR [JBossCacheManager] JBossCacheService to Tomcat clustering no t found 23:48:51,818 ERROR [TomcatDeployer] Failed to setup clustering, clustering disab led Clustering に関するメッセージが出ている。web.xml に何か cluster を 要求する記述があるのかもしれない。ここでは気にせず、実行に進む。 ** 実行 localhost:8080/jfcserv にアクセスすると sample.jsp のディレクトリ リストが表示されるのみ localhost:8080/ChartServlet ではエラー(Status 404) になるため localhost:8080/jfcserv/ChartServlet をトライ 1回目はエラーが表示され、2回目からは 404 となる。これは CharServlet が disable されたため 23:49:51,802 INFO [[/jfcserv]] Marking servlet ChartServlet as unavailable 23:49:51,880 ERROR [[ChartServlet]] Allocate exception for servlet ChartServlet java.lang.NoClassDefFoundError: org/jfree/data/general/PieDataset war ファイルを見てみると WEB-INF/lib に jfreechart の jar ファイルが ない。本を見ると build.xml の変更が必要らしい。 ** war ファイルにライブラリを含める war.bundle プロパティを true にするとそのライブラリは war に含まれる。 <dependency> <id>jfreechart</id> <version>1.0.1</version> <properties> <war.bundle>true</war.bundle> </properties> </dependency> 再ビルド後実行してみるとエラーが変わった。 java.lang.NoClassDefFoundError: org/jfree/util/PublicCloneable ** ライブラリを追加 PublicClonable は jcommon-1.0.0.jar に入っている。 jcommon/jars/jcommon-1.0.0.jar というエントリをローカルレポジトリに用意すればよさそうだが、 これで良いのか疑問がわく。なぜならこのライブラリは jfreechart の一部だからだ。レポジトリ以下の構成は ${groupId}/${type}s/${artifactId}-${version}.${type} なので次要領ででトライ. - jfreechart/jars/jcommon-1.0.0.jar を作成 - 次のエントリを project.xml に用意 <dependency> <groupId>jfreechart</groupId> <artifactId>jcommon</artifactId> <version>1.0.0</version> <properties> <war.bundle>true</war.bundle> </properties> </dependency> ビルド、デプロイ、実行。グラフが表示できた。 ** マッピングの変更 * @web.servlet name="ChartServlet" * @web.servlet-mapping url-pattern="/chart.jpg" localhost:8080/jfcserv/chart.jpg でチャートが表示される。 当然、以前のパスでは 404 になる。 ** Clustering エラー 00:40:45,771 ERROR [JBossCacheManager] JBossCacheService to Tomcat clustering no t found 00:40:45,771 ERROR [TomcatDeployer] Failed to setup clustering, clustering disab led web.xml に distributable タグを発見。これを消すことで解決 <web-app > <!-- <distributable/> --> しかし、web.xml は XDoclet が動的に生成しているため、元となっている 設定あるいはテンプレートがあるはず... プロジェクト以下のファイルを探しても、それらしき物は見つからない。 ローカルレポジトリにも見つからない。 Googleで探すと ant の場合、次のような指定で出来るようである。 <deploymentdescriptor distributable="false" /> maven.xml を見ると次のエントリで xdoclet を起動しているようだ。 <project xmlns:j="jelly:core" xmlns:ant="jelly:ant" default="war"> <preGoal name="java:compile"> <mkdir dir="${maven.build.dir}/xdoclet/webdoclet/WEB-INF" /> <attainGoal name="xdoclet:webdoclet" /> </preGoal> </project> レポジトリを見ると xdoclet plugin は jar で提供されていて、 設定らしき物は見当たらない。 http://xdoclet.sourceforge.net/xdoclet/maven-plugin.html このページによると maven xdoclet プラグインはプロパティで ある程度動作が制御できるようだ。 maven xdoclet plugin jar ファイルを展開すると plugin.properties があるが、distributable に関する物はない。 plugin.jelly には次の様な記述がある。 <j:set var="prop_name" value="maven.xdoclet.webdoclet.deploymentdescriptor.${subelement_index}.distributable"/> <jelant:setProperty name="distributable" value="${context.getVariable(prop_name)}"/> project.properties に次の1行を追加 maven.xdoclet.webdoclet.deploymentdescriptor.0.distributable=false XDoclet が走るようサーブレットソースをタッチして再ビルド。 狙い通り <distributable/> が消えた。
* Maven + JfreeChart Servlet ** 環境構築 maven genapp type=web *** build.xml に jfreechart を登録 <dependency> <id>jfreechart</id> <version>1.0.1</version> </dependency> このままではダウンロードに失敗する。リモートレポジトリを探しても よいが、面倒なのでローカルレポジトリに jfreechart/jars/jfreechart-1.0.1.jar というパスで jar ファイルを おくことで解決。 *** ソースを変更 デフォルトで用意されているサーブレットのファイル名を変更し、 簡単なチャートを作るサンプルを入れておく。 サンプルと jfreechart の版が異なるためか、import に関してエラーが 発生。jar ファイルを調べるとパッケージが変わっていることがわかり、 ソースを修正 *** web.xml ビルド過程で web.xml が生成されているが、build.xml には明示的な 指定が見当たらない。タイプが web の場合には XDoclet を使用する 様になっているらしいので Servlet class の javadoc 部分に次の 行を追加 * @web.servlet name="ChartServlet" * @web.servlet-mapping url-pattern="/ChartServlet" mave jar の結果次の行が web.xml に現れた。 <servlet> <servlet-name>ChartServlet</servlet-name> <servlet-class>yt.web.ChartServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ChartServlet</servlet-name> <url-pattern>/ChartServlet</url-pattern> </servlet-mapping> ** war ファイルの作成 ビルドには maven jar で jar ファイルを作っていたが JBoss に インストールするには war でないと(多分)だめ。これは maven war で作成された。 ** deploy war ファイルを JBoss の deploy ディレクトリにコピーする。 23:48:49,068 INFO [TomcatDeployer] deploy, ctxPath=/jfcserv, warUrl=.../tmp/dep loy/tmp33342jfcserv-exp.war/ 23:48:51,740 INFO [JBossCacheManager] init(): replicationGranularity_ is 0 and invaldateSessionPolicy is 2 23:48:51,818 ERROR [JBossCacheManager] JBossCacheService to Tomcat clustering no t found 23:48:51,818 ERROR [TomcatDeployer] Failed to setup clustering, clustering disab led Clustering に関するメッセージが出ている。web.xml に何か cluster を 要求する記述があるのかもしれない。ここでは気にせず、実行に進む。 ** 実行 localhost:8080/jfcserv にアクセスすると sample.jsp のディレクトリ リストが表示されるのみ localhost:8080/ChartServlet ではエラー(Status 404) になるため localhost:8080/jfcserv/ChartServlet をトライ 1回目はエラーが表示され、2回目からは 404 となる。これは CharServlet が disable されたため 23:49:51,802 INFO [[/jfcserv]] Marking servlet ChartServlet as unavailable 23:49:51,880 ERROR [[ChartServlet]] Allocate exception for servlet ChartServlet java.lang.NoClassDefFoundError: org/jfree/data/general/PieDataset war ファイルを見てみると WEB-INF/lib に jfreechart の jar ファイルが ない。本を見ると build.xml の変更が必要らしい。 ** war ファイルにライブラリを含める war.bundle プロパティを true にするとそのライブラリは war に含まれる。 <dependency> <id>jfreechart</id> <version>1.0.1</version> <properties> <war.bundle>true</war.bundle> </properties> </dependency> 再ビルド後実行してみるとエラーが変わった。 java.lang.NoClassDefFoundError: org/jfree/util/PublicCloneable ** ライブラリを追加 PublicClonable は jcommon-1.0.0.jar に入っている。 jcommon/jars/jcommon-1.0.0.jar というエントリをローカルレポジトリに用意すればよさそうだが、 これで良いのか疑問がわく。なぜならこのライブラリは jfreechart の一部だからだ。レポジトリ以下の構成は ${groupId}/${type}s/${artifactId}-${version}.${type} なので次要領ででトライ. - jfreechart/jars/jcommon-1.0.0.jar を作成 - 次のエントリを project.xml に用意 <dependency> <groupId>jfreechart</groupId> <artifactId>jcommon</artifactId> <version>1.0.0</version> <properties> <war.bundle>true</war.bundle> </properties> </dependency> ビルド、デプロイ、実行。グラフが表示できた。 ** マッピングの変更 * @web.servlet name="ChartServlet" * @web.servlet-mapping url-pattern="/chart.jpg" localhost:8080/jfcserv/chart.jpg でチャートが表示される。 当然、以前のパスでは 404 になる。 ** Clustering エラー 00:40:45,771 ERROR [JBossCacheManager] JBossCacheService to Tomcat clustering no t found 00:40:45,771 ERROR [TomcatDeployer] Failed to setup clustering, clustering disab led web.xml に distributable タグを発見。これを消すことで解決 <web-app > <!-- <distributable/> --> しかし、web.xml は XDoclet が動的に生成しているため、元となっている 設定あるいはテンプレートがあるはず... プロジェクト以下のファイルを探しても、それらしき物は見つからない。 ローカルレポジトリにも見つからない。 Googleで探すと ant の場合、次のような指定で出来るようである。 <deploymentdescriptor distributable="false" /> maven.xml を見ると次のエントリで xdoclet を起動しているようだ。 <project xmlns:j="jelly:core" xmlns:ant="jelly:ant" default="war"> <preGoal name="java:compile"> <mkdir dir="${maven.build.dir}/xdoclet/webdoclet/WEB-INF" /> <attainGoal name="xdoclet:webdoclet" /> </preGoal> </project> レポジトリを見ると xdoclet plugin は jar で提供されていて、 設定らしき物は見当たらない。 http://xdoclet.sourceforge.net/xdoclet/maven-plugin.html このページによると maven xdoclet プラグインはプロパティで ある程度動作が制御できるようだ。 maven xdoclet plugin jar ファイルを展開すると plugin.properties があるが、distributable に関する物はない。 plugin.jelly には次の様な記述がある。 <j:set var="prop_name" value="maven.xdoclet.webdoclet.deploymentdescriptor.${subelement_index}.distributable"/> <jelant:setProperty name="distributable" value="${context.getVariable(prop_name)}"/> project.properties に次の1行を追加 maven.xdoclet.webdoclet.deploymentdescriptor.0.distributable=false XDoclet が走るようサーブレットソースをタッチして再ビルド。 狙い通り <distributable/> が消えた。 つぎは jelly だ。

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。