elasticsearch &引用;未解决的要求:进口包装“;对于不在我的build.gradle中的模块,elasticsearch,gradle,liferay,osgi,elasticsearch,Gradle,Liferay,Osgi" /> elasticsearch &引用;未解决的要求:进口包装“;对于不在我的build.gradle中的模块,elasticsearch,gradle,liferay,osgi,elasticsearch,Gradle,Liferay,Osgi" />

elasticsearch &引用;未解决的要求:进口包装“;对于不在我的build.gradle中的模块

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

我想在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.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”“}}