Erro java.lang.ClassNotFoundException no SubReport

1,332 views
Skip to first unread message

Rafael Piai Pimenta

unread,
Oct 3, 2016, 11:39:06 PM10/3/16
to JasperReports / iReport Brasil
Boa noite Amigos,

Tenho alguns sistemas WEB que utilizam uma estrutura própria para geração de relatórios.
E apenas em alguns casos simples, eu tinha usado o Jasper, para geração de um PDF simples.
Apareceu uma necessidade agora, de gerar um PDF de um relatório um pouco mais complexo com um SubReport dentro. Pelo JasperStudio funciona tudo normalmente.
Quando coloco na minha aplicação, se deixo apenas o relatório principal, também funciona.
Quanto adiciono o Sub, ocorre o seguinte erro:

java.lang.ClassNotFoundException: net.sf.jasperreports.functions.standard.LogicalFunctions
        at java
.lang.ClassLoader.findClass(ClassLoader.java:530)
        at java
.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java
.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at
InformacaoNutricionalProdutoSub_1475537837492_805532.evaluate(InformacaoNutricionalProdutoSub_1475537837492_805532:215)
        at net
.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:276)
        at net
.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:616)
        at net
.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:584)
        at net
.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:1164)
        at net
.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:526)
        at net
.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:510)
        at net
.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:381)
        at net
.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:500)
        at net
.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2022)
        at net
.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:748)
        at net
.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:255)
        at net
.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:115)
        at net
.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:582)
        at net
.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:396)
        at net
.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:732)
        at net
.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
        at net
.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:221)
        at java
.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java
.lang.Thread.run(Thread.java:745)

Mas oque é mais estranho, é que também uso o IF no relatório principal e não da esse erro, ocorre apenas no SUB. Já utilizei a opção de imports, para adicionar esse package, já adicionei na mão o 
jasperreport-functions.jar, juntamente com outras dependências que encontrei no seguinte link: jasperreports-concatenate-function-not-found, mas de toda forma ocorre o erro.

Estou usando a versão 6.2.1 do JasperStudio e 6.3.1 (JasperReport) no meu pom.

Alguém já passou por isso?

Obrigado

Denis Benjamim

unread,
Oct 4, 2016, 8:03:18 AM10/4/16
to jasperreports-...@googlegroups.com

Bom dia Amigo


Voce poderia postar o caminho do diretorio onde esta o relatorio principal e o sub ? tal como o valor contido dentro da variavel SUBREPORT. Mas tem cara de biblioteca faltante.

Denis Benjamim
Consultor de TI - Transparency Logistica Transportes ltda / Transquality e Transportes ltda

Telefone: +55 13 4010-3365
Telefone: +55 13 4010-3360
Celular: +55 13 99727-9686
Endereço: Av, Bandeirantes,630 - Alemoa / Santos-SP
E-mail: denis.b...@gmail.com
Site: http://transparency.com.br/
Image title

--
Você recebeu essa mensagem porque está inscrito no grupo "JasperReports / iReport Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.




Avast logo

Este email foi escaneado pelo Avast antivírus.
www.avast.com


Rafael Piai Pimenta

unread,
Oct 4, 2016, 8:40:03 AM10/4/16
to JasperReports / iReport Brasil
Bom dia Denis,

Pois é, com certeza é alguma falta de biblioteca, só acho estranho só ocorrer no sub, e no principal funcionar.

Desculpe a ignorância, mas não achei essa variável SUBREPORT. Não sei se é a versão do JasperStudio que estou utilizando.

O que tenho, é dentro do relatório principal, um componente SubReport, com a propriedade Expression preenchida com o nome do Sub. "NomeDoSub.jasper".

Os dois estão no mesmo diretório, tanto no projeto do Jasper, quanto no meu projeto Java.
Para fazer a chamada, estou utilizando o seguinte código que já utilizava em outro relatório mais simples:

JasperPrint impressao = JasperFillManager.fillReport(reportJasper, parametros, connection);
JasperExportManager.exportReportToPdfFile(impressao, diretorioArquivo);

Obrigado
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-ireport-brasil+unsub...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

Denis Benjamim

unread,
Oct 4, 2016, 8:47:21 AM10/4/16
to jasperreports-...@googlegroups.com

Desculpe, rs é um parametro SUBREPORT_DIR, como ta o caminho que colocou neste ?


Denis Benjamim
Consultor de TI - Transparency Logistica Transportes ltda / Transquality e Transportes ltda

Telefone: +55 13 4010-3365
Telefone: +55 13 4010-3360
Celular: +55 13 99727-9686
Endereço: Av, Bandeirantes,630 - Alemoa / Santos-SP
E-mail: denis.b...@gmail.com
Site: http://transparency.com.br/
Image title

-- Você recebeu essa mensagem porque está inscrito no grupo "JasperReports / iReport Brasil" dos Grupos do Google. Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com. Para mais opções, acesse https://groups.google.com/d/optout.

Rafael Piai Pimenta

unread,
Oct 4, 2016, 8:55:55 AM10/4/16
to JasperReports / iReport Brasil
Denis,

Não coloquei kkkkkkkk

Pelo que entendi esse é um parãmetro que eu devo criar na mão? Pois o Jasper não criou esse parâmetro, e no tutorial que eu segui, pelo menos não percebi a criação desse parâmetro.
Vou criá-lo aqui e posto o resultado.

Denis Benjamim

unread,
Oct 4, 2016, 8:59:38 AM10/4/16
to jasperreports-...@googlegroups.com

Esse parametro  e criado na geração do relatorio, ao menos era no iReport. Bom ele é usado aqui

Denis Benjamim
Consultor de TI - Transparency Logistica Transportes ltda / Transquality e Transportes ltda

Telefone: +55 13 4010-3365
Telefone: +55 13 4010-3360
Celular: +55 13 99727-9686
Endereço: Av, Bandeirantes,630 - Alemoa / Santos-SP
E-mail: denis.b...@gmail.com
Site: http://transparency.com.br/
Image title

-- Você recebeu essa mensagem porque está inscrito no grupo "JasperReports / iReport Brasil" dos Grupos do Google. Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com. Para mais opções, acesse https://groups.google.com/d/optout.

Denis Benjamim

unread,
Oct 4, 2016, 9:01:24 AM10/4/16
to jasperreports-...@googlegroups.com

Mas repito o problemas de classnotfound é falta de uma biblioteca eu uso essas no meu projeto Java SE.


Denis Benjamim
Consultor de TI - Transparency Logistica Transportes ltda / Transquality e Transportes ltda

Telefone: +55 13 4010-3365
Telefone: +55 13 4010-3360
Celular: +55 13 99727-9686
Endereço: Av, Bandeirantes,630 - Alemoa / Santos-SP
E-mail: denis.b...@gmail.com
Site: http://transparency.com.br/
Image title

Rafael Piai Pimenta

unread,
Oct 4, 2016, 9:05:21 AM10/4/16
to JasperReports / iReport Brasil
Pois é! com certeza é a biblioteca, só não consigo entender po motivo de no principal funcionar e no sub não.
De qualquer forma, vou fazer um teste passando aquele parametro do SUBREPORT_DIR, só por desencargo, pq pensando bem, se está dando erro na execução do IF dentro de uma expression, é por que o sitema encontrou o arquivo do sub.

Vou dar uma conferida no meu pom e verificar com as suas bibliotecas.

Obrigado

Rafael Piai Pimenta

unread,
Oct 5, 2016, 5:50:23 PM10/5/16
to JasperReports / iReport Brasil
Boa noite,

Problema resolvido.

Denis, o print das suas dependências me ajudou muito, obrigado. 

1 - Para realizar um teste eu baixei todos os .jar na mão e inclui ao projeto. Executei o projeto e tudo funcionou perfeitamente.
2 - Feito isso, eu queria que isso funcionasse pelo pom, para controle do Maven.

O erro estava ocorrendo, pois a dependência jasperreports-functions (pelo menos na versão 6.X.X) não está publicada no repositório principal do Maven, fazendo com que ficasse faltando no meu projeto.
Pesquisando, vi que teria que adicionar manualmente o repositório do jasper no meu pom.

Abaixo o pom, que no meu caso funcionou perfeitamente.

<repositories>
    <repository>
        <id>jaspersoft</id>
        <name>JasperSoft Repository</name>
        <layout>default</layout>
        <url>https://jaspersoft.artifactoryonline.com/jaspersoft/jr-ce-releases/</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

Dependências:
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.2.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.lucene</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-functions</artifactId>
    <version>6.2.1</version>
</dependency>
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-fonts</artifactId>
    <version>6.0.0</version>
</dependency>
<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.9.4</version>
</dependency>
<dependency>
    <groupId>commons-digester</groupId>
    <artifactId>commons-digester</artifactId>
    <version>2.1</version>
</dependency>
<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7</version>
</dependency>

Testei com algumas versões mais recentes do iText e dava erro. Essa é uma versão que realmente funciona.

Obrigado pelo ajuda.

Denis Benjamim

unread,
Oct 5, 2016, 7:27:43 PM10/5/16
to jasperreports-...@googlegroups.com

Obrigado por Compartilhar

Denis Benjamim
Consultor de TI - Transparency Logistica Transportes ltda / Transquality e Transportes ltda

Telefone: +55 13 4010-3365
Telefone: +55 13 4010-3360
Celular: +55 13 99727-9686
Endereço: Av, Bandeirantes,630 - Alemoa / Santos-SP
E-mail: denis.b...@gmail.com
Site: http://transparency.com.br/
Image title

-- Você recebeu essa mensagem porque está inscrito no grupo "JasperReports / iReport Brasil" dos Grupos do Google. Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com. Para mais opções, acesse https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages