.JAR Eclipse com iReport (Resolvido)

Boa noite pessoas…

estou desenvolvendo uma aplicação utilizando o iReport para geração de relatórios. Quando compilo o programa ele roda perfeitamente o relatório com opção de salvar, imprimir, etc…

depois eu crio o arquivo .jar e ele cria perfeitamente porém, qndo vou rodar, ele não gera o relatório…se eu tiro a classe Relatorio (listada abaixo) no arquivo .jar, ele cria e o programa roda perfeitamente…

Exception in thread “main” java.lang.NoClassDefFoundError: net/sf/jasperreports/engine/JRException
at Principal.Relatorios(Principal.java:176)
at Principal.init
at Principal.main(Principal.java:8)
Caused by: java.lang.ClassNotFoundException: net.sf.jasperreports.engine.JRException
at java.net.URLClassLoader$1.run(Unknow Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Uknown Source)
at java.lang.ClassLoader.loadClass(Unknow Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknow Source)
at java.lang.ClassLoader.loadClass(Unknow Source)
at java.lank.ClassLoader.loadClassInternal(Unknow Source)

segue abaixo meu método responsável pela geração de relatório:

[code]public void geraRelatorio(){
try{
conexao.abrir();

		URL url = getClass().getResource("Relatorios//DiaSeguinte.jasper");   

		if (url == null)   
			JOptionPane.showMessageDialog(null,"Arquivo não encontrado");
           
	   InputStream is = url.openStream();
		 
		PreparedStatement pstmt = conexao.conexao.prepareStatement("SELECT HISTORICO.COD_CLIENTE,HISTORICO.COD_HISTORICO, CLIENTE.NOME_RAZAO FROM HISTORICO AS HISTORICO INNER JOIN CLIENTE AS CLIENTE ON CLIENTE.COD_CLIENTE = HISTORICO.COD_CLIENTE WHERE HISTORICO.RETORNO = DATE_ADD(CURDATE(),INTERVAL 1 DAY)");	
		ResultSet rs = pstmt.executeQuery();

		JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );

		HashMap parameters = new HashMap();
		parameters.put("data", String.valueOf(formataData.format(data.getTime())));
		
		JasperPrint jp = JasperFillManager.fillReport(is, parameters, jrRS); // aqui vai a tua conexao com o bando   

	    JasperViewer.viewReport(jp, false);
		
		bSairRelatorios.doClick();
	}
	catch(SQLException e){
		JOptionPane.showMessageDialog(null,e.getMessage());
	}
	catch(JRException e){
		JOptionPane.showMessageDialog(null,e.getMessage());
	}
	catch(Exception ex) {   
		ex.printStackTrace();
	}
}[/code]

e estou importando isto:

import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JOptionPane;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Component;
import java.awt.Insets;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.FocusListener;
import java.awt.event.FocusEvent;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Calendar;
import java.util.GregorianCalendar;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.net.URL;
import java.io.InputStream;

estou usando a IDE JGrasp

No aguardo.

Vc tem que setar os jars de suas libs no MANIFEST. Procure sobre isso aqui no GUJ que vc encontrará um monte de tópicos…

agradeço a resposta…

já ouvi falar desse MANIFEST…qndo eu compilo e crio o .JAR, ele é criado também? Como q eu consigo identificar os .JAR do iReport dentro dele?

No aguardo.

na verdade, o jasperreports.jar não está no classpath, quando vc executa a aplicação.

faça: java -cp caminhoondeestaojar\jasperreports.jar;outrosarquivosjarnecessarios nomedaclassemain.

Fernando

Agradeço a resposta…

Então Fernando, eu importei pelo jGRASP no ClassPatch esse jasperreports.jar…e esse comando que vc passou embaixo, tem q fazer aonde?

Desculpe mas, sou meio leigo no iReport…comecei a usar agora…

No aguardo

Então…não conheço esse JGrasp :roll:

Mas pela ide irá funcionar, pq ela joga o arquivo no classpath…

mas quando tu gera o .jar da tua aplicação e roda fora de um ambiente de desenvolvimento, tu tem que apontar as bibliotecas necessárias. Geralmente eu crio um arquivo .bat, passando a linha de execução. Meus arquivos .jar nunca são executáveis, portanto não utilizo o comando “java -jar nomedoarquivo.jar”, para executar…sempre utilizo:

java -cp lib/arquivojar1.jar;lib/arquivojar2.jar;lib/arquivojar3.jar com.empresa.meupacote.ClasseMain

onde a pasta lib é onde tem as bibliotecas necessárias…e onde deve estar o teu jasperreports.jar

Fernando

fala pessoas…deu certo…vou contar aqui como fiz os esquemas…

antes de mais nda…tive que migrar meu projeto inteiro para o Eclipse…depois que migrei, na pasta do Projeto, criei uma pasta chamada lib e salveis os seguintes arquivos .jar do iReport:

barbecue-1.5-beta1.jar
commons-beanutils-1.7.jar
commons-collections-2.1.jar
commons-digester-1.7.jar
commons-javaflow-20060411.jar
commons-logging-1.0.2.jar
commons-logging-api-1.0.2.jar
iReport.jar
itext-1.3.1.jar
jasperreports-3.0.0.jar
jdt-compiler-3.1.1.jar
mysql-connector-java-3.1.11-bin.jar
poi-3.0.1-FINAL-20070705.jar

Depois, no eclipse, clicar em cima do projeto com o botão direito (do lado esquerdo na razi) e ir em ‘Properties’. Selecione Java Build Patch, na guia Libraries selecione Add JARs. Vá na pasta lib aonde vc criou e adiciona todos os .JAR que estiver dentro da pasta. Pronto, o programa agora está “enchergando” os pacotes que vc importou dentro do código.

Feito isso, abra o bloco de notas e crie um arquivo chamado manifest com extensão .mf e salve as seguintes configurações nele:

Manifest-Version: 1.0
Sealed: true
Class-Path: lib/barbecue-1.5-beta1.jar lib/commons-beanutils-1.7.jar lib/commons-collections-2.1.jar lib/commons-digester-1.7.jar lib/commons-javaflow-20060411.jar lib/commons-logging-1.0.2.jar lib/commons-logging-api-1.0.2.jar lib/iReport.jar lib/itext-1.3.1.jar lib/jasperreports-3.0.0.jar lib/jdt-compiler-3.1.1.jar lib/mysql-connector-java-3.1.11-bin.jar lib/poi-3.0.1-FINAL-20070705.jar
Main-Class: Principal
Name: Principal.class
Java-Bean: True

Salve esse arquivo dentro da pasta do projeto.

Agora, para gerar o .JAR, vá no eclipse, clique com o direito em cima do projeto e vai em Export. Selecione todos os arquivos e de um nome ao .JAR. clique duas vezes em Next e quando chegar na parte Specify the Manifest, selecione Use existing manifest form Workspace e localize o arquivo salvo (manifest.mf)

Pronto…agora, só rodar o .JAR.

Quem tiver dúvida, só chamar…valeu pela força!!

abraços