使用gradle导入OSGI com.sun.image

使用gradle导入OSGI com.sun.image,gradle,java-8,osgi,osgi-bundle,liferay-7,Gradle,Java 8,Osgi,Osgi Bundle,Liferay 7,Im我的项目我使用以下依赖项在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

Im我的项目我使用以下依赖项在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框架以包含com.sun.image.codec.jpeg包

您的依赖项在模块的运行时中不可用。如前所述,在Gradle中构建时,它是可用的,因为它位于构建类路径上。然而,在运行时,您的模块声明它需要从一个不存在的OSGi包导入这个包

您可以在这里探索一些选项。您可以使用compileInclude将库包含在Gradle(Liferay workspace)中的胖Jar中;使用bnd文件将包含作为资源,并将捆绑包的类路径设置为包含jar;构建一个uber模块,将您需要的包以其on捆绑包的形式传送到运行时;或者找到一个不需要构建额外内容就可以导出的包


一句话:您需要在运行时将该包作为导出包提供。

com.sun.image.codec.jpeg被JavaSE1.4中的标准API(javax.image)替换,并最终从JDK9中的JDK中删除。我知道这与您的问题无关,但您应该考虑使用标准API,以避免升级到JDK 9、10或更新版本时出现问题。