我是Liferay的新手。对于我的第一个项目,我需要创建一个使用第三方库的模块。 这个图书馆是由一所大学开发的,并不经常使用,所以它不在任何maven回购或任何东西上。因此,我将其复制到我的Liferay项目中,并且我试图弄清楚如何解决依赖性问题。 我阅读了无数的线程条目和博客,但我仍然有点困惑。
我希望有人能指出我正确的方向来解决我的问题。
模块的build.gradle
dependencies {
compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.0.0"
compileOnly group: "com.liferay.portal", name: "com.liferay.util.taglib", version: "2.0.0"
compileOnly group: "javax.portlet", name: "portlet-api", version: "2.0"
compileOnly group: "javax.servlet", name: "javax.servlet-api", version: "3.0.1"
compileOnly group: "jstl", name: "jstl", version: "1.2"
compileOnly group: "org.osgi", name: "osgi.cmpn", version: "6.0.0"
compile files('lib/openBIS-API-V3-16.05.7-r1522065804.jar')
}
settings.gradle
buildscript {
dependencies {
classpath group: "com.liferay", name: "com.liferay.gradle.plugins.workspace", version: "1.5.0"
classpath group: "net.saliman", name: "gradle-properties-plugin", version: "1.4.6"
}
repositories {
maven {
url "https://cdn.lfrs.sl/repository.liferay.com/nexus/content/groups/public"
}
}
}
apply plugin: "net.saliman.properties"
apply plugin: "com.liferay.workspace"
bnd.bnd
Bundle-Name: my-dbdisplayer-project
Bundle-SymbolicName: de.mpi.prototype.dbdisplayer
Bundle-Version: 1.0.0
Export-Package: \
de.mpi.prototype.dbdisplayer.constants,\
Conditional-Package: \
ch.*
Bundle-Classpath:\
.,\
lib/openBIS-API-V3-16.05.7-r1522065804.jar
-includeresource:\
lib/openBIS-API-V3-16.05.7-r1522065804.jar
使用刀片部署部署模块时的终端输出
BUILD SUCCESSFUL
Total time: 1.768 secs
stop 505
update 505 file:/home/liferay/MPI/liferay-prototype/modules/my-dbdisplayer-project/build/libs/de.mpi.prototype.dbdisplayer-1.0.0.jar
start 505
org.osgi.framework.BundleException: Could not resolve module: de.mpi.prototype.dbdisplayer [505]
Unresolved requirement: Import-Package: ch.ethz.sis.openbis.generic.asapi.v3
Updated bundle 505
答案 0 :(得分:1)
考虑使用-includeresource
中的配置Bundle-ClassPath
来代替自己使用compileInclude
和配置gradle.properties
。
许多人指出,您可能还需要提供包含软件包ch.ethz.sis.openbis.generic.asapi.v3
的库。您可能不希望/不能将其作为模块提供,并希望将其包含在包中,就像包含openBIS-API.jar一样。会是这样的:
compileInclude files('lib/openBIS-API-V3-16.05.7-r1522065804.jar')
compileInclude files('lib/openBIS-asapi.jar')
甚至:
compileInclude fileTree(dir: 'lib', include: '*.jar')
当然,您需要另一个openBIS-asapi.jar
,其中包含缺少的软件包。如果找不到此软件包,则可以将其放入bnd.bnd
:
Import-Package: *;resolution:=optional
编辑
我刚刚在http://svnsis.ethz.ch/repos/cisd/openbis_api/trunk中发现该软件包已经在openbis_api中,但这具有很多依赖性。参见:
compileInclude
应该为您复制并配置所有依赖项,但是我预见到更多的类加载问题...
答案 1 :(得分:0)
您的捆绑包会导入包ch.ethz.sis.openbis.generic.asapi.v3
。这是因为该包是包内代码的依赖。
您需要安装一个导出包ch.ethz.sis.openbis.generic.asapi.v3
。
答案 2 :(得分:0)
我将在这里留下一个超级罐的例子,里面有多个库。
在bnd.bnd
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Import-Package: *
Export-Package: javax.mail.*;version=1.5.6,\
javax.activation; version=1.1.1,\
com.sun.activation.*; version=1.1.1,\
com.sun.mail.*;version=1.5.6
-snapshot: ${tstamp}
-dsannotations: *
-check: all
-includeresource: lib/activation.jar=activation-1.1.1.jar,\
lib/javax.mail.jar=javax.mail-1.5.6.jar,\
lib/javax.mail-api.jar=javax.mail-api-1.5.6.jar
Bundle-ClassPath: ., lib/activation.jar, lib/javax.mail-api.jar, lib/javax.mail.jar