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

fzsnzjdm  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(719)

我正在尝试向liferay添加一个外部库-orika lib。
我在build.gradle中添加了gradle依赖项,如下所示:

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

我使用compileinclude是为了让模块也有依赖关系。
lib在本地运行得很好-我已经用类内的一个main方法对其进行了测试,但是当我部署到portal时,收到以下错误:

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

这似乎是由于运行时缺少lib造成的,但不太清楚的是,如果在内部运行lib,为什么会在构建时添加这些依赖项 public static main 一切正常吗?此外,我还检查了eclipse中下载的libs gradle,以查看是否有任何带有 com.google.commom.base 我什么也没找到。
因此,由于在构建时完成了其他一些步骤,我检查了生成的jar中的manifest.mf(例如eclipse workspace<your\u project\u name>\modules<your\u module\u name>\build\libs),然后删除了条目 com.google.commom.base 从文件。错误消失了,但发生了另一个错误:

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

所以,问题是-为什么要添加这些依赖项,如何删除或满足它们考虑到我在eclipse中没有它们,那么我会放弃它们。

wfsdck30

wfsdck301#

经过几个小时的研究,我得出以下结论:
对于外部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 -我已经检查了回购细节,以找出这一点,并从那里得到的信息(例如:从这里)。那么,在加入 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,\
  *

注意:你可能会发现阅读更多关于我在这里和这里写的东西很有用。

相关问题