代码之家  ›  专栏  ›  技术社区  ›  MetroidFan2002

为什么添加测试jar会破坏这个maven构建?

  •  2
  • MetroidFan2002  · 技术社区  · 16 年前

    小的 现在对Maven 2很恼火。我们得到的项目设置很简单:一个“核心”项目,由“批处理”和“web”项目共同依赖,一个“ear”项目由“web”依赖。非常简单的东西。

    好的,由于core被大量使用,而且这是团队第一次真正进行TDD(测试驱动开发),已经创建了很多模拟,但主要是在web项目中-批处理项目目前非常简单。

    <dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>XYZ-core</artifactId>
    <version>${project.version}</version>
    </dependency>
    

    pom在以下情况下工作: 只是

    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>${version.servlet-api}</version>
    <scope>provided</scope>
    </dependency>
    

    这被设置为提供的范围,因为它将由web容器提供。这并不奇怪。在WebPOM中,它运行测试并安装没有问题。

    测验 作为批处理和web中的范围测试,我可以将模拟(模拟核心功能)移动到核心的测试中,以便在项目之间共享。以下代码段(已删除)在批处理项目中起作用:

    <dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>XYZ-core</artifactId>
    <classifier>tests</classifier>
    <version>${project.version}</version>
    <scope>test</scope>
    </dependency>
    

    然而,当我将其添加到web pom中时,当我尝试构建web时,我得到了这一切。

    java:[33,16]无法解析符号:类HttpServletRequest

    如果将其删除,则web构建成功。

    有什么想法吗?maven版本是2.0.4。我可以尝试升级,但这将意味着很多麻烦。

    编辑:web的主要类未能编译,并出现该错误(也未找到HttpServletResponse)。即使跳过测试(-Dmaven.test.skip=true),也会发生此错误。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Tim O'Brien    15 年前

    此时,您应该考虑更新为2.0.10或2.1.0。主要区别在于2.1.0包含了一些并行下载改进和对加密服务器密码的支持。

        2
  •  1
  •   Zac Thompson    16 年前

    你也可能被狗咬了 this bug

    在任何情况下,你真的至少应该在maven 2.0.9的临时区域尝试一下。。。您可以编辑maven启动脚本,这样它就不会影响您现有的存储库等。这是确保您不会被已经解决的错误击中的唯一方法。

        3
  •  0
  •   whaley    16 年前

    一般来说,使用 mvn dependency:tree 当试图排除某些依赖项未包含在其预期工件或范围中的原因时。

    在您的例子中,尽管您有ServletAPI工件作为提供的依赖项,但实际上您需要在测试阶段提供一个实现。在我看来,您正在批处理中运行的测试从未导入从javax.servlet导入任何内容的模拟类,但您在web中的测试确实导入了从javax.servlet导入某些内容的模拟-当然,如果我有错误,请纠正我。

    我会考虑将一些JETTY实现添加为测试范围的依赖项,看看这是否能让您进一步了解。