在Glassfish V3上部署的最佳方式

时间:2010-09-03 12:48:28

标签: java-ee glassfish deployment glassfish-3

将我的Web项目(或ear项目)部署到远程服务器和glassfish的最佳方法是什么?

如何使用netbeans为此目的创建的ant-deploy.xml和build-impl.xml?

使用autodeploy文件夹并单独将sun-resources.xml添加到GF 要么 使用ant和....

请您一步一步解释我吗?

此致

6 个答案:

答案 0 :(得分:23)

好吧,您可以通过管理控制台手动部署您的应用。

或者您可以使用asadmin命令。最简单的远程部署看起来像:

asadmin deploy --user=<adminuser> --host=<hostname> <path to jar/war/ear>

这可以是shell脚本,也可以用Ant或Maven包装。

或者您可以使用更专业的工具(Ant Taskmaven glassfish pluginmaven asadmin pluginCargo)。

这一切都取决于你的背景,没有单一的答案,有很多可能性。如果您不知道自己在寻找什么,只需使用NetBeans创建的Ant构建脚本。

答案 1 :(得分:16)

1。简短回答

使用以下组合:

  1. maven ,推动整个构建和部署过程(配置文件资源过滤将是非常有价值的功能)
  2. 使用 asadmin 命令的
  3. shell 脚本(替代其中一个glassfish maven插件
  4. jenkins 可以定期触发maven构建,也可以将新代码推送到您的版本管理系统。
  5. Netbeans 与Glassfish和maven有很好的集成,是我最喜欢的Java EE IDE:
  6. 2。现在,有些背景......

    要回答这个问题,从更广泛的角度考虑整个开发/部署生命周期是有用的。 Glassfish中.war或.ear存档的实际部署只是循环的一个步骤。

    如果您想要真正有效,则需要考虑工具和实践的组合,以自动构建和部署软件应用程序。如果你在一个真实的世界中工作,那就更是如此。开发人员机器,持续集成机器,QA机器和生产机器的环境。

    我将在以下段落中详细说明这些项目。特别是,我将解释为什么我认为今天由maven驱动的自定义shell脚本比社区中提供的glassfish maven插件更好。

    3。使用maven构建管理

    对于许多进行Java开发的人来说,maven是一个众所周知的工具。对于其他人来说,这是一个非常简短的介绍。 maven的目标是自动构建软件工件。它是一个框架(与面向对象的框架在同一意义上),这意味着:

    1. 它定义了构建,打包和测试软件的标准方法
    2. 它为您提供了以此标准方式附加自定义行为的扩展点
    3. 从本质上讲,当你使用maven时,你会描述你正在构建什么样的软件工件(它是.jar,它是.war,它是一个Android应用程序,等等)。默认情况下,maven希望在特定位置查找源文件,测试文件和资源。默认情况下,maven知道构建软件需要经历不同的阶段:编译,单元测试,打包,部署,集成测试,文档生成等。

      maven为您做的另一件事(通常是使用该工具的第一个原因)是依赖管理。 Maven指定了一种识别库(具有名称和版本)的方法,这些库通过存储库提供(有公共存储库,全局存储库和私有存储库)。使用maven,您可以指定类似&#34;我依赖于magiglib版本1.2.2和#34;。当您要求maven进行构建时,它将自动获取lib,将其存储在本地存储库中并将其用于构造和打包。无需处理.jar文件的手动传输,没有引入错误的风险,因为不同开发人员或不同阶段使用相同库的不同版本。

      最后但并非最不重要的是,maven提供了自定义软件结构的功能,具体取决于目标部署机器。考虑以下用例:

      • 在开发过程中,认为每个开发人员可能有不同的安装(mysql可能不会在同一个TCP端口上侦听,glassfish可能不会安装在同一目录中,密码会有所不同等)。

      • 开发机器显然不同于持续集成环境,后者本身与QA或生产环境不同(再次考虑网络,文件系统,凭证)。

      Maven通过变量个人资料资源过滤的组合支持这些用例:

      • 变量是一个变量,就像在任何一种编程环境中一样。当您使用maven时,您编写了一个XML配置文件(pom.xml),您可以在其中使用变量。这使您的构建系统可配置且动态。 mysql侦听的端口或安装glassfish的目录可以定义为变量。
      • 个人资料是一种为一组maven变量赋值的方法。通常,每个开发人员都有一个配置文件,每个环境(从持续集成到生产)都将具有配置文件等。
      • 资源过滤允许您在源文件,资源文件和配置文件中引用maven变量。例如,在java文件中,您可以嵌入以下字符串$ {myvar}。如果您将maven配置为进行资源过滤,那么它将使用maven myvar变量的值替换$ {myvar}(可以在当前配置文件中定义)。

      Maven是一个非常强大的工具,因此具有学习曲线。如果您使用Netbeans,您实际上可以通过几次点击创建一个maven驱动的项目,并从基本功能(例如依赖关系管理)中受益。对于高级主题,可以获得非常好的文档。我不会在这里详细介绍。

      4。 glassfish插件......不是吗?

      一旦你理解了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插件已被破坏)。

      5。前进之路

      我要做的是:

      • 编写一组shell脚本以创建glassfish ,创建资源(jdbc,jms等),< strong>部署 .war和.ear。脚本将使用 asadmin 与glassfish交互(可以使用asadmin 本地远程);

      • 在这些脚本中嵌入 maven变量,并使用资源过滤动态创建特定于环境的脚本版本;

      • 使用 maven exec插件在maven构建周期的不同阶段(集成测试,运行,自定义目标等)运行脚本。

        < / LI>

答案 2 :(得分:10)

您可以使用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>

答案 3 :(得分:5)

更多与os无关的部署应用程序的方式:

<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任务一起使用...

答案 4 :(得分:1)

我发现有几种方法可以很好地运行,具体取决于您的情况:

当您有权访问正在运行的Glassfish 3的文件系统时进行部署:

Glassfish允许自动热部署放置在运行Glassfish文件“内部”的正确位置的资源。 Glassfish 3.1.2.2的默认位置是glassfish-3.1.2.2/glassfish/domains/domain1/autodeply。我之前发现在Windows下它偶尔没有发现文件已被更新,因此在部署之前首先删除并等待取消部署可能是必要的。

手动部署到远程Glassfish 3

管理员页面(默认端口4848)包含允许用户上载和部署,禁用和启用以及取消部署应用程序的部署部分。这是我发现的最强大的手动维护。

它也不需要对底层服务器的完全访问权。

自动部署到远程Glassfish 3

货物项目允许自动部署到适当配置的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中的一个小片段,告诉货物有关玻璃鱼位置的其他详细信息)

Maven开发构建的一部分,如jetty:run

Maven对Glassfish 3的支持很好。主要的好处是你不需要手动下载和解压缩并启动Glassfish - maven可以自动完成所有操作。

有关说明,请参阅http://embedded-glassfish.java.net/

我只是简单地使用了它,但它似乎是以IDE为中心的解决方案的一个很好的替代方案。

答案 5 :(得分:0)

在@Pascal Thivent的答案中添加要点, (我希望对有类似问题的其他人有所帮助)

1)只需单击鼠标即可启动,停止,使用Netbeans部署应用程序。

2)除了使用Eclipse或Netbeans或您最喜欢的IDE

之外

2.1)在Windows开发环境中:在开发过程中从asadmin等命令行工具开始。 2.2)在Linux开发环境中:使用shell脚本并自动化部署过程。

2.3)在开发环境中使用autodeploy和Netbeans远程部署。 2.4)使用脚本或命令行远程部署是基于需要

  

3)你想出了一个最合适的方法,比如开发'build   脚本'基于项目需求&amp;兴趣和其他   组织过程等考虑因素。

没有maven或ant,只需手动添加必要的罐子就不是坏主意了。添加jar后,从管理控制台部署或只使用构建脚本。

Maven在JavaEE jar中失败了几次..但是你有SO的解决方案。 基于现有的示例项目和组织流程,我有时会使用Maven。 我还使用了默认使用Netbeans Java EE项目的ant。