わんちゅう日記

気ままにヒトリゴト

タグ:Java

昨今、機械学習や画像処理でGPUが使える、使えないによって、Javaの依存関係を切り替えなきゃしゃーないってプロジェクトもあるかと思います。こんな時、ビルドする度にpom.xmlの依存関係を手で書き換えるのも凄く面倒。そこで、Mavenのプロファイル機能を使ってうまく対応できないか、検証してみました。

続きを読む
このエントリーをはてなブックマークに追加

「テストをEclipse上で実行してOKが出たら、カバレッジを取るためにMavenでテストを実行」てな感じで作業を進めてるのですが、Maven実行時に下記のような例外が発生することがあります。
java.lang.UnsatisfiedLinkError: Native Library C:\Java\jdk1.8.0_144_x64\jre\bin\jpeg.dll already loaded in another classloader
  at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1907)
  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1845)
  at java.lang.Runtime.loadLibrary0(Runtime.java:870)
  at java.lang.System.loadLibrary(System.java:1122)
  at com.sun.imageio.plugins.jpeg.JPEGImageWriter$1.run(JPEGImageWriter.java:180)
  at com.sun.imageio.plugins.jpeg.JPEGImageWriter$1.run(JPEGImageWriter.java:178)
  at java.security.AccessController.doPrivileged(Native Method)
  at com.sun.imageio.plugins.jpeg.JPEGImageWriter.(JPEGImageWriter.java:177)
  at com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi.createWriterInstance(JPEGImageWriterSpi.java:96)
  at javax.imageio.spi.ImageWriterSpi.createWriterInstance(ImageWriterSpi.java:351)
  at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:843)
  at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:827)
  at javax.imageio.ImageIO.getWriter(ImageIO.java:1596)
  at javax.imageio.ImageIO.write(ImageIO.java:1520)
  ...
試している限りでは次のような条件で発生するようです。
  1. 複数のテストクラスでImageIOを利用するクラスが呼ばれる
  2. テスト開始後、2つ目のテストクラス実行時に上記例外が発生する
UnsatisfiedLinkErrorが発生した後、同テストクラス内の他のImageIOを利用するクラスを利用するテストケースでは、次の例外が発生します。
java.lang.NoClassDefFoundError: Could not initialize class com.sun.imageio.plugins.jpeg.JPEGImageWriter
  at com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi.createWriterInstance(JPEGImageWriterSpi.java:96)
  at javax.imageio.spi.ImageWriterSpi.createWriterInstance(ImageWriterSpi.java:351)
  at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:843)
  at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:827)
  at javax.imageio.ImageIO.getWriter(ImageIO.java:1596)
  at javax.imageio.ImageIO.write(ImageIO.java:1520)
  ...
目的のクラスが読み込まれてないので、NoClassDefFoundErrorが発生するのも当然ですね。
なお、環境は次の通りです。
  • Java SE Development Kit 8u144 (ImageIOを含む)
  • Apache Maven 3.5.0
  • PowerMock 1.7.3
続きを読む
このエントリーをはてなブックマークに追加

単体テストのカバレッジを計測するのに当初Eclipseから利用できる「EclEmma」を利用していました。しかし、Mockito、PowerMockと必要に応じてモックフレームワークを追加していくと、PowerMockを利用したテストクラスのカバレッジが測定できない事態に。
測定できないかちょいと調べたところ、「Eclipse+EclEmmaではできないが、JaCoCoならできる」とあったので、それを試してみました。
なお、使用する主なソフトウェアのバージョンは次の通りです。
  • Apache Maven 3.5.0
  • PowerMock 1.7.3
  • JaCoCo 0.7.9
Javaは9がリリースされましたが、8を使用しています。

続きを読む
このエントリーをはてなブックマークに追加

お仕事で使用する予定の「Apache Commons Imaging」。画像編集ライブラリです。
これ、Mavenで最新のスナップショットが取得できるのですが、お仕事環境上必要なリポジトリ(Maven Centralではない)にアクセスできず困っておりました。一世代前の「Sanselan」はMaven Central リポジトリに登録されており、こちらを使うのもひとつの手ですが、せっかくなのでとソースコードからビルドをしてみました。その手順メモ@Windows10です。
今回ビルドする対象は「Apache Commons Imaging 1.0 RC7」、ビルドの為に用意するソフトウェアは次の通りです。
  • Apache Maven 3.5.0
  • Java SE Development Kit 8u131
作業の手順は次の通りです。
  1. ソースコードのダウンロード
  2. Mavenでビルド
続きを読む
このエントリーをはてなブックマークに追加

MavenでJavaプロジェクトを作ろうとしたら、職場のプロキシのせいでHTTPSでMaven Centralのリポジトリにアクセスできず、プロジェクトが作れないではないか!! という状況に陥りまして。
色々調べて、「正攻法ではなさそうだけど解決できたからこれでいっか」という解決方法です。

続きを読む
このエントリーをはてなブックマークに追加

このページのトップヘ