elasticsearch &引用;未解决的要求:进口包装“;对于不在我的build.gradle中的模块
我想在Liferay 7 SP4 FP30模块中使用Elasticsearch的客户端Java类,因此我编写了以下
elasticsearch &引用;未解决的要求:进口包装“;对于不在我的build.gradle中的模块,
elasticsearch,gradle,liferay,osgi,
elasticsearch,Gradle,Liferay,Osgi,我想在Liferay 7 SP4 FP30模块中使用Elasticsearch的客户端Java类,因此我编写了以下build.gradle: dependencies { compileOnly group: "com.liferay", name: "com.liferay.portal.search.elasticsearch", version: "2.1.14" compileOnly group: "com.liferay", name: "org.elasticsea
build.gradle
:
dependencies {
compileOnly group: "com.liferay", name: "com.liferay.portal.search.elasticsearch", version: "2.1.14"
compileOnly group: "com.liferay", name: "org.elasticsearch", version: "2.2.0.LIFERAY-PATCHED-1"
compileOnly group: "biz.aQute.bnd", name: "biz.aQute.bndlib", version: "3.1.0"
compileOnly group: "com.liferay", name: "com.liferay.osgi.util", version: "3.0.0"
compileOnly group: "com.liferay", name: "com.liferay.portal.spring.extender", version: "2.0.0"
compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.0.0"
compileOnly group: "com.liferay", name: "com.liferay.portal.security.audit.api", version: "2.0.0"
compileOnly group: "com.liferay", name: "com.liferay.portal.configuration.metatype", version: "2.0.0"
compileOnly group: "org.osgi", name: "org.osgi.compendium", version: "5.0.0"
}
。。。以及一个Java类,其中包含import com.liferay.portal.search.elasticsearch.connection.ElasticsearchConnectionManager等代码
和Client-Client=elasticsearchConnectionManager.getClient()代码>
它建造得很好
但当我尝试启动模块时,会发生以下错误:
org.osgi.framework.BundleException: Could not resolve module: mymodule [548]
Unresolved requirement: Import-Package: com.liferay.portal.search.elasticsearch.connection
为什么会这样?我的build.gradle
没有提到以.connection
结尾的模块,我对Liferay和gradle不熟悉,但我已经与OSGi(apache felix)和maven合作了很长时间。错误消息表示您的包使用包com.liferay.portal.search.elasticsearch.connection
,但运行时环境没有导出该包的包。有问题的包包含在build.gradle中提到的第一个依赖项中,但它没有导出。如果愿意,您可以打开bundle jar并通过从下载查看其manifest.mf
由于该包没有导出(仅com.liferay.portal.search.elasticsearch.settings
is),因此我假设这是一个信号,表明它不适合外部使用。所以也许你应该检查一下是否有其他的方法来做你想做的事
从使用第三方库的角度来看,您似乎正在尝试将库扩展到您的模块中。如果您仍然需要使用.connection
软件包,也许您可以尝试嵌入策略。@gjoranv是正确的,只是因为您正在升级。构建它并不意味着它将在您的环境中
首先,在Java的传统意义上,错误是由于缺少使用过的包。因此,您将需要一个模块,由一个jar文件表示,使这个包公开
由于liferay在弹性搜索方面非常依赖于版本,并且依赖于意外版本,因此您可以使用未公开的软件包,并通过Uber模块强制公开
如果您感到幸运,还可以使用compileInclude,而不是compileOnly。以这种方式包含库可能会造成混乱,因为它会将jar嵌入到jar中并公开所有包
另一种可能性是嵌入jar,并在包中设置类路径,这种可能性通常要小得多。为此,您只需要将依赖项声明为compile,并在bnd.bnd文件中添加类路径。(听起来比实际困难,这应该是一个琐碎的过程)
另一个需要注意的问题是与ElasticSearch和liferay部署的一致性:2.2-2.4.x,但这只是因为如果您的对象被其他捆绑包使用或与旧ES接口时,您可能会遇到类转换异常和API不匹配
嵌入示例:
格拉德尔·邦德
compile "org.apache.httpcomponents:httpclient"
compile "org.apache.httpcomponents:httpcore"
bnd.bnd
-includeresource: lib/httpclient.jar=httpclient-4.5.3.jar,\
lib/httpcore.jar=httpcore-4.4.6.jar
Bundle-ClassPath: ., lib/httpclient.jar, lib/httpcore.jar
我认为compileInclude
在Liferay 7环境中不可用,还是我弄错了?我得到找不到方法compileInclude
。应该是这样,您是否可以验证您是否正在使用当前版本的工作区。即使是liferay的源代码也充满了这些.buildscript{dependencies{classpath“com.liferay:com.liferay.gradle.plugins.workspace:latest.release{repositories{maven{url”“}}