运行模块/项目时的芭蕾舞女演员java.lang.ClassNotFoundException

时间:2020-03-06 14:54:00

标签: wso2 interop ballerina ballerina-java-interop

我正在尝试通过将由Java类代码组成的jar导入芭蕾舞女演员,并尝试通过.bal文件在Java类中调用构造函数和方法来尝试Ballerina和Java互操作性。

当我运行.bal文件时,这工作得很好。

ballerina run <balfile>

但是,当我运行整个项目模块时,会出现以下异常情况。

enter code here
error: java.lang.NoClassDefFoundError message=com/example/wrapperpackage/Wrapper cause=error java.lang.ClassNotFoundException message=com.example.wrapperpackage.Wrapper
        at cceackh.implementation:wrapperconstructor(java-test.bal:14)
           cceackh.implementation:main(java-test.bal:42)
PS C:\Users\cceackh\java_ballerina_interop\ballerina_interop>

我已将jar文件保存在BallerinaHome / distributions / bre / lib文件夹中。

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您已经阅读了指南How to Structure Ballerina Code。使用ballerina build <root-module>编译Ballerina程序时,编译器会创建一个可执行的jar文件。在这种情况下,芭蕾舞女演员编译器将生成一个自包含的jar文件。

如果在Ballerina中使用Java互操作性,则需要在Ballerina.toml文件中指定所有jar文件,以便编译器可以将它们打包在可执行jar文件中。

在这里,您可以在Ballerina.toml中指定jar文件依赖项。

[platform] 
target = "java8" 

[[platform.libraries]] 
# Absolute or relative path to the jar file
path = "<path-to-jar-file-1>" 
# A comma-separated list of Ballerina module names that depends on this jar
modules = ["<ballerina-module-1>"]

[[platform.libraries]] 
path = "<path-to-jar-file-2>" 
modules = ["<ballerina-module-1>","<ballerina-module-2>"]
[platform] 
target = "java8" 

[[platform.libraries]] 
    path = "./javalibs/mysql-connector-java-<version>.jar" 
    modules = ["ordermgt"]