読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

複合コンポーネントをライブラリ化する

JSF 複合コンポーネント Jar

結論から書くと、タイトルに掲げたことが現時点ではまだ上手くいってません。が、とりあえずメモ書きです。

……

JavaEE6のプロトタイプも、そろそろ脱皮する時期にきたようで、いよいよ本格開発に突入モードとなってきました。
で、今日はプロトタイプで作ったPrimeFacesベースの複合コンポーネント達を色々なプロジェクトでも使えるようにライブラリ化する作業となりました。

ググる前に以下本を確認した所「Packaging a Composite Component into a Jar」というやりたいことにピンポイントな内容が!
とりあえず技術的にはできるんだ、という安心感を得ました。


で、実際にやってみたのですが、なんか本質的でない所で長いことつまったり、上手くできなくて唸った個所があったのでまとめます。

前提:Mavenで作成したWebアプリケーションの中に既に作成された複合コンポーネントがある状態

1. Mavenで新規にWebアプリケーションを作成
 コンポーネントはPrimeFacesのShowcaseみたいなページも設けたいので、とりあえずWebで作りました。

2. pom.xmlにPrimeFaces等、複合コンポーネントが依存するものを記述します

3. maven-assembly-pluginの設定を加えます

<plugin>
    <!-- groupIdはデフォルトで入ってるから不要とのこと -->
    <artifactId>maven-assembly-plugin</artifactId>
    <!--<version>2.4</version> はまったところ-->
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

「jar作る」というのに、そもそもMavenで何を使うのか知らなくて、maven-jar-pluginを使うのかな?と思ったり、少し調べるとmaven-bundle-pluginとかmaven-resources-pluginとかmaven-assembly-pluginとか…どんだけあんの!と軽くパニックに。

少し英語疲れしてしまったので、以下日本語のサイト等がとても助かりました。
mavenで実行可能なjarファイルと依存ライブラリを含めたzipアーカイブを作成する

Maven、もっと頑張って覚えないといかん…。

あと無意味にドハマリしたこととして、当初「version」を指定して(2.4とか)いたのですが、こうすると最後にできたjarを他のプロジェクトに食わせると上手く動きませんでした。jarを展開した中身をみたらMETA-INFとなるところがWEB-INFとなっていて、そもそもタグが使えない形となってしまいました。
うーむ…なぜだろう。とりあえず先に進みます。

4. 1で作ったプロジェクト配下のsrc/mainの下にresourcesフォルダを作成します
NetBeansからは「その他のソース」フォルダができてsrc/main/resourcesとみえます。

5. その中に「META-INF」フォルダを作成します

6. 「META-INF」フォルダの中にxxxx.taglib.xmlを作成します

<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
       version="2.0">
    <namespace>http://www.hoge.co.jp/component</namespace>
    <composite-library-name>component</composite-library-name>
</facelet-taglib>

7. 「META-INF」フォルダの配下に事前に作られた複合コンポーネントを格納してるフォルダを入れます
以下が事前に作っていた複合コンポーネントを格納しているプロジェクトのフォルダ

上記のcomponentというフォルダをごっそり、今回作成している複合コンポーネントライブラリプロジェクトへ

CSSや画像も必要に応じて移動します。

8. ビルドしてjarが生成されれば完成

早速できあがったjarを、さらに新しいプロジェクトに食わせてみる(とりあえずmavenじゃないやつで)と…

こんな感じに。

xhtmlの宣言部でもURL(ttp://www.hoge.co.jp/component)がみえてタグが使えます。
が、コンポーネントの名前がみえない!!!なんで(;_;)

調べてみて、試しにxxxx.taglib.xml

<tag>
    <tag-name>自分が定義した複合コンポーネントの名前</tag-name>
    <source>./resources/component/xxxx.xhtml</source>
</tag>

を入れた所、そのコンポがみえました。この設定は本当に必要なのかな…少しめんどくさい気が。。

で、ここまでやったけど、今度は属性がみえない!!
とりあえずidだけ指定して動かしたら表示はされましたが、どこかでボタンを掛け違えている気がする…。

この作業、まだ道が長そうだ…。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村