未解决的要求:导入包:com.google.common.base

Posted

技术标签:

【中文标题】未解决的要求:导入包:com.google.common.base【英文标题】:Unresolved requirement: Import-Package: com.google.common.base 【发布时间】:2021-03-04 09:11:10 【问题描述】:

我正在尝试向 Liferay 添加一个外部库 - Orika 库。

我在 build.gradle 中添加了 Gradle 依赖项,如下所示:

compileInclude group: 'ma.glasnost.orika', name: 'orika-core', version: '1.5.4'

我使用 compile Include 是为了让模块也附加依赖项。

该库在本地运行良好 - 我已经使用类中的 main 方法对其进行了测试,但是当我部署到 Portal 时,我收到以下错误:

org.osgi.framework.BundleException: Could not resolve module: <YourModuleName> [2755]_  Unresolved requirement: Import-Package: com.google.common.base_ [Sanitized]

这似乎是由于运行时缺少库引起的,但不清楚的是,如果我在 public static main 内运行它时,为什么会在构建时添加这些依赖项?它按预期工作? 另外,我检查了我的 Eclipse 中下载的 libs Gradle,看看是否有任何带有 com.google.commom.base 的包,但我没有找到。

所以,因为在构建时完成了一些其他步骤,所以我检查了生成的 jar 中的 MANIFEST.MF(例如 eclipse-workspace\modules\build\libs),然后删除条目 @ 987654325@ 来自文件。错误消失了,但又发生了一个错误:

org.osgi.framework.BundleException: Could not resolve module: <your_module_name> [2755]_  Unresolved requirement: Import-Package: com.sun.jdi_ [Sanitized]

所以,问题是 - 为什么要添加这些依赖项,我怎样才能删除或满足它们? - 鉴于我在 Eclipse 中没有它们,那么我会去删除它们.

【问题讨论】:

【参考方案1】:

这是我花了几个小时后得出的结论:

对于外部 jar,compileInclude 策略的行为与我预期的不同 - 可能是一个很好的线索,但我采用了下面详述的步骤。

在我的情况下,在包含依赖项时仅使用 compileOnly 会更好。 所以,第一步 - 将以下内容添加到您的build.gradle

compileOnly group: 'ma.glasnost.orika', name: 'orika-core', version: '1.5.4'

第二步中,您必须在bnd.bnd 文件中指明外部jar 需要的其他依赖项。就我而言(Orika lib),它需要以下列表:commons-compiler-3.0.8.jar,janino-3.0.8.jar,java-sizeof-0.0.5.jar,javassist-3.24.0-GA.jar ,paranamer-2.8.jar,@slf4j-api-1.7.26.jar - 我已经检查了 repo 详细信息以便找出它并从那里获取信息(例如:来自here)。所以,添加到build.gradle 后我要做的就是在bnd.bnd 中添加以下行:

Include-Resource: @orika-core-1.5.4.jar,@commons-compiler-3.0.8.jar,@janino-3.0.8.jar,@java-sizeof-0.0.5.jar,@javassist-3.24.0-GA.jar,@paranamer-2.8.jar,@slf4j-api-1.7.26.jar

最后一步是排除构建过程放置在MANIFEST.MF 文件中的包 - 我在这里谈论的是以Unresolved requirement ... 开头的问题。为了知道它不需要什么,我部署了多次,每次都将所需的包添加到Import-Package 列表(这是bnd.bnd 文件中的另一个属性)。最终名单是:

Import-Package: \
  !com.sun.jdi.*,\
  !com.sun.tools.attach,\
  !com.google.common.base,\
  !org.slf4j.impl,\
  *

注意:阅读更多关于我写的 here 和 here 的内容可能会对您有所帮助。

【讨论】:

以上是关于未解决的要求:导入包:com.google.common.base的主要内容,如果未能解决你的问题,请参考以下文章

本地打字稿包的导入未解决

Unity3D,导入包的代码未显示在 Visual Studio 中

HttpCannary根证书未安装,无法抓取SSL,TLS加密数据包问题解决方法

HttpCannary根证书未安装,无法抓取SSL,TLS加密数据包问题解决方法

HttpCannary根证书未安装,无法抓取SSL,TLS加密数据包问题解决方法

go导入github包后无法导入本地包