如何在 Maven 构建期间将外部依赖项复制到 Open Liberty
How to copy external dependency to Open Liberty during maven build
更新 - 2021 年 7 月:
虽然使用依赖插件的公认答案是当时最好的解决方案,但@ltlBeBoy 的答案利用了自添加到 liberty-maven-plugin 以来的 'copyDependencies' 支持。使用 'copyDependencies' 通常是一个更好的解决方案,因为它被集成到“开发模式”循环中并且不那么冗长(以支持比依赖插件更少的选项为代价)。
原始问题
我需要将 derby.jar
复制到 Open Liberty 共享目录
${project.build.directory}/liberty/wlp/usr/shared/resources/
。我在 pom.xml 文件中有以下设置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-derby-dependency</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeArtifactIds>derby</includeArtifactIds>
<outputDirectory>${project.build.directory}/liberty/wlp/usr/shared/resources/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
以及配置 open liberty 的部分
<plugin>
<groupId>net.wasdev.wlp.maven.plugins</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>${openliberty.maven.version}</version>
<executions>
<execution>
<id>package-server</id>
<phase>package</phase>
<goals>
<goal>create-server</goal>
<goal>install-apps</goal>
<goal>package-server</goal>
</goals>
<configuration>
<outputDirectory>target/wlp-package</outputDirectory>
</configuration>
</execution>
</executions>
<configuration>
<assemblyArtifact>
<groupId>io.openliberty</groupId>
<artifactId>openliberty-runtime</artifactId>
<version>${openliberty.version}</version>
<type>zip</type>
</assemblyArtifact>
<configFile>src/main/liberty/config/server.xml</configFile>
<appArchive>${project.build.directory}/${final.name}.war</appArchive>
<packageFile>${project.build.directory}/${final.name}.jar</packageFile>
<include>runnable</include>
<serverName>${final.name}</serverName>
<installAppPackages>project</installAppPackages>
<configDirectory>${project.basedir}/src/main/liberty/server</configDirectory>
<bootstrapProperties>
<project.name>${final.name}</project.name>
<jwt.issuer>https://server.example.com</jwt.issuer>
</bootstrapProperties>
</configuration>
</plugin>
使用此设置,我必须执行两次 mvn package
目标。看起来当 liberty-maven-plugin
执行时,如果 liberty/wlp/
.
下没有自由服务器,${project.build.directory}/liberty/wlp/usr/shared/resources/
文件夹将被删除
Maven 日志:
[INFO] --- maven-dependency-plugin:2.10:copy-dependencies (copy-derby-dependency) @ account ---
[INFO] Copying derby-10.15.1.3.jar to /Users/anton/github/account/target/liberty/wlp/usr/shared/resources/derby-10.15.1.3.jar
and after it
[INFO] --- liberty-maven-plugin:2.2:create-server (package-server) @ account ---
[INFO] CWWKM2110I: Uninstalling: /Users/anton/github/account/target/liberty/wlp.
有人可以帮我解决这个问题吗?
下面是来自 OpenLiberty.io 的会话缓存指南中的一个示例,展示了如何完成此操作。该示例正在获取 hazelcast.jar,但它可用于 Maven 中托管的任何 jar。
https://github.com/OpenLiberty/guide-sessions/blob/master/finish/pom.xml
<!-- package hazelcast.jar -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>${hazelcast.version}</version>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/liberty/wlp/usr/shared/resources</outputDirectory>
<destFileName>hazelcast.jar</destFileName>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/liberty/wlp/usr/shared/resources</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</plugin>
正如我在 Liberty Maven 插件的 , starting from version 3.3 中所述,有一个 copyDependencies
参数:
pom.xml
<plugins>
<plugin>
<groupId>io.openliberty.tools</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>3.3.4</version>
<configuration>
<!-- Usually best to add configuration at the plugin level rather than trying to configure particular executions -->
<copyDependencies>
<dependencyGroup>
<!-- Relative to server config directory -->
<location>lib/global/jdbc</location>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
</dependency>
</dependencyGroup>
</copyDependencies>
</configuration>
...
server.xml
...
<!-- Derby Library Configuration -->
<library id="derbyJDBCLib">
<fileset dir="${server.config.dir}/lib/global/jdbc" includes="derby*.jar"/>
</library>
...
有关详细信息,请参阅 documentation。
更新 - 2021 年 7 月:
虽然使用依赖插件的公认答案是当时最好的解决方案,但@ltlBeBoy 的答案利用了自添加到 liberty-maven-plugin 以来的 'copyDependencies' 支持。使用 'copyDependencies' 通常是一个更好的解决方案,因为它被集成到“开发模式”循环中并且不那么冗长(以支持比依赖插件更少的选项为代价)。
原始问题
我需要将 derby.jar
复制到 Open Liberty 共享目录
${project.build.directory}/liberty/wlp/usr/shared/resources/
。我在 pom.xml 文件中有以下设置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-derby-dependency</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeArtifactIds>derby</includeArtifactIds>
<outputDirectory>${project.build.directory}/liberty/wlp/usr/shared/resources/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
以及配置 open liberty 的部分
<plugin>
<groupId>net.wasdev.wlp.maven.plugins</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>${openliberty.maven.version}</version>
<executions>
<execution>
<id>package-server</id>
<phase>package</phase>
<goals>
<goal>create-server</goal>
<goal>install-apps</goal>
<goal>package-server</goal>
</goals>
<configuration>
<outputDirectory>target/wlp-package</outputDirectory>
</configuration>
</execution>
</executions>
<configuration>
<assemblyArtifact>
<groupId>io.openliberty</groupId>
<artifactId>openliberty-runtime</artifactId>
<version>${openliberty.version}</version>
<type>zip</type>
</assemblyArtifact>
<configFile>src/main/liberty/config/server.xml</configFile>
<appArchive>${project.build.directory}/${final.name}.war</appArchive>
<packageFile>${project.build.directory}/${final.name}.jar</packageFile>
<include>runnable</include>
<serverName>${final.name}</serverName>
<installAppPackages>project</installAppPackages>
<configDirectory>${project.basedir}/src/main/liberty/server</configDirectory>
<bootstrapProperties>
<project.name>${final.name}</project.name>
<jwt.issuer>https://server.example.com</jwt.issuer>
</bootstrapProperties>
</configuration>
</plugin>
使用此设置,我必须执行两次 mvn package
目标。看起来当 liberty-maven-plugin
执行时,如果 liberty/wlp/
.
${project.build.directory}/liberty/wlp/usr/shared/resources/
文件夹将被删除
Maven 日志:
[INFO] --- maven-dependency-plugin:2.10:copy-dependencies (copy-derby-dependency) @ account ---
[INFO] Copying derby-10.15.1.3.jar to /Users/anton/github/account/target/liberty/wlp/usr/shared/resources/derby-10.15.1.3.jar
and after it
[INFO] --- liberty-maven-plugin:2.2:create-server (package-server) @ account ---
[INFO] CWWKM2110I: Uninstalling: /Users/anton/github/account/target/liberty/wlp.
有人可以帮我解决这个问题吗?
下面是来自 OpenLiberty.io 的会话缓存指南中的一个示例,展示了如何完成此操作。该示例正在获取 hazelcast.jar,但它可用于 Maven 中托管的任何 jar。
https://github.com/OpenLiberty/guide-sessions/blob/master/finish/pom.xml
<!-- package hazelcast.jar -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>${hazelcast.version}</version>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/liberty/wlp/usr/shared/resources</outputDirectory>
<destFileName>hazelcast.jar</destFileName>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/liberty/wlp/usr/shared/resources</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</plugin>
正如我在 Liberty Maven 插件的 copyDependencies
参数:
pom.xml
<plugins>
<plugin>
<groupId>io.openliberty.tools</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>3.3.4</version>
<configuration>
<!-- Usually best to add configuration at the plugin level rather than trying to configure particular executions -->
<copyDependencies>
<dependencyGroup>
<!-- Relative to server config directory -->
<location>lib/global/jdbc</location>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
</dependency>
</dependencyGroup>
</copyDependencies>
</configuration>
...
server.xml
...
<!-- Derby Library Configuration -->
<library id="derbyJDBCLib">
<fileset dir="${server.config.dir}/lib/global/jdbc" includes="derby*.jar"/>
</library>
...
有关详细信息,请参阅 documentation。