Ich verwende Gradle, um ein Testprojekt einzurichten, das itext 7 verwendet, um PDF-Dateien zu generieren.java.lang.NoClassDefFoundError: com/itextpdf/kernel/pdf/PdfWriter itext und gradle
Wenn ich meine Hauptklasse in Netbeans IDE ausführen, funktioniert alles gut; Ein "results" -Ordner wird erstellt und darin finde ich das generierte PDF.
Aber wenn ich das Projekt säubere und baue, gehe in project_folder/build/libs und versuche, java -jar mypdfproject.jar Datei auszuführen, bekomme ich diesen Fehler => java.lang.NoClassDefFoundError: com/iextpdf/kernel/pdf/PDFWriter
dies meine Hauptklasse ist (MyPdfMain.class)
package com.mypackage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import java.io.File;
import java.io.IOException;
public class MyPdfMain {
public static final String DEST = "results/pdf/hello_word.pdf";
/**
* @param args the command line arguments
* @throws java.io.IOException
*/
public static void main(String[] args) throws IOException {
File file = new File(DEST);
file.getParentFile().mkdirs();
//Initialize PDF writer
PdfWriter writer = new PdfWriter(DEST);
//Initialize PDF document
PdfDocument pdf = new PdfDocument(writer);
// Initialize document
Document document = new Document(pdf);
//Add paragraph to the document
document.add(new Paragraph("Hello World!"));
//Close document
document.close();
}
}
und dies ist der build.gradle
apply plugin: 'java'
sourceCompatibility = '1.8'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
if (!hasProperty('mainClass')) {
ext.mainClass = 'com.mypackage.MyPdfMain'
}
repositories {
mavenCentral()
}
dependencies {
compile group: 'com.itextpdf', name: 'kernel', version: '7.0.0'
compile group: 'com.itextpdf', name: 'io', version: '7.0.0'
compile group: 'com.itextpdf', name: 'layout', version: '7.0.0'
compile group: 'com.itextpdf', name: 'forms', version: '7.0.0'
compile group: 'com.itextpdf', name: 'pdfa', version: '7.0.0'
compile group: 'com.itextpdf', name: 'pdftest', version: '7.0.0'
testCompile group: 'junit', name: 'junit', version: '4.10'
}
task copyToLib(type: Copy) {
into "$buildDir/libs/lib"
from configurations.runtime
}
jar{
dependsOn copyToLib
manifest {
attributes 'Main-Class': 'com.mypackage.MyPdfMain'
// attributes 'Class-Path': configurations.compile.collect { it.getName() }.join(' ')
}
}
wie Sie habe ich eine Aufgabe sehen kann den ganzen de kopieren pendecies Gläser in Builds/libs/lib
Aufgabe copyToLib (Typ: Copy) { in "$ builddir/libs/lib" von configurations.runtime }
und stellen jar { DependsOn copyToLib }
aber der Fehler ist immer noch der gleiche.
Ich denke, es sollte ein Klassenpfadfehler sein, aber ich weiß nicht, wie und wo der Klassenpfad in Gradle gesetzt werden soll. Wie kann ich mein Projekt vom Terminal aus ausführen?
Wenn die ‚Anwendung‘ Plugin Teil half, können Sie meine Antwort vote up ;-) – gaganbm
Ok. Ich habe dich gerade gewählt, aber leider habe ich weniger als 15 Rufpunkte, also denke ich, dass niemand meine Stimme sehen kann. – Mavek