MavenでのJava Advanced Imagingの使用
質問
JAIセットアップは非常に退屈で、複数のjarや環境変数が関係します。通常のMaven依存関係としてプロジェクトを追加できれば、プロジェクトの移植性を大幅に支援します。
使用しているPOMスニペットは
<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai_imageio</artifactId>
<version>1.1</version>
</dependency>
そしてエラーは
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) com.sun.media:jai_imageio:jar:1.1
2) javax.media:jai_core:jar:1.1.3
もちろん、これらのjarをダウンロードしてインストールできます。問題は2つあります:
- jai_imageioには2つのjarが必要です;
- jai_imageioでは、ネイティブライブラリをインストールし、2つの環境変数を設定する必要があります。
Mavenでこの機能を使用する方法を見つけていません。
JAIを使用している理由については、 ImageIOを使用したJCS_YCCKイメージの読み取りを参照してください。
解決 5
確認できなかったのは、JAI依存関係は実行時にのみ満たされる必要があるため、Tomcat用に構成することで、実稼働環境がJAIにアクセスできることを確認したことです。
他のヒント
jarのダウンロードとインストールを回避するには、springリポジトリに依存関係を追加します。したがって、通常の依存関係をわずかに変更します。
<dependency>
<groupId>javax.media.jai</groupId>
<artifactId>com.springsource.javax.media.jai.core</artifactId>
<version>1.1.3</version>
</dependency>
そしてリポジトリ宣言を追加します:
<repository>
<id>com.springsource.repository.bundles.external</id>
<name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
<url>http://repository.springsource.com/maven/bundles/external</url>
</repository>
これで動作するはずです(すべてのsunクラスがjavax.media.jai。*で利用可能になります)。こちらをご覧ください:
必要に応じてコーデックの依存関係を追加することもできます...
「スタンドアロン」がありますjai_coreに依存しない、JAI-imageioの実装。 JDKとJREにJAIをインストールする必要はありません。Mavenの依存関係は1つだけです。
Mavenで、リポジトリを追加します:
<repository>
<releases />
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>mygrid-repository</id>
<name>myGrid Repository</name>
<url>http://www.mygrid.org.uk/maven/repository</url>
</repository>
および依存関係:
<dependency>
<groupId>net.java.dev.jai-imageio</groupId>
<artifactId>jai-imageio-core-standalone</artifactId>
<version>1.2-pre-dr-b04-2014-09-13</version>
</dependency>
詳細については、サイトを参照してください
PS有用なコメント(そのリポジトリを追加する必要のないgitHubからの別の依存関係)の後に更新:
<dependency>
<groupId>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-core</artifactId>
<version>1.3.0</version>
</dependency>
jarをダウンロードして、ローカルのMavenリポジトリまたはローカルリポジトリプロキシサーバー(Nexus / Artifactory)にインストールする必要があります。 maven-enforcer-plugin を使用して環境を検証できると思います設定があります。
これは私のために働いた:
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-coverage</artifactId>
<version>2.7.4</version>
</dependency>
<repository>
<id>osgeo</id>
<name>Open Source Geospatial Foundation Repository</name>
<url>http://download.osgeo.org/webdav/geotools/</url>
</repository>
gt-coverageはjai_imageioに依存しているようで、適切なjarをインストールしました。このアーティファクトを使用するためにコードを変更する必要さえありませんでした。
これにより、IDE内でコードが機能します。ただし、実行可能jarが必要な場合は、Maven Shadeプラグインを使用する必要があります。その使用については、こちらおよびこちら。 2番目のリンクの余分な行は必要なので注意してください。 pomに追加するコードは次のとおりです。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.3.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.companyname.packagename.MainClassName</Main-Class>
<Specification-Title>Java Advanced Imaging Image I/O Tools</Specification-Title>
<Specification-Version>1.1</Specification-Version>
<Specification-Vendor>Sun Microsystems, Inc.</Specification-Vendor>
<Implementation-Title>com.sun.media.imageio</Implementation-Title>
<Implementation-Version>1.1</Implementation-Version>
<Implementation-Vendor>Sun Microsystems, Inc.</Implementation-Vendor>
<Extension-Name>com.sun.media.imageio</Extension-Name>
</manifestEntries>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
これらの追加のマニフェストエントリが何であるかはわかりませんが、IDEで実行可能なjarが実行可能なjarを実行します。
manunuの回答のリポジトリURLが変更されたか、少なくとも一時的に利用できないと思われるため、mavenビルドが失敗します。代わりに、次のURLを使用できます:
http://build.mygrid.org.uk/maven/repository
<repository>
<releases />
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>mygrid-repository</id>
<name>myGrid Repository</name>
<url>http://build.mygrid.org.uk/maven/repository</url>
</repository>
<dependency>
<groupId>javax.media.jai</groupId>
<artifactId>com.springsource.javax.media.jai.core</artifactId>
<version>1.1.3</version>
</dependency>
そしてリポジトリ宣言を追加します:
<repository>
<id>com.springsource.repository.bundles.external</id>
<name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
<url>http://repository.springsource.com/maven/bundles/external</url>
</repository>
これは私のために働いた。推測はSpring Jarに依存することができますが、javaのようには動かないはずです
これを試してください:
<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai_imageio</artifactId>
<version>1.1</version>
<type>pom</type>
</dependency>