!エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。3.1.2.2)で、後輩から「pom.xmlに定義しているversionを取得して表示したいが、上手くいかない」と相談されて調べてみました。file?ベストプラクティスがわからない(^^;そもそもこれだけ同じテーマが乱立する時点で悩ましい気が。自分の場合は前に書いた「Subversionのリビジョンを画面に表示したいと言われたら...」で使ったmavenのfilterを利用した方法がシンプルで好きだったりします。上記StackOverflowでも結構勧めてる人が多いですし。EE6プロジェクトを作って、手順をまとめてみました。「ファイル」メニューの「新規プロジェクト」からMavenでWebアプリケーションを作成します。EE6を選べばOKです。上記の「ファイル」タブを選んでプロジェクト内のフォルダを展開していきsrc/mainで右クリックしてフォルダを新規追加します。名前はresourcesです。続けて、resourcesフォルダの中にプロパティ・ファイルを作成します。ファイル名は自由ですが、ここでは「version」としました。${project.version}と定義してみます。Mavenのpom.xmlのprojectで定義されたversionを取ってね、という定義です。/></h:body>のようにすればちゃんと取れます。pom.xmlは以下です。${project.artifactId}${project.version}とか定義すればこんな感じです。ちなみに相談にきた後輩はStackOverflowにあるMETA-INFフォルダにMANIFEST.MFを吐かせてImplementation-Versionを取得する流れで試してうまくいかなかったとのこと。自分も以下のように試してみました。上記で作ったMavenプロジェクトのwarにあるMETA-INFをみると※古いJDK使っててごめんなさいごめんなさい...こんな感じでした。StackOverflowにあるようにmaven-war-pluginで以下のように定義し、warのmanifest.mfに情報を出力するように設定しました。</configuration></plugin>ビルド後に先ほどと同じMETA-INFをみると確かに増えてます。あとはこれを管理対象Beanなどからみればいい、と思ったのですが例えばStackOverflowにもあるthis.getClass().getPackage().getImplementationVersion();みたいな書き方すると、管理対象Beanクラスのパッケージのものをみようとしてnullになります。他にもgetClass()からgetResourceAsStream()などで読み込むサンプルなどもありますが、うまくいかず。あと、NetBeansでGlassFishをデバッグモード起動してブレイクポイントおいてるのですが、止まらずに空白ページが起動するとか、よくわからない動きも...。そもそもGlassFishにデプロイするwarでMETA-INFって...?今までWEB-INFしか意識してないや...(^^;あれ、あれ、みたいな。現状の自分はJavaに関してまだまだ全然知識的が足りないのですが、その中でも特にJavaのクラスローダの辺りやGlassFishではそれがどうなっているか、jarやwarの構成と動き、などなど、この辺りの理解が乏しい気がしています。今回のも「こうすればできる」というのが見えていない感じ。精進あるのみだなぁ...。追記@kazuhira_rさんがブログでMANIFEST.MFからの読み込み方法について書いて下さりました(^^)!!!WARファイルの中にある、MANIFEST.MFファイルの内容を読むServletContextを利用、とのこと。2ということで、まずは以下のように通常のMANIFEST.MFが読めるか確認してみました。}}結果的には、GlassFishでは駄目でした。servletContext.getResourceAsStream("/META-INF/MANIFEST.MF")でnullが返ってきます。7.1.1で確認したところ、ちゃんと動きました(^^;この辺はアプリケーションサーバのベンダごとに少し差異があるんですかね(^^;JBossで動きそうなのでpom.xmlにImplementationVersionを出力するように設定したら、APは起動するけどページが上手く表示されず...うーむ、NetBeansからの実行が駄目なのか?ここは手元で確認できずちょっと残念。いえ方法を教えて下さった@kazuhira_rさん、ありがとうございました!!さらに追記@kazuhira_rさんと同じようにServletから取得してみたのですが、動きませんでした(^^;なぜ...@kazuhira_rさんがわざわざGlassFishでも試してくださり、Twitterで会話する限り、違いがあるのはNetBeansを介してデプロイしてるか、普通にデプロイしてるかの差ぐらいしかなく、そんなので差がでることないよなぁ、と思って試したのですが普通にデプロイしたら出た!!な、なぜ。この辺は難しい(^^;とりあえずServletを使えば取れることがわかったので、よしとしようかな。ヶ月)長らくC#屋でした。EEを触ることになりました。Web開発も初めてです。日々の勉強メモとしてブログ作成。デビュー当時から堀北真希さんを愛するエンジニアです。現在は乃木坂46が大好きです。(15)にほんブログ村にほんブログ村はてなブログをはじめよう!kikutaro777さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。