[RESOLVIDO] java.lang.NoClassDefFoundError: org/apache/commons/collections/ReferenceMap

5 respostas
andreirs

Então, pessoal.
Eu sou iniciante em java. Estou fazendo faculdade mas resolvi pular algumas etapas... :wink:
daí eu encontrei esse erro, quando tentei fazer a chamada de um relatório com o IReport 5.0.1.
Vou postar o código-fonte e o classpath do projeto.
Acho que o problema está no classpath, quero dizer, não devo ter adicionado todas as bibliotecas.
Agradeço desde já a todos que me ajudarem.

ERRO:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/ReferenceMap at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.(DefaultExtensionsRegistry.java:97) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at net.sf.jasperreports.engine.util.ClassUtils.instantiateClass(ClassUtils.java:59) at net.sf.jasperreports.extensions.ExtensionsEnvironment.createDefaultRegistry(ExtensionsEnvironment.java:81) at net.sf.jasperreports.extensions.ExtensionsEnvironment.(ExtensionsEnvironment.java:69) at net.sf.jasperreports.engine.util.JRStyledTextParser.(JRStyledTextParser.java:83) at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:121) at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:88 ) at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:103) at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:61) at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153) at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:82) at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653) at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:569) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:915) at IReport.IReport.main(IReport.java:28 ) Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.ReferenceMap at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 21 more
CÓDIGO:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

import com.mysql.jdbc.PreparedStatement;

public class IReport {

	public static void main(String[] args) {
		JRResultSetDataSource jrRS;
		String url = "jdbc:mysql://localhost:3306/grafica";
		ResultSet rst = null;
		Connection con = null;
		PreparedStatement stm;
		try {
			con = DriverManager.getConnection(url,"root","");
			stm = (PreparedStatement) con.prepareStatement("SELECT ped.id_pedido, ped.data, ped.hora, cli.*, (concat(cli.cidade_cli,' / ',cli.estado_cli)) AS cidadeEstado FROM pedido ped INNER JOIN clientes cli ON cli.idcliente = ped.id_cliente WHERE ped.id_pedido = 76");
			rst = stm.executeQuery();   
            jrRS = new JRResultSetDataSource(rst);
            JasperPrint jasperPrint = JasperFillManager.fillReport("/Users/Ândrei/Desktop/RACIONAL GRÁFICA/Eclipse - RG/InterfaceGrafica/relatorio/pedido.jasper", new HashMap<String, Object>(), jrRS);    
            JasperViewer jrviewer = new JasperViewer(jasperPrint, false);   
            jrviewer.setVisible(true);   
            jrviewer.toFront(); 
        } catch(Exception erro) {
        	erro.printStackTrace();
            JOptionPane.showMessageDialog(null,"Não foi possivel gerar relatório! "+erro);  
        }  
    }  
}

CLASSPATH EM BRAILE:
[img]http://upload.crazzy.com.br/pictures/1405815a7348abea9083e34f634f0799.png[/img]

:idea: Obs.: Não fui eu quem criou o relatório, foi um amigo meu. Eu ainda não tive experiência com o programa IReport, então, peço que expliquem detalhadamente a(s) causa(s) do erro.

5 Respostas

robinsonbsilva

adicione: commons-logging.jar ao projeto, normalmente fica no diretório de instalação do Ireport(C:\Arquivos de programas\Jaspersoft\iReport-5.0.1\ireport\modules\ext )

veja: http://www.guj.com.br/java/129604-ireport

maior_abandonado

está dando um erro falando que não encontrou uma classe em org/apache/commons/collections/

baixe a lib commins collections e adiciona nas bibliotecas do seu projeto:

http://commons.apache.org/collections/download_collections.cgi

robinsonbsilva

Bom dia, caso tenha resolvido, não esqueça de “editar o primeiro post” e adicionar “RESOLVIDO”.

Abraços.

andreirs

robinsonbsilva:
Bom dia, caso tenha resolvido, não esqueça de “editar o primeiro post” e adicionar “RESOLVIDO”.

Abraços.

Tudo bem, pode deixar que farei isso, mas ainda não tive tempo. Obrigado.

andreirs

Obrigado maior_abandonado e robinsonbsilva. :D

Realmente, estava faltando a importação do commons.jar; todos eles.

Vou postar aqui o código-fonte completo e os nomes de todos os jars que importei. Se alguém mais estiver tendo problemas com isso, conseguimos chegar em uma solução aqui.

IMPORTAR:
Se encontram no diretório: "C:\Program Files (x86)\Jaspersoft\iReport-5.0.1\ireport\modules\ext"


commons-beanutils-1.8.2.jar
commons-collections-3.2.1.jar
commons-collections-3.2.1.jar-javadoc.jar
commons-collections-3.2.1.jar-sources.jar
commons-digester-2.1.jar
commons-javaflow-20060411.jar
commons-logging-1.1.jar

jasper-compiler.jar
jasper-runtime.jar
jasperreports-5.0.1.jar

groovy-all-1.7.5.jar

iText-2.1.7.jar

CÓDIGO:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.HashMap;
import javax.swing.JOptionPane;

import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

import com.mysql.jdbc.PreparedStatement;

public class IReport {

	static Connection con;
	
	public static void main(String[] args) {
		JRResultSetDataSource jrRS;
		String url = "jdbc:mysql://localhost:3306/grafica";
		ResultSet rst = null;
		PreparedStatement stm;
		try {
                    // Realiza a conexão com o banco de dados
		    con = DriverManager.getConnection(url,"root","");
                    // Inicializa o HashMap
		    HashMap parameters = new HashMap&lt;String, Object&gt;();
		    parameters.put("parameter1", Integer.parseInt(JOptionPane.showInputDialog("Selecione o número do pedido:")));
		    jrRS = new JRResultSetDataSource(rst);
                    // fillReport("PASTA ONDE SE ENCONTRA O .jasper",HashMap,Conexão com o banco)
                    JasperPrint jasperPrint = JasperFillManager.fillReport("C:/Users/Ândrei/Desktop/relatorios/pedido/pedido.jasper", parameters, con);
                    JasperViewer jrviewer = new JasperViewer(jasperPrint, true);   
                    // Deixa a janela visível
                    jrviewer.setVisible(true);
                    // Trás a janela à frente das outras
                    jrviewer.toFront();	  
        } catch(Exception erro) {
            JOptionPane.showMessageDialog(null,"Não foi possivel gerar relatório! "+erro);  
        }
    }  
}

TÓPICO FECHADO. :!:

Criado 5 de fevereiro de 2013
Ultima resposta 5 de fev. de 2013
Respostas 5
Participantes 3