2009-07-30 22 views
50

Urządzenie JAI setup jest dość uciążliwe i zawiera wiele słoików i zmiennych środowiskowych. Pomogłoby to znacznie przenośności projektu, gdybym mógł dodać go jako zwykłą zależność od Mavena.Korzystanie z Java Zaawansowane obrazowanie za pomocą Maven

Fragment POM używam jest

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

i błędy są

[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 

mogę, oczywiście, należy pobrać i zainstalować te słoiki. Problem jest dwojaki:

  • jai_imageio wymaga dwóch słoików;
  • jai_imageio wymaga instalacji natywnej biblioteki i ustawienia dwóch zmiennych środowiskowych.

Nie znalazłem sposobu, aby to zadziałało z Mavenem.


Zobacz Reading JCS_YCCK images using ImageIO z tego powodu używam JAI.

Odpowiedz

0

To, czego nie widziałem, to że zależność JAI musiała być spełniona tylko w czasie wykonywania, dlatego też upewniłem się, że środowisko produkcyjne ma dostęp do JAI, konfigurując go dla Tomcat.

+0

Panie, mam problemy w czasie wykonywania. tomcat nie może zlokalizować pliku klasy. Od czasu do czasu dostaję "NoClassDefFoundError", jakie jest właściwe rozwiązanie, tj. Jak skonfigurować tomcat, aby zawsze uzyskać definicję klasy? Używam tych 3 plików 'jai kodek 1.1.3 jai core 1.1.3 jai imageio 1.2' –

12

Będziesz musiał pobrać słoiki i zainstalować je w lokalnym repozytorium maven lub lokalnym serwerze proxy repozytorium (Nexus/Artifactory). Myślę, że możesz użyć maven-enforcer-plugin, aby sprawdzić, czy ustawienia środowiska są dostępne.

Numer licence dla jai_imageio nie zezwala na to, aby był distributed.

+0

Dzięki za odpowiedź. Bałem się tego, ale myślę, że muszę stworzyć dla niego własne POM. –

+0

Cóż, POM dla plików już istnieje. http://mirrors.ibiblio.org/pub/mirrors/maven2/com/sun/media/jai_imageio/1.1/jai_imageio-1.1.pom Ma wymaganą zależność od jai_core. Minusem jest to, że ma to downloadURL w zarządzaniu dystrybucją. –

+0

To jest odpowiednia odpowiedź, jeśli interesuje Cię wdrożenie Twojego projektu do Maven Central. MC nie zezwalają na poleganie na repozytoriach firm trzecich, które oferują niektóre inne odpowiedzi tutaj. –

0

spróbuj tego:

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

Nie wiele kodu w pliku pom. –

41

Aby uniknąć donwloading słoiki i instalując je można dodać zależność od repo sprężyny. Tak zmienić normalny zależność nieznacznie:

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

i dodać repozytorium deklarację:

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

I powinien teraz działać (to sprawia, że ​​wszystkie klasy przeciwsłoneczne dostępne javax.media.jai. *). Zobacz tutaj:

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

Można również dodać kodeka zależność razie potrzeby ...

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

+6

Może to działało w 2011 roku, ale teraz już nie, rzeczy po prostu nie ma. –

+1

Po prostu zadziałało to dla mnie. – Greg

+0

to chyba nie zawiera wymaganego 'imageio' – mmcrae

13

Istnieje "standalone" Realizacja JAI-ImageIO, bez zależności do jai_core. Nie wymaga instalacji JAI w JDK i JRE, tylko jedna zależność Maven.

W Maven, dodać to repozytorium:

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

i zależność:

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

Zobacz its site więcej szczegółów

PS aktualizowane po użytecznego komentarzu (inny zależności od GitHub który robi nie trzeba dodawać tego repozytorium):

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

okazuje się, że część '' może być nieaktualna, ale [strona GitHub README ma , która nie potrzebuje dodatkowego repo] (https://github.com/stain/jai-imageio-core) – mmcrae

+0

Nie pomaga mi to w zaimportowaniu javax.media.jai.ColorCube .... –

2

Ten pracował dla mnie:

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

Wydaje się, że GT-pokrycia zależy jai_imageio, więc zainstalowane odpowiednie słoiki dla mnie. Nie musiałem nawet zmieniać kodu, aby użyć tego artefaktu.

To spowoduje, że twój kod będzie działał w twoim IDE. Jeśli jednak chcesz wykonać plik wykonywalny, musisz użyć wtyczki Maven Shade. Jego użycie jest opisane here i here. Zwróć uwagę na dodatkowe linie w drugim linku, ponieważ są one konieczne. Poniżej znajduje się dodatkowy kod, aby przejść w 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> 

nie wiem co te wszystkie wpisy są dodatkowo oczywiste, ale sprawiają, że mój plik wykonywalny słoik robić to, co robi w IDE.

+0

O ile nie potrzebujesz * biblioteki Geotools w swoim projekcie, dodając ją jako zależność jako obejście, aby kodek jai wyglądał na zły rozwiązanie. –

1

Adres URL repozytorium w odpowiedzi manunu prawdopodobnie się zmienił lub przynajmniej jest tymczasowo niedostępny, co powoduje niepowodzenie budowy maven. Jako alternatywę, pod następującym adresem URL można stosować:

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

Chcę, żebyś wiedział, że jesteś najlepszy – mmcrae

+0

chociaż, faktycznie jeśli spojrzysz na stronę Github z odpowiedzi @manunu https://github.com/stain/jai-imageio-core zobaczysz zależność w README , który nie wymaga repozytorium (testowałem to) – mmcrae

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

i dodać repozytorium deklarację:

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

Ten pracował dla mnie. Zgadnij, możesz polegać na Słoiku Wiosny, to nie powinno się poruszać jak java