java.lang.NoClassDefFoundError:com / itextpdf / kernel / pdf / PdfWriter itext and gradle

java.lang.NoClassDefFoundError: com/itextpdf/kernel/pdf/PdfWriter itext and gradle

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

如果我在NetBeans IDE中运行我的主类,一切都会正常工作;创建一个"results"文件夹,在其中我可以找到生成的PDF。

但是如果我清理并构建这个项目,进入ProjtTyBase/Buff/LIBS,并尝试执行Java-JavaMyPDFProjut.jar文件,我得到这个错误=java. Lang.NoCuffDeFuffNoDror:COM/ITTEXPDF/NoR/PDF/PDFIGFER。

这是我的主班(mypdfman.class)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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中。

任务copytolib(类型:copy){进入"$buildDir/libs/lib"从configurations.runtime}

并设置jar {依赖copytolib}

但是错误仍然是一样的。

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


谢谢你的帮助。使用应用程序插件是一个很好的解决方案!此外,我还找到了另一种方法来解决改变我的身材。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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(' ')
    }
}


我从https://jar-download.com/download-handling.php下载并添加到构建路径kernel-7.1.4 jar和styled-xml-parser.jar及其所有依赖项中,这消除了错误。注意:如果在支持maven的脱机环境中工作,可以通过从项目pom.xml文件所在的位置运行mvn dependency:go offline命令来解决这个问题。


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

另一种方法是,您可以在build.gradle中应用"application"插件:

1
2
3
4
5
6
7
8
9
10
11
group 'Hello-World'
version '1.0-SNAPSHOT'

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

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

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

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