我写了一个Liferay模块并成功部署了它。
然后我在build.gradle
的dependencies
部分添加了这一行:
compileOnly group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
运行./gradlew eclipse
后,我可以毫无问题地在 Eclipse 中使用库。但部署失败:
12:29:35,454 WARN [fileinstall-/home/nico/liferay/osgi/modules][org_apache_felix_fileinstall:103] Error while starting bundle: file:/home/nico/liferay-dxp-digital-enterprise-7.0-sp3/osgi/modules/de.nico.mymodule-1.0.0.jar
org.osgi.framework.BundleException: Could not resolve module: de.nico.mymodule [1085]_ Unresolved requirement: Import-Package: org.apache.http; version="4.5.3"_ [Sanitized]
at org.eclipse.osgi.container.Module.start(Module.java:429)
at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:402)
at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1253)
at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1225)
at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:512)
at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:361)
at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:312)
我不知道为什么它在寻找org.apache.http
而不是org.apache.httpcomponents
.
这是我的bnd.bnd
:
Bundle-SymbolicName: de.nico.mymodule
Bundle-Version: 1.0.0
Liferay-Require-SchemaVersion: 1.0.0
如何调查这个问题?
我不想手动下载/添加 JAR。
in your bnd.bnd
添加此代码..
Import-Package:
!org.apache.*,
*
进一步的调查将从异常消息开始。它说运行时不存在以下要求:
Import-Package: org.apache.http; version="4.5.3">
我假设它是以下之一:
- 您没有将httpcomponents(或您需要的版本..请参阅语义版本控制(库部署到Liferay(编译工作,而部署失败(
- httpcomponents可能不会打包为OSGi捆绑包。在这种情况下,您必须决定如何使代码可用。更多信息的良好起点是官方文档(感谢Andrea,从评论中推广这一点(和David Nebinger的博客文章
如何将这些依赖项添加到Liferay的运行时取决于您。如果依赖项是 OSGi 捆绑包,则可以直接下载和部署它们。如果它们不是 OSGi 捆绑包,请按照链接文章中描述的技术之一进行操作。