6

我正在尝试进行配置pom.xml,以便它自动将 EAR 存档部署到 GlassFish 应用程序服务器。我想将此操作附加到正确的 Maven执行阶段。但是不明白哪一个专门用于这个操作?部署?安装?请帮忙。这就是我正在做的事情:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <phase>deploy</phase>
            <configuration>
                <tasks>
                    <copy file="${project.build.directory}/${project.build.finalName}.ear" 
                        tofile="${glassfish.home}/domains/domain1/autodeploy"/>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

当我这样做mvn deploy时,maven 正在尝试将我的工件部署到存储库。这不是我要完成的。我觉得执行阶段是错误的..

4

4 回答 4

7

当我在做的时候mvn deploy,maven 正在尝试将deploy我的工件放到存储库中。这不是我要完成的。我觉得执行阶段是错误的......

在 Maven 语言中,deploy与部署到应用程序服务器无关,也不是绑定执行此类工作的插件的合适阶段。以下是我们可以阅读的关于构建生命周期简介中deploy的阶段的内容:

  • deploy- 在集成或发布环境中完成,将最终包复制到远程存储库以与其他开发人员和项目共享。

但是,在我进一步讨论阶段之前,我需要提一下,有几个插件允许与 GF 交互(启动/停止/部署/取消部署/等),它们可能比 AntRun 插件做得更好(AntRun 可能适用于琐碎用例,但例如,您可能希望在构建期间等待部署完成并且应用程序处于就绪状态;对于此类用例,您需要更高级的控制)。这些候选人是:

使用其中一个实际上取决于您的用例。如果您不打算在许多容器上部署,GlassFish 特定插件是最强大的。Cargo 的美妙之处在于它提供了统一的 API。但是它的配置不太直观,特别是如果你不习惯它。

现在,如果您只想在开发期间部署应用程序并且不希望构建以任何方式与容器交互,那么将这些插件中的任何一个绑定到特定阶段都不是那么有用,尽管有些人确实在开发期间部署了他们的应用程序package.

但是,您可能希望在构建过程中针对容器运行集成/功能测试。这实际上是一个完全有效且非常常见的用例,实现它的相关阶段是:

  • pre-integration-test:在执行集成测试之前执行所需的操作。这可能涉及诸如设置所需环境之类的事情。
  • integration-test:如有必要,将包处理并部署到可以运行集成测试的环境中。
  • post-integration-test:执行集成测试后执行所需的操作。这可能包括清理环境。

pre-integration-test阶段通常用于启动容器并在其上部署应用程序。该post-integration-test阶段用于取消部署应用程序并停止容器。

所以我认为部署到服务器可以是一个典型的构建活动,有非常有效的用例,Maven 很好地支持了这一点。我不部署到我的开发服务器(也不部署到生产服务器)作为构建的一部分。

也可以看看

于 2010-07-23T21:48:31.647 回答
3

除了 scdef 的答案,这里有一个使用 cargo 插件的简短示例:http: //blank.jasonwhaley.com/2010/03/automated-deployment-with-cargo-drive.html。我个人没有将它绑定到一个阶段,因为我不希望在每次调用 maven 时都发生部署,也不打算编写另一个 pom/profile 来处理调用插件。

此外,我建议根本不使用 maven 将我的应用程序部署到稳定的环境中,在该环境中,除了将应用程序放入容器中之外,环境中几乎总是会有其他应用程序/数据库/系统需要更改。生产几乎总是属于这个范围。在这种情况下将 .war/.ear/whatever 部署协调到容器/服务器确实应该与实际构建应用程序分离。将这样的部署留给外部脚本或者像Puppet这样的综合工具。

于 2010-07-23T19:21:37.343 回答
1

它可能不是您问题的直接答案,但请查看货物插件:http ://cargo.codehaus.org/

它解决了这个确切的需求(除其他外)

于 2010-07-23T19:03:40.980 回答
0

我已经使用 maven 上的 ant 插件的复制任务实现了该行为。

执行此操作的正确阶段是包装阶段。

有关更多详细信息,请参阅http://maven.apache.org/plugins/maven-antrun-plugin/index.html

问候。

于 2010-07-23T23:10:27.313 回答