Maven 2多模块POM

3

最近我开始将我的项目从Ant迁移到Maven。 我的应用程序中有两个模块,我能够使用Maven构建它们。

现在我有一个自动化测试项目,它使用Web Driver来测试UI功能。 我试图使用Maven构建两个模块Wars并将它们部署到Tomcat上。 然后运行自动化测试并在自动化测试通过时通过构建。 我已经像这样配置了我的POM文件(只提及重要部分):

<packaging>pom</packaging>
<modules>
        <module>../module1</module>
        <module>../module2</module>
</modules>

现在两个项目都已经构建和部署完成,但自动化测试无法运行。我认为原因是打包类型为POM。但如果将其更改为war,则会开始出现错误。
我考虑创建第三个 POM 用于自动化,并将其包含为模块的父 POM。但我在思考这是否是正确的方法。这应该是非常普遍的情况,maven 应该直接支持它。

你的测试模块是不同的项目还是仅仅是打包结构的一部分? - jmj
那么我建议为该项目创建一个POM文件,并正确设置层次结构,然后运行mvn compile test - jmj
如何正确设置等级结构。我唯一想要确保的是每当我运行此构建时,它都应该构建依赖项目,然后运行这些测试。 - Ankit Bansal
自动化模块是什么?测试位于哪里?如何部署到Tomcat服务器?在我看来,缺少许多重要细节才能得到答案。 - Pascal Thivent
嗨 Pascal,自动化模块是基于WebDriver的UI测试自动化测试。它依赖于Web WAR,但没有包依赖关系。我正在使用Cargo Maven插件部署到Tomcat。我想在运行自动化测试之前从源代码构建Web WAR,并在Tomcat上部署,然后运行测试。我可以使用Ant构建来完成所有这些操作,但无法使用Maven。 - Ankit Bansal
3个回答

4
自动化模块是基于WebDriver的UI测试自动化测试。它依赖于Web war,但没有包依赖关系。我正在使用cargo maven插件部署到tomcat。我想在运行自动化测试之前从源代码构建Web wars,然后在tomcat上部署并运行测试。我可以使用ant构建来完成所有这些操作,但无法使用maven。 这绝对可行(我已经做过很多次)。但我不确定你当前的项目结构(特别是测试的位置)。我建议采用以下结构:
.
├── functests
│   ├── pom.xml            // 这里我们配置了maven来运行cargo和它的测试
│   └── src
│       └── it
│           ├── java
│           │   └── ...    // 功能测试将在这里进行
│           └── resources
├── pom.xml                // 聚合pom
└── mywebapp               // 测试的应用程序
    ├── pom.xml
    └── src
        ├── main
        │   ├── java
        │   ├── resources
        │   └── webapp
        └── test
            ├── java
            └── resources

有关pom设置的详细信息,请查看Maven,Cargo和Selenium进行功能测试,其中包含所需的所有详细信息。


1

我认为两个具有共享集成测试模块的战争模块并不是很常见的情况。

然而,您可以通过Hudson实现此目标。

  • 在Hudson中设置一个作业来部署您的父级POM,这将导致您当前所拥有的战争模块被部署。
  • 在上一个作业成功后,触发另一个作业来运行集成测试。

您可能需要使用配置文件来激活集成测试,或更具体地防止在第一个作业期间执行集成测试。

我今年早些时候花了大约一个小时设置了一个基本的Hudson服务器。
Hudson直接支持maven构建,并提供项目maven站点的位置,包括所有质量报告等。
您还可以配置Hudson来“监视”您的SCM,并在识别到提交时启动构建。


谢谢,Crowne。我也在考虑采用类似的方法。我正在使用Cruise Control进行持续集成。我想了解一下从自动化测试的构建文件中构建Web应用程序并部署它们是否是个好主意,如果是的话,如何使用Maven实现。 - Ankit Bansal

0

我可以考虑创建第三个POM。

你只有两个POM吗?每个项目/模块都需要自己的POM。

在这里查看更多关于使用Maven进行集成测试的信息:http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing

编辑:我不太清楚你的项目布局是什么样子的。但我猜它应该长这样:

文件结构

myWebApp/
    pom.xml
    myWebApp-web/
        pom.xml
    myWebApp-integration-tests/
        pom.xml

/myWebApp/pom.xml

<packaging>pom</packaging>
<modules>
    <!-- packaging: war; here are the sources and unit tests -->
    <module>myWebApp-web</module>

    <!-- packaging: java; here are the integration tests -->
    <module>myWebApp-integration-tests</module>
</modules>

通过这个设置,/myWebApp/mvn deploy 将执行以下步骤:

  1. 构建根项目(不执行任何操作,因为没有源代码)
  2. 构建 myWebApp-web
  3. 部署 myWebApp-web(必须在 /myWebApp/myWebApp-web/pom.xml 中进行配置)
  4. 执行 myWebApp-integration-tests 中的测试

这应该可以满足您的需求。


谢谢你的回复,Arian。我已经有了三个POM文件。我想要实现的是第三个项目构建时先构建前两个项目,然后再触发测试。 - Ankit Bansal
我相应地扩展了我的答案。 - Cephalopod
非常感谢你的回复,Arian。但是它并没有帮助到我。我已经尝试让我的问题更有意义了。现在看看我是否能够清楚地解释它。我不认为你提供的解决方案对我的情况有帮助。 - Ankit Bansal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接