Apache POIのバージョンアップ
mavenなどの ライブラリ管理ツールを使用していない状態でApache POIをバージョンアップする作業のメモです。
前提条件
- バージョンアップ前のPOI:3.0.2
- バージョンアップ後のPOI:4.1.2
- javaのバージョン:8
- IDE:eclipce(4.4.2)
バージョンアップ前
今回は処理の内容はさほど重要ではないので簡単にエクセルに書かれた内容を読み込んでコンソールに出力する処理を書きました。
import java.io.FileInputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class Test1 {
public static void main(String[] args) {
try {
//Excelのワークブックを読み込みます。
POIFSFileSystem filein = new POIFSFileSystem
(new FileInputStream("C:\\poi_test\\test.xls"));
HSSFWorkbook wb = new HSSFWorkbook(filein);
//シートから読み込みます。
HSSFSheet sheet = wb.getSheet("test");
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell((short)0);
String readText = cell.getStringCellValue();
//Excelから読み込んだ結果を出力します。
System.out.println(readText);
System.out.println("処理が終了しました。");
} catch (Exception e) {
System.out.println("処理が失敗しました");
}
}
}
今のところ、正常に動いていることが確認できました。
バージョンアップ
POIのバージョンを上げていきます。
古いバージョンをビルドパスから削除する
eclipceでプロジェクトを右クリック=>ビルド・パス=>ビルド・パスの構成
現在使用しているバージョン(3.0.2)のライブラリへのパスが記載されているので3つとも除去します。
新しいバージョンのインストール
https://poi.apache.org/download.html
ここから新しいバージョンのPOIをインストールして解凍し、
任意のディレクトリに配置します。
新しいバージョンのビルドパスを通す
再びeclipceでプロジェクトを右クリック=>ビルド・パス=>ビルド・パスの構成
して新しいバージョンのPOIのビルドパスを通します。
先ほどPOIを解凍したディレクトリからこちらのサイトを参考に以下の4つのjarファイルを選択します。
- poi-4.1.2.jar
- poi-ooxml-4.1.2.jar
- poi-ooxml-schemas-4.1.2.jar
- ooxml-lib\xmlbeans-3.1.0.jar
動作確認
プログラムを動かしてみるとビルドエラーが発生します。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/math3/util/ArithmeticUtils
at org.apache.poi.poifs.property.RootProperty.setSize(RootProperty.java:59)
at org.apache.poi.poifs.property.DirectoryProperty.<init>(DirectoryProperty.java:52)
at org.apache.poi.poifs.property.RootProperty.<init>(RootProperty.java:31)
at org.apache.poi.poifs.property.PropertyTable.<init>(PropertyTable.java:58)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:102)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:274)
at Test1.main(Test1.java:16)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.math3.util.ArithmeticUtils
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
java.lang.NoClassDefFoundError: org/apache/commons/math3/util/ArithmeticUtils
というエラーメッセージから推測するにおそらくapacheのライブラリが不足しているようです。
ダウンロードした新しいapacheのディレクトリを確認してみます。
libフォルダの下にcommons-math3.jarというファイルが見つかりました。
このjarファイルへのビルドパスも通してあげれば解決しそうです。
ライブラリを入れたりバージョンアップするときはネットで参考になりそうな情報を集めることが多いと思いますが、
ネットの記事は必要最低限で書かれていることが多く、そのまま自分の環境に当てはめていいかはよく考えないといけないです。
今回の場合はエラーメッセージを冷静に確認したらわかるエラーだったので、よくわからないエラーが出ても混乱せずにエラーメッセージでググるなど落ち着いた対応を心掛けましょう。
Author And Source
この問題について(Apache POIのバージョンアップ), 我々は、より多くの情報をここで見つけました https://qiita.com/yShig/items/95aa813c63f505d83283著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .