我正在尝试向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中没有它们,那么我会放弃它们。
1条答案
按热度按时间wfsdck301#
经过几个小时的研究,我得出以下结论:
对于外部jar
compileInclude
战术并没有像我预期的那样-也许是一个很好的领先优势,但我按照下面详细的步骤去做。在我的情况下,只使用
compileOnly
当包含依赖性时更好。因此,第一步-将以下内容添加到build.gradle
:在第二步中,您必须在
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
:最后一步是排除构建过程放置在
MANIFEST.MF
文件-我在这里谈的是从Unresolved requirement ...
. 为了知道什么是不需要的,我部署了多次,每次都将所需的包添加到Import-Package
列表(这是中的另一个属性)bnd.bnd
文件)。最后的名单是:注意:你可能会发现阅读更多关于我在这里和这里写的东西很有用。