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

Vic*_*tor 2 java deployment orika liferay-7

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

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

compileInclude group: 'ma.glasnost.orika', name: 'orika-core', version: '1.5.4'
Run Code Online (Sandbox Code Playgroud)

我正在使用编译包含,以便模块也附加依赖项。

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

org.osgi.framework.BundleException: Could not resolve module: <YourModuleName> [2755]_  Unresolved requirement: Import-Package: com.google.common.base_ [Sanitized]
Run Code Online (Sandbox Code Playgroud)

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

因此,因为构建时完成了其他一些步骤,所以我检查了生成的 jar 中的 MANIFEST.MF(例如 eclipse-workspace<your_project_name>\modules<your_module_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]
Run Code Online (Sandbox Code Playgroud)

所以,问题是 -为什么添加这些依赖项以及如何删除或满足它们?- 鉴于我在 Eclipse 中没有它们,那么我会放弃它们。

Vic*_*tor 5

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

对于外部罐子,该compileInclude策略的表现并不像我预期的那样 - 也许是一个很好的引导,但我按照下面详细说明的步骤进行了操作。

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

compileOnly group: 'ma.glasnost.orika', name: 'orika-core', version: '1.5.4'
Run Code Online (Sandbox Code Playgroud)

第二步中,您必须在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
Run Code Online (Sandbox Code Playgroud)

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

Import-Package: \
  !com.sun.jdi.*,\
  !com.sun.tools.attach,\
  !com.google.common.base,\
  !org.slf4j.impl,\
  *
Run Code Online (Sandbox Code Playgroud)

注意:您可能会发现阅读更多有关我在此处此处所写内容的内容很有用。