0
1

More than 3 years have passed since last update.

Apache POIのバージョンアップ

Last updated at Posted at 2020-12-04

mavenなどの ライブラリ管理ツールを使用していない状態でApache POIをバージョンアップする作業のメモです。

前提条件

  • バージョンアップ前のPOI:3.0.2
  • バージョンアップ後のPOI:4.1.2
  • javaのバージョン:8
  • IDE:eclipce(4.4.2)

バージョンアップ前

今回は処理の内容はさほど重要ではないので簡単にエクセルに書かれた内容を読み込んでコンソールに出力する処理を書きました。

Test1.java

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("処理が失敗しました");
        }
    }
}

test.xls
image.png

実行結果
image.png

今のところ、正常に動いていることが確認できました。


バージョンアップ

POIのバージョンを上げていきます。

古いバージョンをビルドパスから削除する

eclipceでプロジェクトを右クリック=>ビルド・パス=>ビルド・パスの構成

image.png

現在使用しているバージョン(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

結果はこんな感じになりました。
image.png

動作確認

プログラムを動かしてみるとビルドエラーが発生します。

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のディレクトリを確認してみます。

image.png

libフォルダの下にcommons-math3.jarというファイルが見つかりました。
このjarファイルへのビルドパスも通してあげれば解決しそうです。

image.png

実行すると無事成功しました。
image.png

ライブラリを入れたりバージョンアップするときはネットで参考になりそうな情報を集めることが多いと思いますが、
ネットの記事は必要最低限で書かれていることが多く、そのまま自分の環境に当てはめていいかはよく考えないといけないです。
今回の場合はエラーメッセージを冷静に確認したらわかるエラーだったので、よくわからないエラーが出ても混乱せずにエラーメッセージでググるなど落ち着いた対応を心掛けましょう。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1