如何从 WebSphere Liberty / Open Liberty Maven WAR 项目构建可运行的 JAR?
How do I build a runnable JAR from a WebSphere Liberty / Open Liberty Maven WAR project?
我想从我的 Maven WAR 项目中使用 Open Liberty 构建一个 runnable/executable JAR(使用 java -jar my.jar
到 运行)。
如果我 运行 mvn package
我得到一个 WAR,但是如果我然后 运行 mvn liberty:package
我得到类似的东西:
[INFO] CWWKM2001I: Invoke command is ["C:\git\lmparch1\test\target\liberty\wlp\bin\server.bat", package, defaultServer, --archive="C:\git\lmparch1\test\target\test.jar", --include=runnable].
[INFO] CWWKE0005E: The runtime environment could not be launched.
[INFO] CWWKE0031E: Specified defaultServer server does not exist; use the create action to create a new server. serverPath: C:\git\lmparch1\test\target\liberty\wlp\usr\servers\defaultServer
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.531 s
[INFO] Finished at: 2021-04-09T15:32:01-04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.openliberty.tools:liberty-maven-plugin:3.3.4:package (default-cli) on project test: CWWKM2002E: Failed to invoke ["C:\git\lmparch1\test\target\liberty\wlp\bin\server.bat", package, defaultServer, --archive="C:\git\lmparch1\test\target\test.jar", --include=runnable]. RC= 2 but expected=[0]. -> [Help 1]
我应该配置什么目标并绑定到哪些阶段等?
答案取决于您是否使用 liberty-maven-app-parent 来设置您的生命周期(或类似地将目标绑定到您自己的阶段),与. 使用更接近内置 war 生命周期绑定的东西(没有所有额外的 'liberty' 插件目标绑定)。
使用 Liberty Maven 父应用(或类似应用)
首先,如果您使用的是 io.openliberty.tools:liberty-maven-app-parent, e.g. from generating with the liberty-archetype-webapp_,那么您只需将其用作您的 liberty-maven-plugin 配置:
<plugin>
<groupId>io.openliberty.tools</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>3.3.4</version>
<configuration>
<include>minify,runnable</include>
并执行 mvn package
.
您会看到创建的可运行 JAR 类似于:target/xyz.jar
以交互方式使用通用 WAR 项目
最简单的方法是让开发模式安装 Liberty 并打包部署 WAR,然后 Ctrl+C
取消它以打包可运行的 JAR。
- 运行
mvn liberty:dev
启动 "dev mode" 并等待服务器安装和应用程序部署
- 当开发模式完成启动时键入
<Ctrl+C>
(当您看到 Liberty is 运行 处于开发模式时 或当您看到应用程序启动时 CWWKT0016I 应用程序可用消息)。
- 运行
mvn liberty:package -Dinclude=minify,runnable
生成可运行的 JAR(类似于:target/xyz.jar)。
在 CI 环境中使用通用 WAR 项目(例如构建管道)
如果您 运行 是非交互式的,而发布 Ctrl+C
并不容易,您可以
mvn package liberty:create liberty:install-feature liberty:deploy liberty:package -Dinclude=minify,runnable
我们已经打开 this issue 来考虑改进这个用例。
我想从我的 Maven WAR 项目中使用 Open Liberty 构建一个 runnable/executable JAR(使用 java -jar my.jar
到 运行)。
如果我 运行 mvn package
我得到一个 WAR,但是如果我然后 运行 mvn liberty:package
我得到类似的东西:
[INFO] CWWKM2001I: Invoke command is ["C:\git\lmparch1\test\target\liberty\wlp\bin\server.bat", package, defaultServer, --archive="C:\git\lmparch1\test\target\test.jar", --include=runnable].
[INFO] CWWKE0005E: The runtime environment could not be launched.
[INFO] CWWKE0031E: Specified defaultServer server does not exist; use the create action to create a new server. serverPath: C:\git\lmparch1\test\target\liberty\wlp\usr\servers\defaultServer
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.531 s
[INFO] Finished at: 2021-04-09T15:32:01-04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.openliberty.tools:liberty-maven-plugin:3.3.4:package (default-cli) on project test: CWWKM2002E: Failed to invoke ["C:\git\lmparch1\test\target\liberty\wlp\bin\server.bat", package, defaultServer, --archive="C:\git\lmparch1\test\target\test.jar", --include=runnable]. RC= 2 but expected=[0]. -> [Help 1]
我应该配置什么目标并绑定到哪些阶段等?
答案取决于您是否使用 liberty-maven-app-parent 来设置您的生命周期(或类似地将目标绑定到您自己的阶段),与. 使用更接近内置 war 生命周期绑定的东西(没有所有额外的 'liberty' 插件目标绑定)。
使用 Liberty Maven 父应用(或类似应用)
首先,如果您使用的是 io.openliberty.tools:liberty-maven-app-parent, e.g. from generating with the liberty-archetype-webapp_,那么您只需将其用作您的 liberty-maven-plugin 配置:
<plugin>
<groupId>io.openliberty.tools</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>3.3.4</version>
<configuration>
<include>minify,runnable</include>
并执行 mvn package
.
您会看到创建的可运行 JAR 类似于:target/xyz.jar
以交互方式使用通用 WAR 项目
最简单的方法是让开发模式安装 Liberty 并打包部署 WAR,然后 Ctrl+C
取消它以打包可运行的 JAR。
- 运行
mvn liberty:dev
启动 "dev mode" 并等待服务器安装和应用程序部署 - 当开发模式完成启动时键入
<Ctrl+C>
(当您看到 Liberty is 运行 处于开发模式时 或当您看到应用程序启动时 CWWKT0016I 应用程序可用消息)。 - 运行
mvn liberty:package -Dinclude=minify,runnable
生成可运行的 JAR(类似于:target/xyz.jar)。
在 CI 环境中使用通用 WAR 项目(例如构建管道)
如果您 运行 是非交互式的,而发布 Ctrl+C
并不容易,您可以
mvn package liberty:create liberty:install-feature liberty:deploy liberty:package -Dinclude=minify,runnable
我们已经打开 this issue 来考虑改进这个用例。