Java Liferay未解决的要求

Java Liferay未解决的要求,java,eclipse,gradle,portlet,liferay-7,Java,Eclipse,Gradle,Portlet,Liferay 7,我需要在另一个Java项目的liferay模块项目中使用一些类。我正在使用gradle,当我部署我的应用程序时,我得到了未解决的需求错误,即使gradle编译了我的jar文件 以下是我迄今为止所做的,我的gradle.build: compile files('libs/p01-jdbc.jar') compileOnly group: "org.mql.biblio.dao.jdbc", name: "p01-jdbc", version: "default" 我的bnd文件: Bund

我需要在另一个Java项目的liferay模块项目中使用一些类。我正在使用gradle,当我部署我的应用程序时,我得到了未解决的需求错误,即使gradle编译了我的jar文件

以下是我迄今为止所做的,我的gradle.build:

compile files('libs/p01-jdbc.jar')  
compileOnly group: "org.mql.biblio.dao.jdbc", name: "p01-jdbc", version: "default"
我的bnd文件:

Bundle-Name: Inter_Portlet_Communication
Bundle-SymbolicName: Inter_Portlet_Communication
Bundle-Version: 1.0.0
Export-Package: \
    com.mql.ipc.constants
Include-Resource: @p01-jdbc.jar
还有我的进口货

import org.mql.biblio.dao.jdbc.DataBase;
import org.mql.biblio.dao.jdbc.DataSource;
import org.mql.biblio.dao.jdbc.MySQLDataSource;

注:我正在编译的jar也使用了一个本地mysql.jar(在一个名为lib的文件夹中)。

找到了我问题的答案,我不得不使用compileInclude而不是compile。我还需要为依赖项jar所需的另一个jar添加一行:

compileInclude files('libs/p01-jdbc.jar') 
compileInclude files('libs/mysql.jar') //This jar is used by the first one

你不应该盲目地
编译所有东西,直到“它起作用”。检查您所做的工作——最好将依赖项也部署到OSGi容器中——以防它们也是OSGi捆绑包。或者,也可以制作OSGi捆绑包

如果p01-jdbc.jar已经是一个OSGi包:将其部署到Liferay。如果它是一个自定义库,但还不是一个OSGi捆绑包,我更愿意将其制作成一个,然后参见上文


在数据库驱动程序的情况下,这可能会在以后影响到您,因为mysql驱动程序通常也是全局部署的,您可能会遇到无法相互替换的模糊类,或者不同版本中的相同类,来自不同的类加载器。

您是否尝试过使用
compileInclude
而不是
compileOnly
?你知道
compile
compileOnly
compileInclude
之间的区别吗?如果没有,你应该看看这篇博文:使用compileInclude解决了这个问题。我实际上尝试了OSGi方法,但没有成功。唯一的方法是将两个jarsI都编译成compileInclude。jarsI稍微重新表述一下:
compileInclude
是第一种适合您的方法。请注意,compileInclude可传递地包含所有必需的依赖项:它可能与未部署到OSGi运行时的遗漏的可传递依赖项一样简单。如果compileInclude对您有效,这没关系,但我将把这个答案保留在这里,以向其他人暗示,如果他们发现问题和答案与自己的问题有关,那么这不是更好的选择。Hi@OlafKock-我写这篇文章是为了得到一个提示:)-尝试使用Orika jar作为OSGI组件。我使用了这里的响应:my.bnd文件包含一个类路径,其中包含核心orika jar及其依赖项。我可以部署它,但在运行时,我会收到一个NoClassDef,但类就在那里。或者我收到疯狂的类播异常。当我从这里使用选项3时,我没有错误。创建OSGI时必须考虑的任何重要方面?