在Liferay Dxp包中捆绑外部依赖项的问题

时间:2017-09-08 17:30:33

标签: liferay-dxp

您好,如果要添加第三方库,请按照文章https://dev.liferay.com/develop/tutorials/-/knowledge_base/7-0/adding-third-party-libraries-to-a-module#embedding-libraries-in-a-module进行操作。 现在,生成的bundle有一个lib目录,其中包含在build.gradle中配置的所有依赖项。 部署捆绑包时,会安装捆绑包的状态。当我尝试启动捆绑包时,我收到以下错误

org.osgi.framework.BundleException: Could not resolve module: com.test..api [564]
  Unresolved requirement: Import-Package: com.ibm.wsdl.extensions.soap

这甚至不是我在build.gradle中配置的任何依赖jar的传递依赖 你能帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

现在我可以开始捆绑了。

当我们在build.gradle文件中配置依赖项并执行gradle刷新时,gradle会下载所有依赖项(包括传递依赖项)。问题在于这些传递依赖性。 Gradle没有下载所有传递依赖项。它缺少几个罐子,我们必须在build.gradle中再次配置丢失的jar并进行gradle刷新。

找到丢失的罐子

在build.gradle中配置依赖项,执行gradle刷新和部署。 转到gogo shell并检查捆绑包。 现在捆绑包将部署并处于已安装状态。 尝试从gogo shell启动捆绑。 现在您将收到与Unresolved requirement:Import-Package: com.poi.extractor类似的错误 谷歌包,并尝试找出maven存储库中相应的jar。 在build.gradle中配置新jar。 继续相同的过程,直到捆绑被激活。

答案 1 :(得分:0)

在build.grade中添加以下脚本,将所有第三方依赖项包含到OSGi模块中,而不是一个接一个地手动添加。

bundle {
def runtime = project.configurations.runtime
runtime.resolve()
instruction 'Bundle-ClassPath', '.'
instruction 'Bundle-Activator', 'com.XXX.XXXXX.XXXX.ClassName'
runtime.resolvedConfiguration.resolvedArtifacts.each {
    def resrc = it.moduleVersion.id.name + '-' +
            it.moduleVersion.id.version + '.jar'      
    instruction 'Bundle-ClassPath', 'META-INF/lib/' + resrc
    instruction '-includeresource', 'META-INF/lib/' + resrc + '=' + it.file.path
   } 
}