#java #birt #birt-emitter
#java #birt #birt-эмиттер
Вопрос:
Я пытаюсь получить CSV из отчета, используя этот хорошо известный плагин и пример из его документации, но он выдает исключение. Интересно, почему, потому что я только что скопировал большую часть кода из документа.
Мой код:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.logging.Level;
import org.eclipse.birt.core.exception.BirtException;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.emitter.csv.CSVRenderOption;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
public class RunReport {
static void runReport() throws FileNotFoundException, BirtException {
String resourcePath = "C:\Users\hpsa\workspace\My Reports\";
FileInputStream fs = new FileInputStream(resourcePath "new_report_1.rptdesign");
IReportEngine engine = null;
EngineConfig config = new EngineConfig();
config.setEngineHome("C:\birtre\birt-runtime-4_3_2\");
config.setLogConfig("C:\birtre\", Level.FINE);
config.setResourcePath(resourcePath);
Platform.startup(config);
IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
engine = factory.createReportEngine(config);
engine.changeLogLevel(Level.FINE);
IReportRunnable design = engine.openReportDesign(fs);
IRunAndRenderTask task = engine.createRunAndRenderTask(design);
CSVRenderOption csvOption = new CSVRenderOption();
String format = CSVRenderOption.OUTPUT_FORMAT_CSV;
csvOption.setOutputFormat(format);
csvOption.setOutputFileName("newBIRTcsv.csv");
csvOption.setShowDatatypeInSecondRow(true);
csvOption.setExportTableByName("SecondTable");
csvOption.setDelimiter("t");
csvOption.setReplaceDelimiterInsideTextWith("-");
task.setRenderOption(csvOption);
task.setEmitterID("org.eclipse.birt.report.engine.emitter.csv");
task.run();
task.close();
Platform.shutdown();
System.out.println("Report Generated Sucessfully!!");
}
public static void main(String[] args) {
try {
runReport();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Я получаю исключение:
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/CoreException
at org.eclipse.birt.core.framework.Platform.createPlatformLauncher(Platform.java:115)
at org.eclipse.birt.core.framework.Platform.startup(Platform.java:74)
at com.demshin.birttest.RunReport.runReport(RunReport.java:26)
at com.demshin.birttest.RunReport.main(RunReport.java:55)
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.CoreException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 4 more
Я нашел пакет org.eclipse.core.runtime и зарегистрировался в пути сборки, но затем я получаю то же исключение. Действительно, никаких CoreException.class в пакете org.eclipse.core.runtime. Что я делаю не так?
Комментарии:
1. Я получил другой пакет, содержащий необходимый класс, но затем мне нужно другое исключение, а также новое и еще одно после поиска и регистрации каждого нового jar. Чего мне здесь не хватает?
Ответ №1:
Установка домашнего движка устарела, и большую часть времени это будет препятствовать запуску платформы, например, в вашем случае. Удалите эту строку:
config.setEngineHome("C:\birtre\birt-runtime-4_3_2\");
Вам просто нужно убедиться, что среда выполнения birt 4.3.2 находится в пути к классу вашего контекста. Кроме того, я бы рекомендовал вам сначала попытаться создать собственный формат, такой как pdf, а затем попробовать использовать формат csv.
Комментарии:
1. Я использую org.eclipse.birt.runtime_4.3.2.v20140225-1404.jar , и да, у меня есть это в моем пути к классу. Некоторые классы оттуда. Я пробовал без строки, которую вы упомянули, прежде чем задавать вопрос, все еще не работает. Я также создал проект maven.
Ответ №2:
Я пробовал много вариантов импорта разных банок, но, наконец, я нашел странное решение здесь:
перейдите в обозреватель проектов, щелкните правой кнопкой мыши по свойствам проекта, перейдите к пути сборки Java, нажмите кнопку External Jars, затем выберите все библиотеки в разделе C:birt_runtimebirt-runtime-2_1_0ReportEnginelib папка
Это создало хаос, но, по крайней мере, он начинается.