2

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

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

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

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

4

2 回答 2

6

简单地复制目标目录并不能解决您的问题。我已经使用 Maven 打包了许多独立的应用程序,并为此使用了Maven 程序集插件。您可以使用您的客户可以解压缩并开始运行的程序集插件创建分发存档(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

于 2013-11-14T11:37:16.510 回答
2

这个问题太宽泛,无法全面回答,但我想提供一个真实世界的 Maven 部署示例。

所有主要的应用程序服务器都有 maven 插件。他们为本地和远程部署定义了目标。jboss-as-maven 插件就是一个这样的插件。您可以在.pom命令行中或直接从命令行定义部署属性(IP、端口等),例如

mvn jboss-as:deploy -Dpassword=mypassword

还有专门用于应用程序部署的cargo 插件。

于 2013-11-14T11:33:26.950 回答