【问题标题】:Liferay - Using Third Party Library doesn't workLiferay - 使用第三方库不起作用
【发布时间】:2018-10-25 08:02:08
【问题描述】:

我是 Liferay 的新手。对于我的第一个项目,我需要创建一个使用第三方库的模块。 这个库是由一所大学开发的,不经常使用,所以它不在任何 maven repo 或任何东西上。因此,我将它复制到我的 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

我使用 blade deploy

部署模块时的终端输出
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

【问题讨论】:

  • start at Unresolved requirement: Import-Package: ch.ethz.sis.openbis.generic.asapi.v3 是否在您的类路径中,在依赖项中的任何位置,尤其是它们的导出?另外,请阅读meta.stackexchange.com/questions/141823/… 并采取相应措施
  • 进口包装:*
  • 抱歉,我不知道交叉发布。 @OlafKock 的.jar 文件与项目的源文件夹在同一级别的文件夹中。
  • @Victor 不幸的是,这并没有改变任何东西..
  • 你有没有考虑为它构建一个超级捆绑包?

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


【解决方案1】:

与其使用-includeresource 和自己配置Bundle-ClassPath,不如考虑在gradle.properties 中使用配置compileInclude

正如许多人指出的那样,您可能还需要提供包含包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 应该为您复制和配置所有依赖项,但我预见到更多类加载问题...

编辑 2

Dave Nebinger 的这两篇博客文章解释了如何在 Liferay 模块中使用依赖项

顺便说一句,在第二个博客条目中,我发现了一些似乎不正确的东西。那里写着,从compileOnly 依赖项中打包您使用的java 代码不会被列为Import-Package 清单条目,但我有一个带有compileOnly 依赖项的项目,其中生成了所述条目。

【讨论】:

  • 经过 3 个小时的搜索,compileInclude 是我唯一需要做的事情。非常感谢。
【解决方案2】:

您的包导入包ch.ethz.sis.openbis.generic.asapi.v3。这是因为该包是包内代码的依赖项。

你需要安装一个包导出包ch.ethz.sis.openbis.generic.asapi.v3

【讨论】:

  • 我知道如果我编写一些类、导出它们然后将它们导入到另一个模块中会如何工作。如果我想导出我需要的库,这将如何工作?
  • 听起来包ch.ethz.sis.openbis.generic.asapi.v3 是库的一部分。您必须已使用类路径上的该库编译了您的包,因此请找到该 JAR 文件。如果那个 JAR 已经是一个捆绑包,那就太好了,只需将它部署到 OSGi 中。否则,您可能必须将库打包为一个包才能使其正常工作。
【解决方案3】:

我将在这里为您留下一个 uber jar 的示例,其中包含多个库。

在 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

【讨论】:

    猜你喜欢
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2021-01-11
    相关资源
    最近更新 更多