将我的 web 项目(或 ear 项目)部署到远程服务器和 glassfish 的最佳方式是什么?
如何使用 netbeans 为此目的创建的 ant-deploy.xml 和 build-impl.xml?
使用 autodeploy 文件夹并单独将 sun-resources.xml 添加到 GF 或使用 ant 和....
请你一步一步解释我好吗?
问候
将我的 web 项目(或 ear 项目)部署到远程服务器和 glassfish 的最佳方式是什么?
如何使用 netbeans 为此目的创建的 ant-deploy.xml 和 build-impl.xml?
使用 autodeploy 文件夹并单独将 sun-resources.xml 添加到 GF 或使用 ant 和....
请你一步一步解释我好吗?
问候
好吧,您可以通过管理控制台手动部署您的应用程序。
或者你可以使用asadmin
命令。最简单的远程部署如下所示:
asadmin deploy --user=<adminuser> --host=<hostname> <path to jar/war/ear>
这可以是 shell 脚本,或者包装在 Ant 或 Maven 中。
或者您可以使用更专业的工具(Ant Task、maven glassfish 插件、maven asadmin 插件、Cargo)。
这一切都取决于您的上下文,没有单一的答案,并且有很多可能性。如果您不知道自己在寻找什么,只需使用 NetBeans 创建的 Ant 构建脚本。
使用以下组合:
要回答这个问题,有必要采取更广泛的视角并考虑整个开发/部署生命周期。在 Glassfish 中实际部署 .war 或 .ear 档案只是周期的一步。
如果您想真正有效,您需要考虑工具和实践的组合,以自动构建和部署您的软件应用程序。如果您在具有开发人员机器、持续集成机器、QA 机器和生产机器的“真实世界”环境中工作,则尤其如此。
我将在以下段落中详细说明这些项目。特别是,我将解释为什么我认为今天由 maven 驱动的自定义 shell 脚本比社区中可用的 glassfish maven 插件更好。
对于很多做java开发的人来说,maven是个耳熟能详的工具。对于其他人,这里是一个非常简短的介绍。maven 的目标是自动构建软件工件。它是一个框架(与面向对象的框架具有相同的意义),这意味着:
本质上,当你使用 maven 时,你描述了你正在构建什么样的软件工件(它是一个 .jar,它是一个 .war,它是一个 android 应用程序,等等)。默认情况下,maven 期望在特定位置找到源文件、测试文件和资源。默认情况下,maven 知道构建软件需要经历不同的阶段:编译、单元测试、打包、部署、集成测试、文档生成等。
maven 为您做的另一件事(这通常是使用该工具的第一个原因)是依赖管理。Maven 指定了一种识别库(带有名称和版本)的方法,这些库可通过存储库(有公共、全局存储库和私有存储库)提供。使用 maven,您可以指定诸如“我依赖于 magiglib 版本 1.2.2”之类的内容。当您要求 maven 进行构建时,它会自动获取 lib,将其存储在本地存储库中,并将其用于构建和打包。无需处理 .jar 文件的手动传输,不存在引入错误的风险,因为不同开发人员或在不同阶段使用相同库的不同版本。
最后但同样重要的是,maven 提供了根据目标部署机器定制软件结构的能力。考虑以下用例:
开发的时候想想每个开发者的安装可能不一样(mysql可能不会监听同一个TCP端口,glassfish可能没有安装在同一个目录,密码会不一样等等)。
开发机器显然不同于持续集成环境,而持续集成环境本身也不同于 QA 或生产环境(再次,只需考虑网络、文件系统、凭据)。
Maven 通过变量、配置文件和资源过滤的组合来支持这些用例:
Maven 是一个非常强大的工具,因此具有学习曲线。如果您使用 Netbeans,您实际上可以通过单击几下创建一个 Maven 驱动的项目,并从基本功能(例如依赖项管理)中受益。对于高级主题,有非常好的文档可用。在这里我不再赘述。
一旦您了解了 maven 的价值并决定使用它,下一个问题是如何使用它来将 .war 或 .ear 存档实际部署到 Glassfish(本地或远程)。这是你有很多选择的地方,也是多年来我们学到很多东西的地方(我们已经使用 maven 和 glassfish 好几年了)。
您可以做的第一件事是使用 glassfish maven 插件之一。有不同的插件可用。他们有完全不同的能力和不同程度的支持。事实证明,最强大的插件实际上已不再受支持,并且无法与开箱即用的 Glassfish 3 一起使用。该插件很有趣,因为它不仅可以将档案部署到 Glassfish 中,还可以创建资源(jdbc 池、jms 队列等)。它还使得动态创建 glassfish 域成为可能(对于运行集成测试并确保使用新域非常有用)。无论如何,新插件(在产品文档中描述)不是那么强大,并且完全专注于部署任务。
在我们多年来创建和改进的构建系统中,通过将 glassfish maven 插件与配置文件和资源过滤相结合,我们能够实现很多控制和灵活性。该解决方案有效,可靠,但相当复杂(我们的 pom.xml 和 settings.xml 增长了很多并且变得沉重)。
所以,如果我从头开始建立一个新的构建系统,我可能会做一些不同的事情。如果您查看 glassfish maven 插件的代码,您会发现它们几乎是 Glassfish 提供的asadmin命令行工具的包装器(这是因为 asadmin 的参数和行为已从一个 glassfish 版本更改为另一个maven插件已经坏了)。
我会做的是:
编写一组 shell 脚本来创建 glassfish域、创建资源(jdbc、jms 等)、部署.war 和 .ear。脚本将使用asadmin与 glassfish 交互(可以在本地和远程使用 asadmin );
在这些脚本中嵌入maven 变量并使用资源过滤来动态创建脚本的特定环境版本;
使用maven exec 插件在maven 构建周期的不同阶段(集成测试、运行、自定义目标等)运行脚本。
您可以使用ant任务将war文件部署到glassfish-V3;
Build.xml 内容;
<target name="deploy"
description="deploys application to glassfish">
<exec failonerror="true" executable="cmd">
<arg value="/c" />
<arg value="asadmin --user ${gfUser} --passwordfile ${gfPassFile} --host ${host} deploy build/${war}" />
</exec>
</target>
更多独立于操作系统的方式来部署应用程序:
<presetdef name="asadmin">
<java jar="${glassfish.home}/modules/admin-cli.jar" fork="true" jvm="${java.home}/bin/java" >
<arg line="--port ${glassfish.admin.port}" />
</java>
</presetdef>
<target name="deploy">
<asadmin failonerror="true">
<arg value="deploy" />
<arg value="--force=true" />
<arg value="${ear.file}" />
</asadmin>
</target>
您可以将 asadmin 预设与任何 asadmin 任务一起使用...
我发现根据您的情况,有几种方法效果很好:
Glassfish 允许对放置在正在运行的 Glassfish 文件“内部”的正确位置的资源进行自动热部署。Glassfish 3.1.2.2 的默认位置是glassfish-3.1.2.2/glassfish/domains/domain1/autodeply
. 我以前发现在 Windows 下它偶尔不会发现文件已更新,因此可能需要先删除并等待取消部署,然后再重新部署。
管理员页面(默认端口 4848)包含一个部署部分,允许用户上传和部署、禁用和启用以及取消部署应用程序。这是我发现手动维护最强大的方法。
它也不需要对底层服务器的完全访问。
cargo 项目允许自动部署到适当配置的 Glasfish 实例。
使用描述 war 部署的 pom.xml 执行的以下命令将(截至 2012 年 10 月 17 日)下载并执行一个 glassfish,并将当前项目部署到它。
mvn clean verify -Dcargo.maven.containerId=glassfish3x -Dcargo.maven.containerUrl=http://dlc.sun.com.edgesuite.net/glassfish/3.1.2.2/release/glassfish-3.1.2.2-web.zip org.codehaus.cargo:cargo-maven2-plugin:run
(连同 pom.xml 中的一个小片段,告诉货物有关 glassfish 位置的其他详细信息)
Glassfish 3 对 Maven 的支持很好。主要的好处是您不需要手动下载、解压和启动 Glassfish - maven 可以自动完成这一切。
有关说明,请参见http://embedded-glassfish.java.net/。
我只是简单地使用了它,但它似乎是以 IDE 为中心的解决方案的一个不错的替代方案。
为@Pascal Thivent 的回答加分,(我希望它对其他有类似问题的人有所帮助)
1) 只需单击鼠标即可使用 Netbeans 启动、停止、部署应用程序。
2)除了使用 Eclipse 或 Netbeans 或您最喜欢的 IDE
2.1) 在 Windows 开发环境中:在开发过程中从 asadmin 等命令行工具开始。2.2) 在 Linux 开发环境中:使用 shell 脚本并自动化部署过程。
2.3)在开发环境中使用自动部署和Netbeans远程部署。2.4)根据需要使用脚本或命令行远程部署
3)您提出了最合适的方法,例如根据项目需求和兴趣以及组织流程等其他考虑因素开发“构建脚本”。
如果没有 maven 或 ant,手动添加必要的 jars 一点也不坏。添加 jars 后,从管理控制台部署或仅使用构建脚本。
Maven 使用 JavaEE jar 有时会失败..但是您在 SO 中有解决方案。根据现有的示例项目和组织流程,我有时会使用 Maven。我还使用 Netbeans Java EE 项目默认的 ant。