NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap trotz vorhandener Klasse?

PinkMuffin

Bekanntes Mitglied
Hallo,
ich bekomme bei meinem Programm, folgenden Fehler, wenn ich versuche, den XSSFWorklog zu verwenden:
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap
    at WorklogGetter.writeFile(WorklogGetter.java:84)
    at JiraClient.main(JiraClient.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections4.ListValuedMap
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 2 more

Da anscheinend eine Klasse nicht gefunden werden kann, habe ich die commens-collections schon in Maven hinzugefügt:
Code:
    <dependencies>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.0</version>
        </dependency>

    </dependencies>

Der Code, der durchzuführen wäre, sieht so aus, falls das relevant ist:
Code:
    public void writeFile(JSONArray worklogs) throws IOException {
        final String FILE_PATH = "C:/Users/seitz.DC01/ExcelWorklogs.xlsx";
   
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("WorklogSheet");
        for(int i=0; i< worklogs.length();i++)
        {
            XSSFRow row = sheet.createRow(i+1);
            XSSFCell cellName = row.createCell(1);
            XSSFCell cellZeit = row.createCell(2);
            cellName.setCellValue(worklogs.getJSONObject(i).get("Bearbeiter").toString());
            cellZeit.setCellValue(worklogs.getJSONObject(i).get("Zeit").toString());
        }
        workbook.write(new FileOutputStream(FILE_PATH));
    }
Weiß jemand, warum die Klasse trotz der Dependency nicht genutzt werden kann?

LG
Lena
 
Wie startest du denn?
Über die main mit der Methode getWorklogs.writeFile(getWorklogs.printWorklogs(issueArrayBoard));
Die Methode getWorklogs.printWorklogs(issueArrayBoard) gibt dabei dann den worklogsArray zurück.
Mit einer anderen Bibliothek hatte es funktioniert (ich hatte also ein Excel-Sheet mit den benötigten Daten), allerdings hab ich bei der Bibliothek einige Funktionen nicht gefunden, die bei der jetzigen da sind.
 
Über IntelliJ, allerdings sollte das diesmal nicht das Problem sein, da es jetzt eine neue Version ist, bei der einige Bugs gefixt worden sind. (Unter anderem der Bug, der das Problem mit den Maven-Dependencies ausgelöst hat)
 
Zuletzt bearbeitet:
Ist das auch als Maven Projekt angelegt?
Ja, alle anderen Maven-Dependencies funktionieren auch. Laut anderen Foren gibt es wohl ein Problem mit den unterschiedlichen Versionen und da ich nicht genau weiß, welche wie kompatibel sind, habe ich einfach eine andere genommen.
Falls jemand das gleiche Ziel (ArrayList zu Excel-File) hat, dieser Code funktioniert bei mir
Code:
            try {
                String filename = "C:/temp/JiraWorklogs.csv";
                @SuppressWarnings("resource")
                HSSFWorkbook workbook = new HSSFWorkbook();
                HSSFSheet sheet = workbook.createSheet("Arbeitszeiten");
                for (int i=0; i<worklogs.size(); i++) {
                    HSSFRow Row = sheet.createRow(i);
                    Row.createCell(0).setCellValue(worklogs.get(i).getBearbeiter());
                    Row.createCell(1).setCellValue(worklogs.get(i).getZeit());
                }
                FileOutputStream fileOut = new FileOutputStream(filename);
                workbook.write(fileOut);
                fileOut.close();

            } catch ( Exception ex ) {
                System.out.println(ex);
            }

        }
Die entsprechenden maven-dependencies:
Code:
    <dependencies>
        <dependency>
            <groupId>com.mashape.unirest</groupId>
            <artifactId>unirest-java</artifactId>
            <version>1.4.9</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160212</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.0</version>
        </dependency>
    </dependencies>

Ist wahrscheinlich nicht optimal, aber funktioniert vom Grundprinzip her.
 
Mal die Ordner gelöscht?
Da ich schon diverse Probleme mit Maven hatte, bin ich alle gängigen Lösungswege (Reimportieren, clean, etc) durchgegangen und dadurch wurden die Probleme nicht gelöst.
Da es mit der anderen Library problemlos funktioniert, gehe ich davon aus, dass es, wie hier
(https://stackoverflow.com/questions/39670382/apache-poi-error-loading-xssfworkbook-class) beschrieben, Probleme mit der Version waren.
Anscheinend ist nämlich in der apache.poi-pom eine dependency zu einer älteren Version von commons-collections mitgegeben, aus der eine bestimmte Klasse entfernt wurde (Sofern ich es richtig verstanden habe).
Allerdings habe ich das jetzt nicht mehr ausprobiert, da man in dem Fall eine andere Library verwenden kann, die für diese Zwecke ausreicht und keine Probleme mit den Dependencies verursacht.
 

Zurück
Oben