如何在 openLiberty maven build 中包含第三方库
How do I include third party libraries in openLiberty maven build
我目前运行使用开放式 Liberty 构建 PoC,我在使用库时遇到了一些问题。
简而言之,我们的项目有一些第三方 jar 需要作为库包含在内,但是当我 运行 mvn install
时,我不知道如何包含它们我的 Open Liberty 项目。
我正尝试在 server.xml 中按如下方式配置它们:
<library id="MyLib" name="My Libraries">
<fileset dir="${server.config.dir}/myLib/" includes="*.jar" id="myLib"/>
</library>
我曾希望它们会被 maven 构建所接受,但显然不是。
在运行宁mvn install
时,我需要采取哪些步骤来确保我的库 jar 放置在正确的位置?
首先,我将推荐最简单的方法,即在您的应用程序中打包库(这种方式不需要 server.xml <library>
配置)。如果您正在使用 maven-war-plugin
,那么任何非 provided
依赖项将自动结束在您的应用程序的 WEB-INF/lib/
中。但是,如果您的 Liberty 服务器中有超过 1 个应用程序需要相同的库,这可能不是一个好的解决方案。
关于您最初的问题,您可以在构建期间使用 maven-dependency-plugin
将任何 Maven 工件复制到特定位置。使用此插件设置<library>
时,请务必将复制步骤绑定到prepare-package
阶段。
这是在 Maven 构建期间将 JUnit 添加到 ${server.config.dir}/myLib/
的示例:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy</id>
<phase>prepare-package</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/liberty/wlp/usr/servers/myServer/myLib</outputDirectory>
<destFileName>junit.jar</destFileName>
</artifactItem>
</artifactItems>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
我目前运行使用开放式 Liberty 构建 PoC,我在使用库时遇到了一些问题。
简而言之,我们的项目有一些第三方 jar 需要作为库包含在内,但是当我 运行 mvn install
时,我不知道如何包含它们我的 Open Liberty 项目。
我正尝试在 server.xml 中按如下方式配置它们:
<library id="MyLib" name="My Libraries">
<fileset dir="${server.config.dir}/myLib/" includes="*.jar" id="myLib"/>
</library>
我曾希望它们会被 maven 构建所接受,但显然不是。
在运行宁mvn install
时,我需要采取哪些步骤来确保我的库 jar 放置在正确的位置?
首先,我将推荐最简单的方法,即在您的应用程序中打包库(这种方式不需要 server.xml <library>
配置)。如果您正在使用 maven-war-plugin
,那么任何非 provided
依赖项将自动结束在您的应用程序的 WEB-INF/lib/
中。但是,如果您的 Liberty 服务器中有超过 1 个应用程序需要相同的库,这可能不是一个好的解决方案。
关于您最初的问题,您可以在构建期间使用 maven-dependency-plugin
将任何 Maven 工件复制到特定位置。使用此插件设置<library>
时,请务必将复制步骤绑定到prepare-package
阶段。
这是在 Maven 构建期间将 JUnit 添加到 ${server.config.dir}/myLib/
的示例:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy</id>
<phase>prepare-package</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/liberty/wlp/usr/servers/myServer/myLib</outputDirectory>
<destFileName>junit.jar</destFileName>
</artifactItem>
</artifactItems>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>