我是 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-dependency 和 https://liferay.dev/blogs/-/blogs/gradle-compile-vs-compileonly-vs-compileinclude 并尝试了选项1(在tomcats lib目录中添加数据库驱动程序),但这似乎仍然不起作用(在这种情况下,找不到驱动程序)。
只是不确定如何将 Firebird jdbc 驱动程序包含在 OSGi 包中...或者我是否必须添加任何传递依赖项(如果是这样,我如何知道它们是什么以及如何最好地添加它们)。
只是想知道是否有人在 Liferay 服务应用程序中部署了 Firebird JDBC 驱动程序。
错误的重要部分是“未解决的要求:导入包:com.sun.jna_ [Sanitized]”。 Jaybird 本身不提供 OSGi 元数据。我没有使用 OSGi 的经验,但我猜由于缺乏元数据,它会扫描类文件并注意到 Jaybird 使用 JNA 并且没有提供 JNA 的依赖项。实际上,这是 Jaybird 的可选依赖项(仅当您使用本机或嵌入式连接时才需要它,这不是默认的),但 OSGi 不知道这一点并要求您声明它。
将依赖项
compileInclude 'net.java.dev.jna:jna:5.5.0'
添加到您的 build.gradle 应该可以解决问题。
(注意:这个答案是基于我之前的评论和cfnz的评论)