Liferay - 使用第三方库不起作用

时间:2018-05-15 13:05:34

标签: liferay osgi build.gradle liferay-7 bnd

我是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

3 个答案:

答案 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