OSGI com.sun.image 使用 gradle 导入
OSGI com.sun.image import using gradle
在我的项目中,我使用以下依赖项在 gradle 模块中构建验证码并将其部署到 liferay 7
dependencies{
compile group: 'com.octo.captcha', name: 'jcaptcha', version: tcVersion('com.octo.captcha')
// compile group: 'com.octo.captcha', name: 'jcaptcha-api', version: '2.0-alpha-1'
compile group: 'com.jhlabs', name: 'filters', version: '2.0.235-1'
}
问题是当我尝试部署我的包时出现以下错误
org.osgi.framework.BundleException: Could not resolve module: com.myproject.vaadin.util [810]
Unresolved requirement: Import-Package: com.sun.image.codec.jpeg
显然,com.sun.image.codec.jpeg
正在被使用。它在 jdk 中的 rt.jar 中,所以我不需要额外包含它,但似乎我应该包含它。在 gradle 中,项目编译成功并且包被部署到 gogo shell 但是当我尝试启动包时我得到了描述的错误
您需要为 OSGi 框架配置 boot delegation 以包含 com.sun.image.codec.jpeg 包。
您的依赖项在您的模块的运行时不可用。如前所述,在 Gradle 中构建时它是可用的,因为它在您的构建类路径中。然而在运行时,你的模块声明它需要导入这个包来自一个不存在的OSGi包。
您可以在此处探索一些选项。您可以使用 compileInclude 将库包含在 Gradle(Liferay 工作区)中的胖 Jar 中;使用 bnd 文件作为资源包含并设置 bundle 的类路径以包含 jar;构建一个 uber 模块,将你需要的包携带到它的 on bundle 中的运行时;或者找到一个无需构建额外内容即可导出它的包。
底线:您需要使包在运行时作为导出包可用。
在我的项目中,我使用以下依赖项在 gradle 模块中构建验证码并将其部署到 liferay 7
dependencies{
compile group: 'com.octo.captcha', name: 'jcaptcha', version: tcVersion('com.octo.captcha')
// compile group: 'com.octo.captcha', name: 'jcaptcha-api', version: '2.0-alpha-1'
compile group: 'com.jhlabs', name: 'filters', version: '2.0.235-1'
}
问题是当我尝试部署我的包时出现以下错误
org.osgi.framework.BundleException: Could not resolve module: com.myproject.vaadin.util [810]
Unresolved requirement: Import-Package: com.sun.image.codec.jpeg
显然,com.sun.image.codec.jpeg
正在被使用。它在 jdk 中的 rt.jar 中,所以我不需要额外包含它,但似乎我应该包含它。在 gradle 中,项目编译成功并且包被部署到 gogo shell 但是当我尝试启动包时我得到了描述的错误
您需要为 OSGi 框架配置 boot delegation 以包含 com.sun.image.codec.jpeg 包。
您的依赖项在您的模块的运行时不可用。如前所述,在 Gradle 中构建时它是可用的,因为它在您的构建类路径中。然而在运行时,你的模块声明它需要导入这个包来自一个不存在的OSGi包。
您可以在此处探索一些选项。您可以使用 compileInclude 将库包含在 Gradle(Liferay 工作区)中的胖 Jar 中;使用 bnd 文件作为资源包含并设置 bundle 的类路径以包含 jar;构建一个 uber 模块,将你需要的包携带到它的 on bundle 中的运行时;或者找到一个无需构建额外内容即可导出它的包。
底线:您需要使包在运行时作为导出包可用。