Pergunta

O JAI configuração é muito tedioso, envolvendo vários frascos e variáveis ??de ambiente. Seria ajudar a portabilidade do projeto bastante se eu poderia adicioná-lo como uma dependência normal Maven.

O POM trecho que estou usando é

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

e os erros são

[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

eu posso, é claro, baixar e instalar esses frascos. O problema é duplo:

  • jai_imageio requer dois frascos;
  • jai_imageio requer uma biblioteca nativa para ser instalado e duas variáveis ??de ambiente a ser definido.

Eu não encontrei uma maneira de fazer este trabalho com Maven.


Consulte Reading JCS_YCCK imagens usando ImageIO para a razão que eu estou usando JAI.

Foi útil?

Solução 5

O que eu não conseguia ver era que a dependência JAI precisava ser satisfeita apenas em tempo de execução e, portanto, tenho a certeza que o ambiente de produção tem acesso a JAI, configurando-o para Tomcat.

Outras dicas

Para evitar donwloading os frascos e instalá-los você pode adicionar uma dependência no repo primavera. Então mude a dependência normal, ligeiramente:

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

e adicione uma declaração repositório:

    <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 deve agora trabalho (que faz todas as classes sol disponível javax.media.jai. *). Veja aqui:

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

Você também pode adicionar a dependência codec se necessário ...

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

Há uma implementação "independente" da JAI-ImageIO, sem dependências para jai_core. Ela não precisa de instalação JAI para o seu JDK e JRE, único single dependência Maven.

No Maven, adicione-o do repositório:

<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 dependência:

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

seu local de para mais detalhes

PS atualizado após um comentário útil (outra dependência do GitHub que não precisa acrescentando que repositório):

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

Você vai necessidade de baixar os frascos e instalá-los em seu repositório maven local ou servidor proxy repositório local (Nexus / Artifactory). Eu acho que você pode usar a maven-executor-plugin para validar que o ambiente configurações estão lá.

O licença para jai_imageio não permite que ele seja distribuídos .

Isso funcionou para mim:

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

Parece que gt-cobertura depende jai_imageio, por isso instalou os frascos apropriados para mim. Eu nem sequer tenho que mudar meu código para usar este artefato.

Isto irá obter o seu código de trabalho dentro de seu IDE. No entanto, se você quer um jar executável, então você precisa usar o Sombra plugin Maven. Seu uso é descrito aqui e aqui . Observe as linhas extras no link 2, porque eles são necessários. Aqui está o código extra para ir em seu 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>

Eu não sei o que todas essas entradas de manifesto extras são, mas eles fazem o meu jar executável fazer o que faz no IDE.

O URL do repositório na resposta de manunu parece ter mudado, ou pelo menos é temporariamente indisponíveis , o que faz com que a construção Maven para falhar. Como alternativa, o seguinte url pode ser usado:

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 adicione uma declaração repositório:

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

Isso funcionou para mim. Acho que pode confiar na Primavera Jar, não deve mover-se como java fez

tente o seguinte:

<dependency>
  <groupId>com.sun.media</groupId>
  <artifactId>jai_imageio</artifactId>
  <version>1.1</version>
  <type>pom</type>
</dependency>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top