Domanda

Il JAI setup è abbastanza noioso, coinvolge più vasetti e variabili di ambiente. Sarebbe di grande aiuto la portabilità del progetto se potessi aggiungerlo come una normale dipendenza Maven.

Lo snippet POM che sto usando è

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

e gli errori sono

[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

Posso, ovviamente, scaricare e installare quei vasetti. Il problema è duplice:

  • jai_imageio richiede due barattoli;
  • jai_imageio richiede l'installazione di una libreria nativa e l'impostazione di due variabili di ambiente.

Non ho trovato il modo di farlo funzionare con Maven.


Vedi Lettura delle immagini JCS_YCCK usando ImageIO per il motivo che sto usando JAI.

È stato utile?

Soluzione 5

Quello che non sono riuscito a vedere era che la dipendenza JAI doveva essere soddisfatta solo in fase di esecuzione, e quindi mi sono assicurato che l'ambiente di produzione abbia accesso a JAI, configurandolo per Tomcat.

Altri suggerimenti

Per evitare di scaricare i barattoli e installarli, è possibile aggiungere una dipendenza dal repository di primavera. Quindi cambia leggermente la dipendenza normale:

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

e aggiungi una dichiarazione del repository:

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

E ora dovrebbe funzionare (rende disponibili tutte le classi di sole javax.media.jai. *). Vedi qui:

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

Se necessario, puoi anche aggiungere la dipendenza codec ...

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

Esiste un " standalone " implementazione di JAI-imageio, senza dipendenze da jai_core. Non ha bisogno dell'installazione JAI su JDK e JRE, solo una singola dipendenza Maven.

In Maven, aggiungi il suo repository:

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

e dipendenza:

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

Vedi il suo sito per maggiori dettagli

PS aggiornato dopo un utile commento (un'altra dipendenza da gitHub che non ha bisogno di aggiungere quel repository):

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

Dovrai scaricare i vasetti e installarli nel tuo repository maven locale o nel server proxy del repository locale (Nexus / Artifactory). Penso che puoi usare il maven-enforcer-plugin per convalidare l'ambiente le impostazioni ci sono.

La licenza per jai_imageio non consente che sia distribuito .

Questo ha funzionato per me:

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

Sembra che la copertura gt dipenda da jai_imageio, quindi ha installato i vasetti appropriati per me. Non ho nemmeno dovuto cambiare il mio codice per usare questo artefatto.

Questo farà funzionare il tuo codice all'interno del tuo IDE. Tuttavia, se si desidera un vaso eseguibile, è necessario utilizzare il plug-in Maven Shade. Il suo uso è descritto qui e qui . Nota le righe extra nel secondo link perché sono necessarie. Ecco il codice extra da inserire nel tuo 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>

Non so cosa siano tutte quelle voci extra manifest, ma fanno sì che il mio vaso eseguibile faccia quello che fa nell'IDE.

L'URL del repository nella risposta di manunu sembra essere cambiato o almeno è temporaneamente non disponibile , il che fa fallire la compilazione di Maven. In alternativa, è possibile utilizzare il seguente 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>

e aggiungi una dichiarazione del repository:

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

Questo ha funzionato per me. Immagino che possa fare affidamento su Spring Jar, non dovrebbe muoversi come ha fatto java

prova questo:

<dependency>
  <groupId>com.sun.media</groupId>
  <artifactId>jai_imageio</artifactId>
  <version>1.1</version>
  <type>pom</type>
</dependency>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top