2009-07-30 24 views
50

JAI setup khá tẻ nhạt, liên quan đến nhiều lọ và biến môi trường. Nó sẽ hỗ trợ tính di động của dự án khá nhiều nếu tôi có thể thêm nó như một phụ thuộc Maven thông thường.Sử dụng Java Advanced Imaging với Maven

Đoạn POM Tôi đang sử dụng là

<dependency> 
    <groupId>com.sun.media</groupId> 
    <artifactId>jai_imageio</artifactId> 
    <version>1.1</version> 
</dependency> 

và các lỗi là

[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 

tôi có thể, tất nhiên, tải về và cài đặt những lọ. Vấn đề là gấp đôi:

  • jai_imageio yêu cầu hai lọ;
  • jai_imageio yêu cầu cài đặt thư viện gốc và hai biến môi trường.

Tôi chưa tìm được cách để thực hiện công việc này với Maven.


Xem Reading JCS_YCCK images using ImageIO vì lý do tôi đang sử dụng JAI.

Trả lời

0

Điều tôi không thấy là phụ thuộc JAI chỉ cần được thỏa mãn khi chạy, và do đó tôi đảm bảo môi trường sản xuất có quyền truy cập vào JAI, bằng cách định cấu hình nó cho Tomcat.

+0

thưa ông, tôi đang gặp phải vấn đề trong thời gian chạy. tomcat không thể định vị tệp lớp. Thỉnh thoảng tôi nhận được 'NoClassDefFoundError', giải pháp thích hợp là gì để cấu hình tomcat sao cho nó luôn nhận được định nghĩa lớp? Đang sử dụng 3 tệp này jai codec 1.1.3 lõi jai 1.1.3 jai imageio 1.2' –

12

Bạn sẽ cần tải xuống các lọ và cài đặt chúng trong kho lưu trữ maven cục bộ của bạn hoặc máy chủ proxy lưu trữ cục bộ (Nexus/Artifactory). Tôi nghĩ bạn có thể sử dụng maven-enforcer-plugin để xác thực rằng các cài đặt môi trường có ở đó.

licence cho jai_imageio không cho phép là distributed.

+0

Cảm ơn câu trả lời. Tôi sợ điều đó, nhưng tôi đoán tôi cần phải tạo POM của riêng mình cho nó. –

+0

Các POM đối với các tệp đã tồn tại. http://mirrors.ibiblio.org/pub/mirrors/maven2/com/sun/media/jai_imageio/1.1/jai_imageio-1.1.pom Nó có sự phụ thuộc bắt buộc của jai_core. Nhược điểm là nó có downloadURL trong quản lý phân phối. –

+0

Đây là câu trả lời đúng nếu bạn quan tâm đến việc triển khai dự án của mình cho Maven Central. MC không cho phép dựa vào kho lưu trữ của bên thứ ba mà một số câu trả lời khác ở đây cung cấp. –

0

thử điều này:

<dependency> 
    <groupId>com.sun.media</groupId> 
    <artifactId>jai_imageio</artifactId> 
    <version>1.1</version> 
    <type>pom</type> 
</dependency> 
+2

Không có nhiều mã trong tệp pom. –

41

Để tránh donwloading các lọ và cài đặt chúng, bạn có thể thêm một sự phụ thuộc vào các repo mùa xuân. Vì vậy, thay đổi phụ thuộc bình thường một chút:

<dependency> 
     <groupId>javax.media.jai</groupId> 
     <artifactId>com.springsource.javax.media.jai.core</artifactId> 
     <version>1.1.3</version> 
    </dependency> 

và thêm một tuyên bố kho:

<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> 

Và nó bây giờ nên làm việc (nó làm cho tất cả các lớp mặt trời sẵn javax.media.jai *.). Xem ở đây:

http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.javax.media.jai.core&version=1.1.3

Bạn cũng có thể thêm các phụ thuộc bộ giải mã nếu cần thiết ...

http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.javax.media.jai.codec&version=1.1.3

+6

Có lẽ điều này đã làm việc trong năm 2011, nhưng bây giờ không còn nữa, những thứ không có ở đó. –

+1

Nó chỉ làm việc cho tôi. – Greg

+0

điều này dường như không bao gồm 'imageio' – mmcrae

13

Có một "độc" thực hiện JAI-ImageIO, mà không phụ thuộc vào jai_core. Nó không cần cài đặt JAI vào JDK và JRE của bạn, chỉ phụ thuộc Maven duy nhất.

Trong Maven, thêm đó là kho lưu trữ:

<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> 

và phụ thuộc:

<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> 

Xem its site để biết thêm chi tiết

PS Cập nhật sau khi một bình luận hữu ích (một sự phụ thuộc từ GitHub mà không không cần thêm kho lưu trữ đó):

<dependency> 
    <groupId>com.github.jai-imageio</groupId> 
    <artifactId>jai-imageio-core</artifactId> 
    <version>1.3.0</version> 
</dependency> 
+1

chỉ ra phần ' 'có thể lỗi thời, nhưng [GitHub trang README có số không cần thêm repo] (https://github.com/stain/jai-imageio-core) – mmcrae

+0

Điều này không giúp tôi nhập javax.media.jai.ColorCube .... –

2

này đã làm việc cho tôi:

<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> 

Dường như gt-bảo hiểm phụ thuộc vào jai_imageio, vì vậy nó được cài đặt các lọ thích hợp cho tôi. Tôi thậm chí không phải thay đổi mã của mình để sử dụng vật phẩm này.

Điều này sẽ giúp mã của bạn hoạt động trong IDE của bạn. Tuy nhiên, nếu bạn muốn một jar thực thi, thì bạn cần sử dụng plugin Maven Shade. Việc sử dụng nó được mô tả herehere. Lưu ý các dòng phụ trong liên kết thứ 2 vì chúng cần thiết. Đây là mã bổ sung để truy cập vào số điện thoại của bạn:

<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> 

Tôi không biết tất cả các mục kê khai bổ sung này là gì, nhưng chúng làm cho thực thi của tôi hoạt động trong IDE.

+0

Trừ khi bạn * cần * thư viện địa lý trong dự án của bạn thêm nó như là một phụ thuộc như là một công việc xung quanh để có được jai-codec có vẻ như một xấu dung dịch. –

1

Url kho lưu trữ trong câu trả lời của manunu dường như đã thay đổi hoặc ít nhất là tạm thời không khả dụng, khiến cho việc xây dựng maven thất bại. Là một thay thế, url sau đây có thể được sử dụng:

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> 
+0

Tôi muốn bạn biết bạn là tốt nhất – mmcrae

+0

mặc dù, thực sự nếu bạn nhìn vào trang Github từ câu trả lời của @manunu https://github.com/stain/jai-imageio-core bạn thấy sự phụ thuộc trong README , mà không đòi hỏi một repo (tôi đã thử nghiệm nó) – mmcrae

1
<dependency> 
    <groupId>javax.media.jai</groupId> 
    <artifactId>com.springsource.javax.media.jai.core</artifactId> 
    <version>1.1.3</version> 
</dependency> 

và thêm một tuyên bố kho:

<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> 

này đã làm việc cho tôi. Đoán có thể dựa vào Spring Jar, nó không nên di chuyển như java đã làm

Các vấn đề liên quan