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

Groovy无法加载类

晏鸿畅
2023-03-14

我正试图用PDFBox和Groovy来搞乱一下。我试图使用PDType1Font类的getStringWidth()方法计算字符串的宽度。

我的问题是,每次编译和运行代码时,都会出现这样一个错误:

Error:Groovyc: java.lang.RuntimeException: java.lang.NoClassDefFoundError: Unable to load class org.apache.pdfbox.pdmodel.font.PDType1Font due to missing dependency org/apache/fontbox/type1/DamagedFontException
    at org.codehaus.groovy.control.CompilationUnit.convertUncaughtExceptionToCompilationError(CompilationUnit.java:1091)
    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1069)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546)
    at org.jetbrains.groovy.compiler.rt.GroovyCompilerWrapper.compile(GroovyCompilerWrapper.java:62)
    at org.jetbrains.groovy.compiler.rt.DependentGroovycRunner.runGroovyc(DependentGroovycRunner.java:115)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jetbrains.groovy.compiler.rt.GroovycRunner.intMain2(GroovycRunner.java:135)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jetbrains.jps.incremental.groovy.InProcessGroovyc.runGroovycInThisProcess(InProcessGroovyc.java:156)
    at org.jetbrains.jps.incremental.groovy.InProcessGroovyc.access$000(InProcessGroovyc.java:51)
    at org.jetbrains.jps.incremental.groovy.InProcessGroovyc$1.call(InProcessGroovyc.java:85)
    at org.jetbrains.jps.incremental.groovy.InProcessGroovyc$1.call(InProcessGroovyc.java:82)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

代码如下:

import org.apache.pdfbox.pdmodel.font.PDType1Font

float getStringWidth(String text) {
        PDType1Font font = new PDType1Font(PDType1Font.HELVETICA)
        float width = font.getStringWidth(text) / 1000 * 8;

        return width
    }

为了清晰起见,我删除了代码中所有不相关的部分。

问题出在哪里?

更新:我在IntelliJ中搜索了一下如何将外部jar添加到我的类路径,发现我需要转到项目结构-

我试着这样做:

但我仍然收到上面描述的错误消息。

共有2个答案

西门品
2023-03-14

Java约定意味着您必须在类中声明代码。

这意味着每个方法都应该在一个类中定义,并具有与其包装的方法相关的名称。

例如,您可以使用以下代码结构:

import org.apache.pdfbox.pdmodel.font.PDType1Font

class StringUtils {

    float getStringWidth(String text) {
        PDType1Font font = new PDType1Font(PDType1Font.HELVETICA)
        float width = font.getStringWidth(text) / 1000 * 8;

        return width
    }
}

在上面的示例中,StringUtils是JVM正在查找的类名。

通过使用该约定,代码被编译成字节码并创建相关的jar,这可能会解决您的错误。

注意:确保PATH ENV变量包括代码工作区目录和所有相关的第三方目录。

漆雕原
2023-03-14

根据OP对项目结构的快照,他使用了这些依赖关系:

这是行不通的,pdfbox和fontbox的版本必须匹配(正如Tilman所说)。特别是第2版引入了经过大修的API。因此,PDFBox版本为2.0。x很难与FONTBox 1.8版一起正常工作。y

 类似资料:
  • 由于我升级到android studio 3.0.1,我无法继续使用我的应用程序。Gradle引发以下错误:Gradle同步问题 错误:无法加载类“groovy.lang.GroovyObject”。此意外错误的可能原因包括: 有什么建议吗?非常感谢你。

  • 问题内容: 当我尝试运行Hibernate时,我在控制台中收到以下消息。 但是hibernate状态很好。我的项目有什么问题吗?我使用Eclipse(Helios),Hibernate 3.6.8。我使用这些jar文件:antlr-2.7.6,commons- collections-3.1,dom4j-1.6.1,hibernate3,hibernate- jpa-2.0-api-1.0.1.F

  • 我试图从groovy脚本调用Oracle存储过程,结果出现了标题中的错误。 以下是我的剧本: 当我删除(它们是OUT parameters)参数时,脚本将被编译,所以我认为它们有问题······ 我找到了一个让我的程序工作的解决方案: 但我想有一个更好的方法来传递这些SQL参数... PS:我正在使用Groovy-2.4.13,并尝试了Oracle JDK9和1.8.0_151

  • 我的系统中安装了JMeter 5.2.1。当我尝试执行下面的代码时,我遇到了这个错误。 响应消息:javax。剧本ScriptException:组织。科德豪斯。非常棒。控制MultipleComplationErrorsException:启动失败:类生成期间出现常规错误:java。lang.NoClassDefFoundError:无法加载类com。蔚蓝色的消息传递。事件中心。由于缺少依赖关系

  • 这是密码。没有警告,文件正常。

  • 背景: 我最近开始玩Groovy,并试图在eclipse插件中嵌入groovy脚本引擎,让我的客户在我基于eclipse的产品中开发自己的GUI扩展。这与codehaus网站上发布的成功故事非常相似。 问题 当尝试加载groovy类(“SwtGuBuilder”)时,Groovy脚本(让我们称之为“main_eclipse.groovy”)从GroovyScriptEngine抛出的eclipse