[JAVA]新バージョンのPOIライブラリを旧バージョンのJSPで参照する方法

このQ&Aのポイント
  • javaのPOIライブラリ(v3.0)をTOMCAT+JSPで利用していたのですが、新バージョン(v3.10)にアップデートしました。しかし、新しいバージョンのJSPではエラーが発生し、旧バージョンのJSPと新バージョンのPOIを組み合わせて利用したい場合、クラスパスの設定がうまくいっていない可能性があります。この記事では、新バージョンのPOIライブラリを旧バージョンのJSPで参照する方法について説明します。
  • まず、新しいバージョンのPOIライブラリのjarファイルをクラスパスに追加する必要があります。また、旧バージョンのJSPのコードの先頭で新しいバージョンのPOIライブラリを参照するようにimport文を追加する必要もあります。さらに、クラスパスの設定に問題がある場合は、カレントディレクトリを参照するように設定することも必要です。
  • 以上の手順を踏むことで、新バージョンのPOIライブラリを旧バージョンのJSPで参照することができます。これにより、新しい機能を利用しながら、旧バージョンのJSPを再利用することが可能となります。
回答を見る
  • ベストアンサー

[JAVA]jarファイルへのパスの通し方について

javaのPOIライブラリ(v3.0)をTOMCAT+JSPで利用していたのですが、 パージョンが古くxlsxに対応するためバージョンアップ(v3.10)を行いました。 その影響で旧バージョンで動作していたJSPが新バージョンで動作しなくなってしまいました。 そのため新しく制作するJSPのみ新バージョンのPOIを参照し、 過去のJSPでは旧バージョンのJSPを参照したいのですが可能でしょうか? JSPの新しく制作したJSPではimportで新しいライブラリが格納されるパスを指定すればよいのではないかと 思っているのですが、クラスパスの設定が悪いのか、「そんなクラスは存在しない」というエラーになってしまいます。 (クラスパスはカレントディレクトリも参照するように「.;」は設定されています) カレントディレクトリに参照したいPOIのjarを設置しても同じエラーになるので、 解決方法をご教授いただけますでしょうか? どうぞよろしくお願いいたします。

  • Java
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 私が開発しているシステムでもPOIのバージョン違いを共存させることになり次のような対応をしました。 新しいバージョンPOIのソースをダウンロード。 パッケージ名を【package org.apache.poi310】に変更する。 コンパイルして、poi310.jarという名前でjarファイルを生成する。 /WEB-INF/libに上記のjarを配置する。 Java側(JSP)では import org.apache.poi310.*; にすれば新しいPOIが適用されますし もともとの import org.apache.poi.*; でインポートすれば古いPOIを適用できます。 同時に使いたいならimport宣言ではなくクラスを指定します。 org.apache.poi.hssf.usermodel.HSSFSheet sheet1; org.apache.poi310.hssf.usermodel.HSSFSheet sheet2; sheet1は古いPOIのHSSFSheet sheet2は新しいPOIのHSSFSheetとなります。

chibitaChan
質問者

補足

さっそくのご回答ありがとうございます。 確かにその方法が一番良いですね。 ソース落として確認してみました。 バイナリ版を参考に必要なファイルは次のファイルのようでした。 1.poi-3.10-FINAL-20140208.jar 2.poi-ooxml-3.10-FINAL-20140208.jar 3.poi-ooxml-schemas-3.10-FINAL-20140208.jar ※3はパッケージ名が[org.apache.poi]じゃないのでこのまま。 これに対応するソースは次のとおり。 1.src/java/ 2.src/ooxml/java/ こちらの.javaのパッケージ名をすべて 【package org.apache.poi310】に変更してjar化。 (いつもバイナリ使ってるのではじめてですいません) それにしてもファイル数多いです;; 全ての.javaのパッケージ名を変更するのはタイヘンそう。(ECLIPSEのリファクタリングなら簡単にできるんでしょうか?) このやり方であってます・・・よね?

その他の回答 (2)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 >ご指摘のとおり、ディレクトリ名および.javaのpackage名を修正しましたが、 >そのあとのコンパイルがどうもうまくいきません。 >各階層順番にjavac *.javaでやってみましたが、 >エラーがでて通らないところが多数あります。 >これはコンパイルの順序または、もっと適切なコンパイル方法があるものでしょうか? 素直にEclipse等の開発環境を使うのが正確で手っ取り早いです。 どういったディレクトリに置いて、どこをカレントにしてどのようなコマンドを打って、どんなエラーが出てるかわかりませんので アドバイスとしては、Eclipseを使用してくださいとしか言えません。 ほぼなんの設定もなしに全てのclassファイルが生成されますよ。

chibitaChan
質問者

補足

ご助言ありがとうございました。 提示していただいたやり方が最も良いと思いますが、 Eclipseを使ってリファクタリングしてコンパイル、 jar作成してみましたが、実行すると関連するライブラリが見つからないやら 型が解決できないやらのエラーが多数表示され、 残念ながらうまくいきませんでした。 Eclipse上でエラーが出ているにも関わらず (org.apache.poi310以外のエラーなので、何とかなると思って) jarファイルにしているのが問題なのでしょうか? (Eclipseのコンパイルの時点で なにやらPOI3.10のソース外のファイルをimportしようとしていて 見つからないやら、型が解決できないやらのエラーがでてます。) いまさらですが当方の環境はJDK1.5、Eclipse3.6、POIは3.10です。 なにかアドバイスございましたらご教授くださいませ。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 Eclipseは使っているものだと思いました。 さすがに手動でパッケージ名を変更しようとは思いません。 最低限、テキストエディタ等で置換かけましょう。 (その場合ディレクトリ名もpoi310に変更を忘れずに) 何が必要であるかはjarファイルを解凍すればそれぞれクラスが出てきますので それと同じような構成にしてあれば問題ないと思います。 >全ての.javaのパッケージ名を変更するのはタイヘンそう。(ECLIPSEのリファクタリングなら簡単にできるんでしょうか?) はい。 java.org.apache.poiパッケージを右クリックして選択し、リファクタリング→名前変更で java.org.apache.poi310に変更すれば勝手に変更してくれます。

chibitaChan
質問者

補足

またまた質問すいません。 ご指摘のとおり、ディレクトリ名および.javaのpackage名を修正しましたが、 そのあとのコンパイルがどうもうまくいきません。 各階層順番にjavac *.javaでやってみましたが、 エラーがでて通らないところが多数あります。 これはコンパイルの順序または、もっと適切なコンパイル方法があるものでしょうか? なんどもすいませんがよろしくお願いします。

関連するQ&A

  • Vistaでservletを動かすには?

    Windows Vista に替えたので、以前使っていたeclipse 2.0からEuropaにしました。 Tomcatプラグインは旧バージョンで使っていたものをそのまま入れて クラスパスにservlet-api.jarを指定してあるのですが、servletが動きません。 JSPにアクセスすれば正常に表示されるのですが、servletを参照すると404エラーになります。 旧バージョンと同じ設定をしたはずなのですが、 vistaでservletを動かすには設定が足りないのでしょうか。

    • ベストアンサー
    • Java
  • WebLogicのjspの日付について

    WebLogic(WebLogic Server 9.2)を使って開発をしています。 古いバージョンのモジュールに戻して動作確認したところ、 どうやら、JSPが古いバージョンに戻っていないようです。 調べてみたところ、最新にJSPを更新した場合にコンパイルして weblogic.xmlのworkingDirパラメータで指定されたディレクトリに出来ているようです。 (古いJSPに戻しても、JSPはコンパイルしなおさない?) 古いJSPに戻したい場合は、weblogic.xmlのworkingDirパラメータで指定されたディレクトリの中身を 消さなくてはいけないということでしょうか? また、JSPの新or旧の判断は、どことどこの日付を比較して判断しているのでしょうか? 宜しくお願いいたします。

  • 重複jarの調査の仕方

    お世話になります。Javaでプログラミングの勉強をしています。 mavenなど、Jarの依存関係を解決してくれるツールがありますが、 バージョンが違うlog4jなどが複数の依存ライブラリで利用されていて、 実行時にエラーが出てしまうことがあります。(コンパイル時にはエラーは出ない) 例) dev_project ->log4j v1.2.4に依存 +-depend_project_a -> log4j v1.1.3に依存 +-depend_project_b -> log4j v1.1.4に依存 +-depend_project_c -> log4j v0.9.1に依存 こういった場合、mavenを利用していれば、依存関係階層を調べて 適宜excludeしていけばよいと思います。 しかしそのようなツールを使っていない(純粋なjavaプロジェクト)場合、 どのようにバージョン違いの重複するjarを調べたら良いかわかりません。 私が試してみたのは、jarのクラスパスをひとつずつチェックして log4j-****.jarの定義をひとつずつ探すという方法です。 これは大変手間がかかります。 テストケースなどJavaコード内で調べる方法はありますでしょうか。 どうぞ宜しくお願い致します。 ■参考環境 OS:windows8.1 Java:oracle-java1.8 eclipse: 4.4 maven: 3.2

    • ベストアンサー
    • Java
  • DTDファイルをクラスパスから読み込みたい

    DTDを利用したXMLファイルを読み込むDOMパーサーを作ってます。 表題のとおり、DOMパーサーがXMLファイル、DTDファイルを読み込む際に DTDファイルをローカルマシン(実行環境)のクラスパスにあるディレクトリ から読み込みたいのですがうまくいきません。 XMLパーサーにxercesを利用し、DOMを使ってます。 例えば、 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE pagecontrol SYSTEM "sample.dtd"> <PEOPLE> <NAME>afternoon_cafe</NEME> </PEOPLE> のようなXMLファイルを、DOMパーサーがparse()メソッドによりロード すると、"sample.dtd"をカレントディレクトリからしか検索しません。 この"sample.dtd"をクラスパスにあるディレクトリに置き、それを 読み込むようにしたいのですが、、、 どなたかわかる方がいれば、教えてください。 お願いします。

    • ベストアンサー
    • XML
  • Cで使えるファイルシステム

    cygwinで使えるファイルシステムのライブラリはあるでしょうか? またはオープンソースでCで使えるファイルシステムはあるでしょうか。 ファイルの作成、移動、削除、カレントディレクトリの移動 ファイル一覧の取得など一通りの動作が出来るものがあれば教えて頂きたいです。

  • 「*」記号が1ファイルしか展開しない

    「*」記号はシングルクオテーションをつけるかつけないかで展開するファイル数が変わってくるのでしょうか? カレントディレクトリにfileAとfileBがある状態 find . *ile*  →エラー find . '*ile*'  →fileA, fileBが見つかる カレントディレクトリにfileAのみ状態 find . *ile*  →fileAが見つかる find . '*ile*'  →fileAが見つかる 上記動作の仕組みが良くわかりません。 識者の方、解説をお願いします。

  • JSPのJava部分が読まれない問題について・・・

    いつもお世話になっております。 今回JSPについて質問させていただきます。 JSPのJava部分<% %>でくくられる部分が読み込まれなくて困っています。 Tomcatについて詳しくないので、それが問題だとは思いますが。。。 前提をお話しますと、Windowsサーバで動作していたjspファイル群をLinuxサーバへ移行しました。 なお、Linuxサーバで以下の確認は取れています。 Apacheの動作確認(htmlファイルなどを置いてWebページ確認) Javaの動作確認(javaファイルを作りコンパイル、classファイルの実行確認) Tomcatの動作確認(jsp-examples等のWebページ確認) たぶん問題かなと思うのは、ファイルの位置、および設定ファイルだと思います。 が、何がどう間違っているのやら。 Windows時のディレクトリ構造は以下の通りです。 webapps + website ++ css ++ img ++META-INF ++ view +++ sample.jsp ++ WEB-INF ++++ web.xml +++ lib +++++ mysql-connector-java-x.x.x-bin.jar +++ classes ++++ sample_servlet.class ++++ beans +++++ database_access.class (スペースが認識されなかったので、+がディレクトリの深さだと思ってください。) このような階層構造です。 webappsの階層はconfなどがある階層です。 何が問題かご教授お願いします。 ちなみに、 移行前サーバWindows XP 移行後サーバ Cent OS Tomcatバージョン:同様に5.0 です。 よろしくお願いします。

  • JSPのJava部分が読まれない問題について・・・

    いつもお世話になっております。 今回JSPについて質問させていただきます。 JSPのJava部分<% %>でくくられる部分が読み込まれなくて困っています。 Tomcatについて詳しくないので、それが問題だとは思いますが。。。 前提をお話しますと、Windowsサーバで動作していたjspファイル群をLinuxサーバへ移行しました。 なお、Linuxサーバで以下の確認は取れています。 Apacheの動作確認(htmlファイルなどを置いてWebページ確認) Javaの動作確認(javaファイルを作りコンパイル、classファイルの実行確認) Tomcatの動作確認(jsp-examples等のWebページ確認) たぶん問題かなと思うのは、ファイルの位置、および設定ファイルだと思います。 が、何がどう間違っているのやら。 Windows時のディレクトリ構造は以下の通りです。 webapps + website ++ css ++ img ++META-INF ++ view +++ sample.jsp ++ WEB-INF ++++ web.xml +++ lib +++++ mysql-connector-java-x.x.x-bin.jar +++ classes ++++ sample_servlet.class ++++ beans +++++ database_access.class (スペースが認識されなかったので、+がディレクトリの深さだと思ってください。) このような階層構造です。 webappsの階層はconfなどがある階層です。 何が問題かご教授お願いします。 ちなみに、 移行前サーバWindows XP 移行後サーバ Cent OS Tomcatバージョン:同様に5.0 です。 よろしくお願いします。

  • JSPのJava部分が読まれない問題について・・・

    いつもお世話になっております。 問題がLinuxの設定に問題があるのではないかと思い、 Linux OSのカテゴリにも投稿させていただきます。 今回JSPについて質問させていただきます。 JSPのJava部分<% %>でくくられる部分が読み込まれなくて困っています。 Tomcatについて詳しくないので、それが問題だとは思いますが。。。 前提をお話しますと、Windowsサーバで動作していたjspファイル群をLinuxサーバへ移行しました。 なお、Linuxサーバで以下の確認は取れています。 Apacheの動作確認(htmlファイルなどを置いてWebページ確認) Javaの動作確認(javaファイルを作りコンパイル、classファイルの実行確認) Tomcatの動作確認(jsp-examples等のWebページ確認) たぶん問題かなと思うのは、ファイルの位置、および設定ファイルだと思います。 が、何がどう間違っているのやら。 Windows時のディレクトリ構造は以下の通りです。 webapps + website ++ css ++ img ++META-INF ++ view +++ sample.jsp ++ WEB-INF ++++ web.xml +++ lib +++++ mysql-connector-java-x.x.x-bin.jar +++ classes ++++ sample_servlet.class ++++ beans +++++ database_access.class (スペースが認識されなかったので、+がディレクトリの深さだと思ってください。) このような階層構造です。 webappsの階層はconfなどがある階層です。 何が問題かご教授お願いします。 ちなみに、 移行前サーバWindows XP 移行後サーバ Cent OS Tomcatバージョン:同様に5.0 です。 よろしくお願いします。

  • Excelで外部参照パスの一部を複数セルから利用は

    Microsoft Excelで (数式入力可能ならどのバージョンでも同じ)、 A1セルに、別ファイルの外部001.xlsxのSheet1のC1の値 123 と A2セルに、別ファイルの外部001.xlsxのSheet1のC5の文字列 こんにちは を 外部参照を使用して、セルに表示させたいのですが、 B1に下記のようなパスを手入力しておきたいです。 'C:\Temp\[外部001.xlsx]Sheet1' そして、 A1セルに数式として、B1のパスファイル名+セル名 のようにB1の値を利用したいです。 例:(この通り外部参照全てをB1に書いても、A1とA2は計算式エラーになります) 'C:\Temp\[C1あ.xlsx]Sheet1'!C1 <-- 実際には、\は円記号。 他の書き方でも値エラーとなったもの↓ ''C:\Temp\[C1あ.xlsx]Sheet1'!C1 "'C:\Temp\[C1あ.xlsx]Sheet1'!C1" ''C:\Temp\[C1あ.xlsx]Sheet1'!C1' 下記のような書き方で、 外部参照パスを一つのセルに記述し、 複数のセルからその1つのセルを参照利用する場合の実現方法を教えてください。 A1セル $B$1&"!C1" A2セル $B$1&"!C5"

専門家に質問してみよう