java.lang.ClassNotFoundException: org.apache.commons.digester.Rule

java.lang.ClassNotFoundException: org.apache.commons.digester.Rule

这不是一个新问题,但我 help/clue 少了...所以在这里问...我在尝试 运行 DynamicReport 时遇到错误 "java.lang.ClassNotFoundException: org.apache.commons.digester.Rule"示例项目。我的规格如下: Java - 1.7,commons-beanutils-1.9.3,commons-collections-3.2.2,commons-digester-3.2,commons-lang-3.7,commons-logging-1.2,dynamicreports-core-5.0.0, jasperreports-5.6,jasperreports-javaflow,

代码片段如下:

// import statements
public class sampleReport {

public sampleReport() {
    build();
}

private void build() {

    try {
        JasperReportBuilder report = DynamicReports.report();
        // a new report
        report // create new report design
            .columns(
                // add columns title, field name data type
                Columns.column("Item", "item",
                    DataTypes.stringType()),
                Columns.column("Quantity", "quantity",
                    DataTypes.integerType()),
                Columns.column("Unit price",
                    "unitprice",

                    DataTypes.bigDecimalType()))

            .title(Components.text("Getting started report")

                .setHorizontalAlignment(HorizontalAlignment.CENTER))
            // shows report title
            .pageFooter(Components.pageXofY())
            // shows number of page at page footer
            .setDataSource(createDataSource())
            // set datasource
            .show(); // create and show report

        // show the report
        report.show();

        // export the report to a pdf file
        report.toPdf(new FileOutputStream("c:/report.pdf"));

    } catch (DRException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

}

private JRDataSource createDataSource() {

    DRDataSource dataSource = new DRDataSource("item",
        "quantity", "unitprice");
    dataSource.add("Notebook", 1, new BigDecimal(500));
    dataSource.add("DVD", 5, new BigDecimal(30));
    dataSource.add("DVD", 1, new BigDecimal(28));
    dataSource.add("DVD", 5, new BigDecimal(32));
    dataSource.add("Book", 3, new BigDecimal(11));
    dataSource.add("Book", 1, new BigDecimal(15));
    dataSource.add("Book", 5, new BigDecimal(10));
    dataSource.add("Book", 8, new BigDecimal(9));

    return dataSource;
}

public static void main(String[] args) {
    new sampleReport();
}

感谢任何帮助。

我不知道您的 IDE 配置和/或构建配置。然而,错误将我指向 jar 版本不兼容问题 的方向。 基本上发生的事情是你的一个罐子引用了一个 class 由于版本不同(旧的或更新的)

而没有包含在当前构建路径中

建议的解决方案: 如果您有能力使用更高级的构建工具,如 maven or gradle,它会自动解决依赖关系并指出问题版本。使用它们的最佳方法是一个一个地添加 Maven 工件(从最复杂依赖的 jar 开始)直到所有导入错误都被删除。这可能会解决所有版本问题。

替代(快速)解决方案: 下载 this version of apache.digester because if you look at the maven dependencies of jasper 你可以看到它引用了 digester 的 2.1 版,而你使用的可能是 digester 的 3.2 版class在不同的包下。

希望对您有所帮助。