NoClassDefFoundError: com/google/gson/TypeAdapterFactory в диаграмме Vaadin

Я просто пытаюсь реализовать простую гистограмму с диаграммой vaadin. так же, как учебник ниже ранга, я написал код.

Ссылка: http://demo.vaadin.com/charts/#BasicBar

Но когда я пытаюсь расширить, поскольку такого класса «AbstractVaadinChartExample» не было, я просто делаю этот метод общедоступным статическим.

ниже то, что я сделал.

  1. Я скачал диаграмму vaadin 1.1.5.jar
  2. Я поместил это в свой проект vaadin 7
  3. Я не редактировал исходный код, кроме добавления строки в последний. layout.addComponent(BasicBar.getChart());
  4. Мой BasicBar.java точно такой же, как и эта верхняя ссылка, но я ничего не расширял и сделал метод getChart() «публичным статическим».
  5. Теперь я получил ошибку «NoClassDefFoundError: com/google/gson/TypeAdapterFactory» :-(

Не могу понять, потому что я ничего не делал с gson-то.

Мой код вроде:

package org.owls.chart;

import java.util.ArrayList;
import java.util.List;

import com.vaadin.addon.charts.Chart;
import com.vaadin.addon.charts.model.ChartType;
import com.vaadin.addon.charts.model.Configuration;
import com.vaadin.addon.charts.model.HorizontalAlign;
import com.vaadin.addon.charts.model.Labels;
import com.vaadin.addon.charts.model.LayoutDirection;
import com.vaadin.addon.charts.model.Legend;
import com.vaadin.addon.charts.model.ListSeries;
import com.vaadin.addon.charts.model.PlotOptionsBar;
import com.vaadin.addon.charts.model.Title;
import com.vaadin.addon.charts.model.Tooltip;
import com.vaadin.addon.charts.model.VerticalAlign;
import com.vaadin.addon.charts.model.XAxis;
import com.vaadin.addon.charts.model.YAxis;
import com.vaadin.ui.Component;

public class BasicBar {
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static Component getChart () {
        Chart chart = new Chart(ChartType.BAR);
        Configuration config = chart.getConfiguration();

        config.setTitle("basic chart");
        config.setSubTitle("2014.02.14");

        //X 
        XAxis xAxis = new XAxis();
        xAxis.setCategories("A", "B", "C", "D", "E");
        xAxis.setTitle("xTitle");
        config.addxAxis(xAxis);

        //Y 
        YAxis yAxis = new YAxis();
        yAxis.setMin(0);
        Title tile = new Title("y title");
        tile.setVerticalAlign(VerticalAlign.HIGH);
        yAxis.setTitle(tile);
        config.addyAxis(yAxis);

        Tooltip toolTip = new Tooltip();
        //???
        toolTip.setFormatter("this.series.name : + ': ' + this.y +' millions'");
        config.setTooltip(toolTip);

        //plot
        PlotOptionsBar plot = new PlotOptionsBar();
        //????
        plot.setDataLabels(new Labels(true));
        config.setPlotOptions(plot);

        Legend legend = new Legend();
        legend.setLayout(LayoutDirection.VERTICAL);

        legend.setHorizontalAlign(HorizontalAlign.RIGHT);
        legend.setVerticalAlign(VerticalAlign.TOP);
        legend.setX(-100);
        legend.setY(100);

        legend.setFloating(true);
        legend.setBorderWidth(1);
        legend.setBackgroundColor("#FFFFFF");
        legend.setShadow(true);

        config.setLegend(legend);

        config.disableCredits();

        List series = new ArrayList();
        series.add(new ListSeries("Year 1800", 107, 31, 635, 203, 2));
        series.add(new ListSeries("Year 1900", 133, 156, 947, 408, 6));
        series.add(new ListSeries("Year 2008", 973, 914, 4054, 732, 34));
        config.setSeries(series);

        chart.drawChart(config);
        return chart;
    }
}

Как я могу это исправить? Спасибо


person Juneyoung Oh    schedule 14.02.2014    source источник


Ответы (3)


NoClassDefFoundError появится, когда проект не ссылается на ваш JAR. С небольшим изменением кода, которое вы сделали, я не думаю, что это приведет к ошибке NoClassDefFoundError.

Не могли бы вы предоставить больше информации:

  1. Это простой Java-проект или веб-приложение?

  2. Вы добавили JAR, но вы явно поместили его в путь к классам, используя «Построить путь к классам» в eclipse?

  3. Будет ли программа успешно работать без ваших незначительных изменений?

person Nikhil Joshi    schedule 14.02.2014
comment
Спасибо, Нихил. Я дам вам информацию, которая вам требуется. ответ для № 1 - это просто «проект vaadin 7.X». (Это из плагина Vaadin eclipse) № 2 - конечно, я уже добавил путь сборки файла jar в свой проект, поэтому я мог сделать исходный код без ошибка компиляции. #3 - Не могу попробовать, т.к. демо-сайт не предоставляет полный исходный код. Они просто показывают определение класса. (Вы можете проверить его по ссылке, которую я предоставил в сообщении) - person Juneyoung Oh; 17.02.2014

Похоже, вам нужна эта загрузка Jar: http://www.java2s.com/Code/Jar/g/Downloadgson221jar.htm

Это не упоминается в рекомендациях по установке Stripe, установка этого Jar разрешила это сообщение об ошибке для меня, если кто-то еще столкнется с этой проблемой.

person Michael Cropper    schedule 27.11.2015

Vaadin основан на GWT, поэтому я подозреваю, что вы используете сервер разработки.

Если это так, добавьте к вам путь gson -Xbootclasspath

-Xbootclasspath/p:/somepath/libraries-master/appengine-java-sdk-1.9.48/lib/override/appengine-dev-jdk-overrides.jar:/p:/somepath/war/WEB-INF/lib/gson-2.2.4.jar

В Eclipse просмотрите конфигурации запуска -> Аргументы -> Аргументы виртуальной машины.

Если вы запускаете сервер разработки с помощью Ant или другого скрипта, вам придется настроить там -Xbootclasspath.

person user1258245    schedule 28.04.2017