【问题标题】:Why might Maven ignore updated classes during install?为什么 Maven 在安装过程中会忽略更新的类?
【发布时间】:2011-03-17 21:40:08
【问题描述】:

我在安装 Maven 2.2.1 时遇到了奇怪的行为。

偶尔会更新一个类,但是更新后的版本没有打包到mvn install生成的神器里。

到目前为止,我已经确定在目标目录下生成了一个更新的.class文件,并且生成的.war中的同名类不一样(修改日期不同,大小不同)

使用 -X 标志从命令行运行 Maven 会为类生成调试输出,例如:

[调试] * WEB-INF/classes/mypackage/MyClass.class 是最新的。

我想我之前也遇到过同样的问题,缓存的文件(?)是来自 Eclipse 的不完整编译,导致 Maven 构建中出现“未解决的编译问题”错误,但是来自 Eclipse 导出的工作工件.

  • Maven 如何确定一个 文件“是最新的”期间 安装过程?
  • Maven 比较的文件在哪里?
  • 我可以强制 Maven 从头开始​​构建包吗?
  • 任何其他想法将不胜感激!

【问题讨论】:

    标签: maven-2 caching installation


    【解决方案1】:

    到目前为止,我已经确定 更新的 .class 文件在 目标目录,以及那个类 在生成的 .war 中具有相同名称 不一样(不同的日期 修改,不同大小)

    可以肯定的是,这些类应该在target\classes 下构建,而不是target

    • 我可以强制 Maven 从头开始​​构建包吗?

    您可以通过运行强制完整构建

    mvn clean install
    

    这会在运行安装阶段之前执行clean(基本上删除target 目录)。

    另外 - 检查 Maven 构建目录之外的类的副本。在这种情况下,因为它是一个 web 应用程序,请检查 src/main/webapp/WEB-INF/classes

    【讨论】:

    • 我在安装 mvn 之前正在执行 mvn clean,但没有意识到您可以在一个命令中同时执行这两项操作。感谢您的提示,但我只是快速尝试了一下,并没有解决问题。是的,这些类在 target/classes 中的包结构中。
    • 如果做一个干净的构建不能解决问题,那么听起来构建目录之外有构建文件,(这会咬人!)或者类来自不同的人工制品你正在建造的。
    • Hmmmm '......这些类来自构建目录之外......' 我将通过项目获得一个根
    • 我在 src/main/webapp/WEB-INF/classes 下有一个类的旧副本。看起来 Maven 正在从那里捡起它们,删除了那个目录,问题就消失了。完美的!我将编辑您的答案以将该详细信息包含在正文中并接受它。谢谢!
    • @brabster 在一个 maven 项目中,src/main/webapp/WEB-INF/classes 中不应该有类,实际上 src 下的任何地方都不应该有任何类!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    相关资源
    最近更新 更多