无名商城论坛

搜索
查看: 350|回复: 0

[其他技术] 【梅开二度】在Liferay 7中

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 17:19:19 | 显示全部楼层 |阅读模式
使用第三方Jar包fastjson

第一步:在maven或gradle的文件中引入fastjson,此处的引用和正常的项目一样
maven

com.alibaba
fastjson
1.2.61

gradle
compile 'com.alibaba:fastjson:1.2.61'
第二步:配置bnd.bnd文件
在其中添加如下配置:

-includeresource: \
    @fastjson-1.2.61.jar
Import-Package:\
    !com.google.common.*,\
    !javax.money.*,\
    !okhttp3.*,\
    !org.glassfish.jersey.*,\
    !org.javamoney.*,\
    !org.joda.time.*,\
    !org.springframework.data.redis.serializer.*,\
    !org.springframework.messaging.*,\
    !org.springframework.web.socket.*,\
    !retrofit2.*,\
    !springfox.*,\
    *
其中的

-includeresource: \
    @fastjson-1.2.61.jar
可以替换为以下几种写法

方法二:(注意:此种方法在部分版本中可能不正常,在7.2 CE GA1中测试正常,其他版本不确定)
-includeresource: META-INF/lib/fastjson-1.2.61.jar=fastjson-1.2.61.jar;lib:=true
方法三: (注意:此种方法在部分版本中可能不正常,在7.2 CE GA1中测试正常,其他版本不确定)
-includeresource: lib/jsoup-1.12.1.jar=jsoup-1.12.1.jar

说明:
为啥需要这样写呢?Liferay 7开始转向OSGI架构,我们部署的每一个module都是以模块的形式存在于liferay环境中,这个是OSGI的依赖问题,如果熟悉OSGI上面的看起来就不是问题了,想深入了解可以看看OSGI的相关书籍,这里做一个简单说明。

-includeresource:作用就是将我们的这个jar包打包的时候包含到我们的module的部署包中。

Import-Package:作用是告诉OSGI容器,此module需要导入哪些包,类似我们在Java中写代码时的import,前面加!就是不导入指定的包。注意最后的*不要缺失。,\是用来表示多个之间换行显示处理。

fastjson本身有一些是需要在运行时依赖的,比如我们前面排除的spring的,javamoney的等等,在部署到OSGI容器的时候,检查发现没有找到这些包,就会报错,所以需要我们使用Import-Package进行排除,告诉OSGI容器,这些是我不用的,不要再检查了。

说明2:
如果只是为了使用json的序列化和反序列化,不需要引入fastjson就可以,可以使用Liferay本身提供的JSON工具类就行,fastjson对于序列化liferay本身的一些类,比如company、user等反而可能会出错。可以使用Liferay本身提供的JSONFactoryUtil进行序列化和反序列化操作。

说明3:
对于第三方jar包的引入,并不是只能使用这个方法,一般而言有几种方法处理:

将jar包放到全局容器中:比如tomcat的lib目录中,这种适合一些基础性的,是我们需要全局使用的,比如JDBC的驱动就是放在这里的, 不过这个一般不推荐,这个就不能使用OSGI的特性,比如可以多版本jar同时共存
将jar包以OSGI模块的形式部署:也就是我们可以直接将jar包放到deploy目录下面直接以module的形式部署,但是这个也是要限制的就是在jar包必须要是按OSGI的module的标准形式打包 ,一般一些大的知名的jar包都是默认按OSGI标准打包的,怎么判断是不是以OSGI形式打包呢?可以看jar包中是否有MANIFEST.MF,并且这个文件中有Bundle-Name等一系统内容,一般有的就可以直接部署。
这种也是适合于全局依赖的jar包,我们不必将这些jar包打到我们特定的module中。比如我们有多个module要直接操作Mysql 8数据库,我们可以直接将mysql-connec
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表