当前位置: 首页 > 知识库问答 >
问题:

Java语言lang.NoClassDefFoundError:com/itextpdf/kernel/pdf/PdfWriter itext和gradle

高溪叠
2023-03-14

我正在使用Gradle设置一个使用itext7生成pdf文件的测试项目。

如果我在Netbean IDE中运行我的主类,一切正常;创建了一个“结果”文件夹,我可以在其中找到生成的pdf。

但是如果我清理并构建项目,进入project_folder/build/libs并尝试执行java-jarmypdfproject.jar文件,我得到这个错误=

这是我的主课(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();
    }
}

这就是构建。格拉德尔

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复制到构建/libs/lib中

任务copyToLib(类型:Copy){从configurations.runtime}复制到“$buildDir/libs/lib”

并设置jar{dependsOn copyToLib}

但误差仍然是一样的。

我认为这应该是一个类路径错误,但是我不知道如何以及在Gradle中设置类路径。如何从终端运行我的项目?

共有2个答案

那昊
2023-03-14

您正在将依赖jar复制到lib目录,并创建应用程序jar。您需要在命令行的类路径中定义它。参考此

另一种方法可能是,您可以在build.gradle中应用“应用程序”插件:

group 'Hello-World'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'application'

jar{
    manifest {
        attributes 'Main-Class': 'com.mypackage.MyPdfMain'
    }
}

然后,您可以执行gradle build,它应该创建目录

您会发现您的应用程序压缩在该目录中,您可以从bin目录中解压并执行shell文件(解压后您将看到该目录。解压后的目录将在bin目录中有一个外壳脚本。)。

阙庆
2023-03-14

谢谢你的帮助。使用应用程序插件是一个很好的解决方案!此外,我找到了另一种方法来解决更改我的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 copyDependenciesIntoBuildLibsDir( type: Copy ) {
    from configurations.runtime
    into "$buildDir/libs/lib"
}

jar{ dependsOn copyDependenciesIntoBuildLibsDir
    manifest {
        attributes 'Main-Class': 'com.mypackage.MyPdfMain'
        attributes 'Class-Path': configurations.runtime.collect { "lib/" + it.getName()}.join(' ')
    }
}
 类似资料:
  • 我是Java新手,我正在研究从html生成pdf。因此,我正在使用iText7,我可以通过PdfWriter和Document生成一个普通的pdf文件,但我不能使用html2pdf。 这是我的Pom。xml 这是我的java代码: 错误在线上: 我阅读了其他与 Java语言lang.NoClassDefFoundError 他们说我需要添加io和slf4j依赖项,但是错误仍然存在。提前谢谢。

  • 我正在尝试编写一个Word-to-PDF转换器,并将Java代码以Java小程序的形式构建到HTML网站中。 我使用了http://java.worldbestlearningcenter.com/2013/07/word-to-pdf-converter.html.的Java代码。代码本身似乎工作得很好,当我在Eclipse中运行程序时,我确实可以将word文档转换为PDF。现在我想将该代码添加

  • 我在这里搜索了很多关于这方面的文章。我找到了一些,但没有一个能满足我的需要。那么,让我们开始吧。我正在ITextPDF中创建一个文件,之后需要打印。文件的内容是动态的。因此,PDF有时会将内容拆分为多个页面,当我打印时,页面之间的间隙会显示在纸上,并留有很大的空间(我需要在一个页面中使用热敏打印机打印)。所以,我花了几天时间试图找到任何解决方案,但还是找不到。对于打印,我使用PDFBox,它工作得

  • Go 语言程序组成 和C语言程序一样,Go语言程序也是由众多函数组成的 和C语言程序一样,程序运行时系统会自动调用名称叫做 main 的函数 和C语言程序一样,如果一个程序没有主函数,则这个程序不具备运行能力 和C语言程序一样,一个 Go 语言程序有且只能有一个主函数 Go 语言程序主函数定义格式 C 语言 main 函数格式 int main(int argc, const char * arg