我正在使用 Gradle 设置一个使用 itext 7 生成 pdf 文件的测试项目。
如果我在 Netbeans IDE 中运行我的主类,一切正常;创建了一个“结果”文件夹,在其中我可以找到生成的 pdf。
但是如果我清理并构建项目,进入 project_folder/build/libs 并尝试执行 java -jar mypdfproject.jar 文件我得到这个错误 => java.lang.NoClassDefFoundError: com/itextpdf/kernel/pdf/PdfWriter
这是我的主要课程(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();
}
}
这是 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(' ')
}
}
如您所见,我创建了一个任务来将所有依赖项 jar 复制到 builds/libs/lib
task copyToLib( type: Copy ) { into "$buildDir/libs/lib" from configurations.runtime }
并设置 jar{ dependsOn copyToLib }
但错误仍然相同。
我认为这应该是一个类路径错误,但我不知道如何以及在哪里设置 Gradle 中的类路径。如何从终端运行我的项目?