使用Open Liberty Maven插件时,如何绕过<application>元素配置共享库路径?
Open Liberty Maven插件配置共享库的替代方案
针对你提到的无法直接在server.xml中使用<application>元素的场景,有以下几种可行的配置方式:
1. 通过Maven插件配置应用与共享库关联
保留server.xml中共享库的定义,然后在Maven插件的配置里指定应用的类加载器关联该共享库:
步骤1:保留server.xml中的共享库定义
<library id="commonlibs"> <fileset dir="C:\dev\commonlibs" includes="*.jar" scanInterval="30s"/> </library>
步骤2:在pom.xml的插件配置中关联应用与共享库
<plugin> <groupId>io.openliberty.tools</groupId> <artifactId>liberty-maven-plugin</artifactId> <version>3.8.1</version> <!-- 使用最新稳定版本 --> <configuration> <serverName>myServer</serverName> <apps> <app> <location>${project.build.directory}/myapp.war</location> <name>myapp</name> <type>war</type> <!-- 关联共享库 --> <classloader> <commonLibraryRef>commonlibs</commonLibraryRef> </classloader> <!-- 配置web扩展属性 --> <web-ext> <enable-file-serving>true</enable-file-serving> </web-ext> </app> </apps> </configuration> </plugin>
插件会自动生成对应的<application>元素并注入到server配置中,实现和原有配置相同的效果。
2. 使用ibm-web-ext.xml配置应用类加载器
将共享库关联配置放到应用的WEB-INF/ibm-web-ext.xml文件中,无需在插件或server.xml中额外配置应用的类加载器:
步骤1:保留server.xml中的共享库定义
和方法1的步骤1一致,确保commonlibs共享库已定义。
步骤2:在应用的WEB-INF目录下创建ibm-web-ext.xml
<?xml version="1.0" encoding="UTF-8"?> <web-ext xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd" version="1.0"> <!-- 关联共享库 --> <classloader commonLibraryRef="commonlibs"/> <!-- 启用文件服务 --> <enable-file-serving>true</enable-file-serving> </web-ext>
应用部署后会自动读取该配置,关联指定的共享库。
3. 完全通过Maven插件定义共享库并关联应用
如果不想在server.xml中定义共享库,可以直接在插件配置中声明共享库,同时关联应用:
<plugin> <groupId>io.openliberty.tools</groupId> <artifactId>liberty-maven-plugin</artifactId> <version>3.8.1</version> <configuration> <serverName>myServer</serverName> <!-- 定义共享库 --> <sharedLibraries> <sharedLibrary> <id>commonlibs</id> <fileset> <dir>C:\dev\commonlibs</dir> <includes>*.jar</includes> <scanInterval>30s</scanInterval> </fileset> </sharedLibrary> </sharedLibraries> <!-- 部署应用并关联共享库 --> <apps> <app> <location>${project.build.directory}/myapp.war</location> <name>myapp</name> <type>war</type> <classloader> <commonLibraryRef>commonlibs</commonLibraryRef> </classloader> <web-ext> <enable-file-serving>true</enable-file-serving> </web-ext> </app> </apps> </configuration> </plugin>
这种方式无需修改server.xml,所有配置都集中在Maven插件中,适合纯Maven驱动的项目。
内容的提问来源于stack exchange,提问作者Mr Smith
相关产品推荐
相关产品推荐

