Liferay-使用第三方库不会';行不通

Liferay-使用第三方库不会';行不通,liferay,osgi,build.gradle,liferay-7,bnd,Liferay,Osgi,Build.gradle,Liferay 7,Bnd,我是新来的,雷。对于我的第一个项目,我需要创建一个使用第三方库的模块。 这个库是由一所大学开发的,不经常使用,所以它不在任何maven repo或任何东西上。因此,我将其复制到我的Liferay项目中,并试图找出如何解决依赖性问题。 我读了无数的帖子和博客,但我还是有点困惑 我希望有人能为我指出解决问题的正确方向 模块的build.gradle dependencies { compileOnly group: "com.liferay.portal", name: "com.lifer

我是新来的,雷。对于我的第一个项目,我需要创建一个使用第三方库的模块。 这个库是由一所大学开发的,不经常使用,所以它不在任何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')
} 
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"
设置。渐变

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')
} 
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
使用刀片部署模块时的终端输出


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


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

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

在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

<> >而不是使用<代码> -IsReuleSure并配置<代码>包类路径< /C> >,考虑使用配置<代码> CixReule<代码> > <代码>等级>属性< /代码> . 正如许多人指出的,您可能还需要提供包含包
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
编辑

我刚刚发现这个包已经在openbis_api中了,但是它有很多依赖项。见:

compileInclude
应该为您复制和配置所有依赖项,但我预计会有更多的类加载问题

编辑2

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


顺便说一下,在第二篇博文中,我发现了一些似乎不正确的东西。这里写的是,java代码从
compileOnly
依赖项使用的包不会作为
Import-Package
清单条目列出,但是我有一个项目,它有一个
compileOnly
依赖项,这个依赖项是为它生成的。

未解决的需求开始:导入包:ch.ethz.sis.openbis.generic.asapi.v3
在依赖项中的任何地方,特别是它们的导出,是否在类路径上?另外,阅读并按照导入包行事:*对不起,我不知道交叉发布@OlafKock的.jar文件与项目的源文件夹位于同一级别的文件夹中。@Victor很遗憾,这没有改变任何东西。.您是否考虑过为它构建uber捆绑包?如果我编写一些类,导出它们,然后将它们导入到其他模块中,我理解这将如何工作。如果我想导出所需的库,这将如何工作?听起来像包
ch.ethz.sis.openbis.generic.asapi.v3
是库的一部分。您必须已经在类路径上使用该库编译了包,所以请查找该JAR文件。如果这个JAR已经是一个包了,那么就把它部署到OSGi中吧。否则,您可能必须将库打包为一个包才能使其正常工作。经过3个小时的搜索,compileInclude是我唯一需要做的事情。非常感谢。