Liferay OSGi 捆绑部署与 FirebirdSQL jdbc 驱动程序错误

问题描述 投票:0回答:2

我是 Liferay 7.x 的新手,我怀疑 OSGI 遇到了麻烦。

我正在尝试编写一个数据库身份验证器,它仅检查单独数据库中的用户。该数据库是 FirebirdSQL 数据库。

像这样在 build.gradle 中设置依赖项时

compileInclude group: 'org.firebirdsql.jdbc', name: 'jaybird', version: '4.0.9.java11'

当捆绑包尝试部署时出现的错误是:

2023-02-14 01:52:59.128 ERROR [fileinstall-directory-watcher][DirectoryWatcher:1173] Unable to start bundle: file:/home/me/Documents/IdeaProjects/liferay/labsys-authentication/bundles/osgi/modules/com.myapp.intranet.auth-1.0.0.jar
com.liferay.portal.kernel.log.LogSanitizerException: org.osgi.framework.BundleException: Could not resolve module: com.myapp.intranet.auth [1591]_  Unresolved requirement: Import-Package: com.sun.jna_ [Sanitized]
    at org.eclipse.osgi.container.Module.start(Module.java:444) ~[org.eclipse.osgi.jar:?]
    at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:428) ~[org.eclipse.osgi.jar:?]
    at com.liferay.portal.file.install.internal.DirectoryWatcher._startBundle(DirectoryWatcher.java:1156) [bundleFile:?]
    at com.liferay.portal.file.install.internal.DirectoryWatcher._startBundles(DirectoryWatcher.java:1189) [bundleFile:?]
    at com.liferay.portal.file.install.internal.DirectoryWatcher._startAllBundles(DirectoryWatcher.java:1130) [bundleFile:?]
    at com.liferay.portal.file.install.internal.DirectoryWatcher._process(DirectoryWatcher.java:1041) [bundleFile:?]
    at com.liferay.portal.file.install.internal.DirectoryWatcher.run(DirectoryWatcher.java:247) [bundleFile:?]

我看过 https://liferay.dev/blogs/-/blogs/osgi-module-dependencyhttps://liferay.dev/blogs/-/blogs/gradle-compile-vs-compileonly-vs-compileinclude 并尝试了选项1(在tomcats lib目录中添加数据库驱动程序),但这似乎仍然不起作用(在这种情况下,找不到驱动程序)。

只是不确定如何将 Firebird jdbc 驱动程序包含在 OSGi 包中...或者我是否必须添加任何传递依赖项(如果是这样,我如何知道它们是什么以及如何最好地添加它们)。

只是想知道是否有人在 Liferay 服务应用程序中部署了 Firebird JDBC 驱动程序。

liferay osgi firebird jaybird
2个回答
0
投票

错误的重要部分是“未解决的要求:导入包:com.sun.jna_ [Sanitized]”。 Jaybird 本身不提供 OSGi 元数据。我没有使用 OSGi 的经验,但我猜由于缺乏元数据,它会扫描类文件并注意到 Jaybird 使用 JNA 并且没有提供 JNA 的依赖项。实际上,这是 Jaybird 的可选依赖项(仅当您使用本机或嵌入式连接时才需要它,这不是默认的),但 OSGi 不知道这一点并要求您声明它。

将依赖项

compileInclude 'net.java.dev.jna:jna:5.5.0'
添加到您的 build.gradle 应该可以解决问题。

(注意:这个答案是基于我之前的评论和cfnz的评论)


0
投票
com.liferay.portal.kernel.log.LogSanitizerException: org.osgi.framework.BundleException

在部署服务 jar 时,我遇到了类似的异常,因此我在 event-user-registration-service-service 文件夹的 bnd.bnd 文件中添加了此导出(见下图),这解决了我的问题。 enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.