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

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

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

    此当前(已弃用)XML包含在web pom中,以将核心项目作为依赖项包含在内:

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

    如果满足以下条件,pom就会工作 仅仅 这包括在内,还有其他包含的jar文件。包含的jar文件之一是servletapi,2.4是版本:

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

    但是,现在网络上有这么多嘲讽。Batch也可以使用其中一些模拟。所以,我自然希望把核心放在 测试

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

    然而,当我将其添加到网络pom中时,当我尝试构建网络时,我会得到所有这些。

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

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

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

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

    Maven 2.0.4已有三年历史,早于Maven 2与插件版本交互方式的一次相当关键的变化。在Maven 2.0.9之前,Maven构建会下载所有所需插件的最新版本。您可能会遇到不一致,因为您使用的是Maven 2.0.4的较新插件。在做任何事情之前,尽管有麻烦,但请更新到Maven 2.0.9以上的任何内容。我很惊讶你仍然可以用2.0.4构建。

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

        2
  •  1
  •   Zac Thompson    17 年前

    您应该检查mvn help:带和不带冒犯块的有效pom。

    this bug

    无论如何,你真的应该至少在maven 2.0.9的临时区域尝试一下。..您可以编辑maven启动脚本,使其不会影响您现有的存储库等。唯一能确定你没有被已经解决的bug击中的方法。

        3
  •  0
  •   whaley    17 年前

    一般来说,使用 mvn dependency:tree 当试图排除为什么某些依赖关系没有包含在预期的工件或范围中时。

    在您的情况下,尽管您有作为提供的依赖项的servlet-api工件,但您实际上需要在测试阶段提供一个可用的实现。在我看来,您正在批处理中运行的测试永远不会导入从javax.servlet导入任何内容的模拟类,但您在web中的测试确实会导入从javax.servlet导入某些内容的模拟-当然,如果我在这方面有误,请纠正我。

    我会考虑添加一些jetty实现作为具有测试范围的依赖项,看看这是否能让你更进一步。

    推荐文章