Maven과 함께 Java Advanced 이미징 사용
문제
그만큼 JAI 설정 여러 항아리와 환경 변수가 포함되어 있습니다. 정기적 인 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
물론 그 항아리를 다운로드하여 설치할 수 있습니다. 문제는 두 가지입니다.
- jai_imageio에는 두 개의 병이 필요합니다.
- JAI_IMAGEIO는 기본 라이브러리를 설치해야하고 두 가지 환경 변수를 설정해야합니다.
Maven과 함께이 작업을 할 방법을 찾지 못했습니다.
보다 imageio를 사용하여 JCS_YCCK 이미지를 읽습니다 내가 Jai를 사용하는 이유.
해결책 5
내가 보지 못한 것은 JAI 의존성이 런타임에만 만족해야한다는 것이 었으므로 Tomcat 용으로 구성하여 생산 환경에 JAI에 액세스 할 수 있도록했습니다.
다른 팁
항아리에 대한 지폐를 피하고 설치하지 않으려면 스프링 repo에 종속성을 추가 할 수 있습니다. 따라서 정상 의존성을 약간 변경하십시오.
<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 의존성 만 있습니다.
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>
항아리를 다운로드하여 로컬 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 커버리지는 jai_imageio에 의존하는 것으로 보이므로 적절한 항아리를 설치했습니다. 이 아티팩트를 사용하기 위해 코드를 변경할 필요조차 없었습니다.
이렇게하면 IDE 내에서 코드가 작동하게됩니다. 그러나 실행 가능한 JAR을 원한다면 Maven Shade 플러그인을 사용해야합니다. 그것의 사용이 설명되어 있습니다 여기 그리고 여기. 두 번째 링크의 추가 선이 필요하므로 주목하십시오. 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에서하는 일을하게합니다.
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>