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

时间:2013-11-14 11:26:59

标签: java maven deployment jar

我有一个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目录中不存在这些库。

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

2 个答案:

答案 0 :(得分:6)

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

这取决于您,您希望目标应用程序目录结构(发布)的方式。我通常最终得到像

这样的东西
bin/
conf/
lib/
log/

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

conf目录包含应用程序的配置文件以及log4j等日志配置文件。我在classpath上添加了此目录,以便在运行时更轻松地访问配置资源。

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

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

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

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

的最大粉丝

答案 1 :(得分:2)

这个问题太广泛而无法全面回答,但我想提供一个真实的maven部署示例。

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

mvn jboss-as:deploy -Dpassword=mypassword

还有专门用于应用程序部署的cargo plugin