DATE : 2006/11/07 (Tue)
Maven と maven-jetty-plugin(6.0.0rc4)とで JSF を使ったページを開こうとすると、次のようなエラーが発生する場合があります。
PWC6188: The absolute uri: http://java.sun.com/jsf/html cannot be resolved in either web.xml or the jar files deployed with this application
これは、JSP のコンパイル時に、「http://java.sun.com/jsf/html」という名前空間が web.xml や配備されている JAR ファイルの中に見つからなかったことを示します。
通常、JSF の名前空間やタグを定義した TLD ファイルは JSF の実装に同梱されており、その JAR ファイルを配備すれば上記の名前空間も JAR ファイルから自動的に見つけ出されます。
しかし、プロジェクトが依存するライブラリとして JSF の実装を登録しておいても、上記のエラーは発生することがあります。
どのようにすればエラーを解決できるのでしょうか。ウェブ上を検索した結果、「Maven 2 novamente -> mvn jetty:run」(Urubatan`s Weblog)という記事が見つかりました。しかし、この記事はポルトガル語で書かれているようです。そこで、以下に記事からなんとなく分かった内容をメモしておきます。
プロジェクトが依存するライブラリとして JSF の実装を登録するには、POM ファイルに次のように記述します。(ここでは、JSF の実装として Apache MyFaces を取り上げます。 「...」は省略を表します)
... <dependencies> <dependency> <groupId>org.apache.myfaces.core</groupId> <artifactId>myfaces-api</artifactId> <version>1.1.4</version> </dependency> <dependency> <groupId>org.apache.myfaces.core</groupId> <artifactId>myfaces-impl</artifactId> <version>1.1.4</version> </dependency> </dependencies> ...
JSP のコンパイル時に JSF の名前空間が見つからないエラーが出る場合は、上の記述を maven-jetty-plugin の設定にコピーします。
例えば、以下がコピー前の maven-jetty-plugin の設定だとすると
... <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <scanIntervalSeconds>10</scanIntervalSeconds> </configuration> </plugin> ...
maven-jetty-plugin が依存するライブラリとして、JSF の実装を登録します。
... <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <dependencies> <dependency> <groupId>org.apache.myfaces.core</groupId> <artifactId>myfaces-api</artifactId> <version>1.1.4</version> </dependency> <dependency> <groupId>org.apache.myfaces.core</groupId> <artifactId>myfaces-impl</artifactId> <version>1.1.4</version> </dependency> </dependencies> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> </configuration> </plugin> ...
このようにすることで、maven-jetty-plugin で JSP のコンパイル時に JSF の名前空間が見つからないというエラーを防ぐことができます。
2006-11-22 追記
この現象は、maven-jetty-plugin で起動される Jetty ウェブサーバのバグと分かりました。詳しくは、「maven-jetty-plugin で JSF の名前空間が見つからないのはバグ」をご覧ください。
現状では、まだこのバグは直っていません。