gpt4 book ai didi

java - Maven 应用程序在现实世界中是如何部署的?

转载 作者:行者123 更新时间:2023-12-03 20:25:25 24 4
gpt4 key购买 nike

我有一个 Java 控制台应用程序,到目前为止它是在 Netbeans IDE 中开发的。当 Netbeans 构建应用程序时,它会创建 dist 目录并将应用程序作为 jar 存档构建到该目录中,并将所有依赖项复制到 dist/lib 中。此目录可以复制到最终目标并运行。

现在我正在尝试将这个项目转移到 Maven 中。一切顺利,我可以编译和打包我的应用程序,并在 target 目录中创建一个 jar。我使用 maven-jar-plugin 在 list 中设置主类,并使用 maven-shade-plugin 将所有源打包到一个 jar 文件中。

想请问一下,这样的Maven项目在现实世界中是如何部署的?我是否应该使用所有 target 目录,将其复制到最终目标并像我以前使用 Netbeans 那样运行?当我不使用 maven-shade-plugin 时会有什么后果 - 所有定义为依赖项的库都位于何处?我在问,因为在我的测试项目中,这些库不存在于 target 目录中。

我的问题 - 我有一个通过 Maven(没有 maven-shade-plugin)打包的 Java 控制台应用程序“A”和该应用程序应该运行的 Linux 服务器“S”。我可以手动将所有目标目录复制到服务器“S”还是有更好/更自动的方法如何在现实世界中解决这个问题?

最佳答案

简单地复制目标目录并不能解决您的问题。我已经使用 Maven 打包了许多独立的应用程序,并且我使用了 Maven Assembly Plugin为了它。您可以使用您的客户可以解压缩并开始运行的程序集插件来创建分发存档(zip、tar.gz)。

这取决于您,您希望您的目标应用程序目录结构(发布)如何。我通常以类似的方式结束

bin/
conf/
lib/
log/

bin 目录包含一个 shell/批处理脚本,通过调用您的主类、设置适当的类路径、提供相关的内存设置等来运行您的程序。我更喜欢使用 classworlds(Maven 使用)引导我的应用程序并简化启动脚本的编写。

conf 目录包含您的应用程序的配置文件以及日志记录配置文件,如 log4j 等。我将这个目录添加到类路径中,以便在运行时更容易访问配置资源。

lib 目录包含所有依赖项 jar 以及代码的 jar 文件。

log 是您的日志配置将指向输出日志文件的位置。

请注意,这种结构适用于像应用程序这样的独立服务器。还有一个 bin 目录和运行脚本允许您将此目录添加到 Windows/Linux 上的 PATH 以确保您可以从任何地方运行该应用程序。

如果您要打包命令行实用程序,简单的阴影 jar 可能适合您。就个人而言,我不是 java -jar application.jar

的忠实粉丝

关于java - Maven 应用程序在现实世界中是如何部署的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19976468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com