【问题标题】:Eclipse hangs on "verifying launch attributes" in large Maven projectsEclipse 在大型 Maven 项目中挂起“验证启动属性”
【发布时间】:2015-01-05 14:08:14
【问题描述】:

我正在使用 Eclipse 开发一个大型 Maven 项目(数十个依赖项)。当我尝试运行单元测试时,我看到大约一分钟的暂停,而状态显示“正在验证启动属性”。在 Process Monitor 中观察 Eclipse 的活动,我看到很多文件访问 Maven 存储库中的各种锁和 jar。看起来 Eclipse 遍历了我的项目所依赖的每个 JAR。一旦该文件访问完成,实际测试就开始了。

我知道“Why is Eclipse hanging at 57% with the status “Verifying launch attributes…” when launching a run configuration?”中提供的建议,并且我遵循了建议的修复方法。我认为 Eclipse 正在通过检查每个 JAR 来完成它应该做的事情。我的问题是,如何在 Eclipse 或 Maven 中禁用这种行为?

我在 Windows 7 上使用 Eclipse Luna,m2e 版本 1.5.0.20140606

编辑:

下面是我在进程监视器中看到的示例:

简而言之,我们会花大约 10 秒的时间进行合理的活动,例如检查 Java 和 JAR 文件的状态,然后我们会花大约 40 秒的时间锁定 Maven 存储库并读取 POM 文件。

为什么 Eclipse 会这样做?我需要改变什么来阻止它?

11:31:48.1468054 AM eclipse.exe 3736    CreateFile  C:\LAS\Maven\Repository\org\drools\drools-core\6.0.1.Final\drools-core-6.0.1.Final.jar  SUCCESS Desired Access: Read Attributes, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:31:48.1469017 AM eclipse.exe 3736    QueryBasicInformationFile   C:\LAS\Maven\Repository\org\drools\drools-core\6.0.1.Final\drools-core-6.0.1.Final.jar  SUCCESS CreationTime: 7/21/2014 11:13:15 AM, LastAccessTime: 7/21/2014 11:13:15 AM, LastWriteTime: 7/21/2014  11:13:22 AM, ChangeTime: 7/21/2014 11:13:23 AM, FileAttributes: A
11:31:48.1469769 AM eclipse.exe 3736    CloseFile   C:\LAS\Maven\Repository\org\drools\drools-core\6.0.1.Final\drools-core-6.0.1.Final.jar  SUCCESS 

11:31:50.0040011 AM eclipse.exe 3736    CreateFile  C:\LAS\Maven\Repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar    SUCCESS Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:31:50.0040832 AM eclipse.exe 3736    QueryNetworkOpenInformationFile C:\LAS\Maven\Repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar    SUCCESS CreationTime: 7/21/2014 11:13:15 AM, LastAccessTime: 7/21/2014 11:13:15 AM, LastWriteTime: 7/21/2014 11:13:21 AM, ChangeTime: 7/21/2014 11:13:23 AM, AllocationSize: 28672, EndOfFile: 24956, FileAttributes: A
11:31:50.0041397 AM eclipse.exe 3736    CloseFile   C:\LAS\Maven\Repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar    SUCCESS 

(四秒)

11:31:50.0700821 AM eclipse.exe 3736    CreateFile  C:\LAS\Maven\Repository\.locks\com.lmax~disruptor~3.3.0.aetherlock  SUCCESS Desired Access: Write Attributes, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:31:50.0701770 AM eclipse.exe 3736    SetBasicInformationFile C:\LAS\Maven\Repository\.locks\com.lmax~disruptor~3.3.0.aetherlock  SUCCESS CreationTime: 0, LastAccessTime: 0, LastWriteTime: 0, ChangeTime: 0, FileAttributes: N
11:31:50.0703100 AM eclipse.exe 3736    CloseFile   C:\LAS\Maven\Repository\.locks\com.lmax~disruptor~3.3.0.aetherlock  SUCCESS 

11:31:59.7990517 AM eclipse.exe 3736    CreateFile  C:\LAS\Maven\Repository\.locks\xpp3~xpp3_min~1.1.4c.aetherlock  SUCCESS Desired Access: Read Attributes, Delete, Disposition: Open, Options: Non-Directory File, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:31:59.7991381 AM eclipse.exe 3736    QueryAttributeTagFile   C:\LAS\Maven\Repository\.locks\xpp3~xpp3_min~1.1.4c.aetherlock  SUCCESS Attributes: N, ReparseTag: 0x0
11:31:59.7991864 AM eclipse.exe 3736    SetDispositionInformationFile   C:\LAS\Maven\Repository\.locks\xpp3~xpp3_min~1.1.4c.aetherlock  SUCCESS Delete: True
11:31:59.7992609 AM eclipse.exe 3736    CloseFile   C:\LAS\Maven\Repository\.locks\xpp3~xpp3_min~1.1.4c.aetherlock  SUCCESS 

(9 秒)

11:31:59.8364794 AM eclipse.exe 3736    CreateFile  C:\LAS\Maven\Repository\com\lmax\disruptor\3.3.0\disruptor-3.3.0-sources.jar    SUCCESS Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:31:59.8367613 AM eclipse.exe 3736    QueryNetworkOpenInformationFile C:\LAS\Maven\Repository\com\lmax\disruptor\3.3.0\disruptor-3.3.0-sources.jar    SUCCESS CreationTime: 11/18/2014 2:17:33 PM, LastAccessTime: 11/18/2014 2:17:33 PM, LastWriteTime: 11/18/2014 2:17:33 PM, ChangeTime: 11/18/2014 2:17:33 PM, AllocationSize: 81920, EndOfFile: 80291, FileAttributes: A
11:31:59.8367994 AM eclipse.exe 3736    CloseFile   C:\LAS\Maven\Repository\com\lmax\disruptor\3.3.0\disruptor-3.3.0-sources.jar    SUCCESS 

11:32:02.0222874 AM eclipse.exe 3736    CreateFile  C:\LAS\Maven\Repository\org\antlr\antlr-runtime\3.5\antlr-runtime-3.5.jar   SUCCESS Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:32:02.0223541 AM eclipse.exe 3736    QueryNetworkOpenInformationFile C:\LAS\Maven\Repository\org\antlr\antlr-runtime\3.5\antlr-runtime-3.5.jar   SUCCESS CreationTime: 7/21/2014 11:13:15 AM, LastAccessTime: 7/21/2014 11:13:15 AM, LastWriteTime: 7/21/2014 11:13:21 AM, ChangeTime: 7/21/2014 11:13:22 AM, AllocationSize: 167936, EndOfFile: 167735, FileAttributes: A
11:32:02.0223896 AM eclipse.exe 3736    CloseFile   C:\LAS\Maven\Repository\org\antlr\antlr-runtime\3.5\antlr-runtime-3.5.jar   SUCCESS 

(3 秒)

11:32:33.2963547 AM eclipse.exe 3736    CreateFile  C:\LAS\Maven\Repository\.locks\commons-logging~commons-logging~1.1.aetherlock   SUCCESS Desired Access: Read Attributes, Delete, Disposition: Open, Options: Non-Directory File, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:32:33.2964727 AM eclipse.exe 3736    QueryAttributeTagFile   C:\LAS\Maven\Repository\.locks\commons-logging~commons-logging~1.1.aetherlock   SUCCESS Attributes: N, ReparseTag: 0x0
11:32:33.2965390 AM eclipse.exe 3736    SetDispositionInformationFile   C:\LAS\Maven\Repository\.locks\commons-logging~commons-logging~1.1.aetherlock   SUCCESS Delete: True
11:32:33.2966382 AM eclipse.exe 3736    CloseFile   C:\LAS\Maven\Repository\.locks\commons-logging~commons-logging~1.1.aetherlock   SUCCESS 
11:32:33.2970685 AM eclipse.exe 3736    CreateFile  C:\LAS\Maven\Repository\commons-logging\commons-logging\1.1\commons-logging-1.1.pom SUCCESS Desired Access: Synchronize, Disposition: Open, Options: , Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:32:33.2971806 AM eclipse.exe 3736    QueryNameInformationFile    C:\LAS\Maven\Repository\commons-logging\commons-logging\1.1\commons-logging-1.1.pom SUCCESS Name: \LAS\Maven\Repository\commons-logging\commons-logging\1.1\commons-logging-1.1.pom
11:32:33.2972430 AM eclipse.exe 3736    CloseFile   C:\LAS\Maven\Repository\commons-logging\commons-logging\1.1\commons-logging-1.1.pom SUCCESS 
11:32:33.2980275 AM eclipse.exe 3736    CreateFile  C:\LAS\Maven\Repository\commons-logging\commons-logging\1.1\commons-logging-1.1.pom SUCCESS Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Write, AllocationSize: n/a, OpenResult: Opened
11:32:33.2981528 AM eclipse.exe 3736    ReadFile    C:\LAS\Maven\Repository\commons-logging\commons-logging\1.1\commons-logging-1.1.pom SUCCESS Offset: 0, Length: 4,096, Priority: Normal
11:32:33.2983145 AM eclipse.exe 3736    QueryStandardInformationFile    C:\LAS\Maven\Repository\commons-logging\commons-logging\1.1\commons-logging-1.1.pom SUCCESS AllocationSize: 8,192, EndOfFile: 6,182, NumberOfLinks: 1, DeletePending: False, Directory: False
11:32:33.2983774 AM eclipse.exe 3736    ReadFile    C:\LAS\Maven\Repository\commons-logging\commons-logging\1.1\commons-logging-1.1.pom SUCCESS Offset: 4,096, Length: 2,086
11:32:33.2984420 AM eclipse.exe 3736    QueryStandardInformationFile    C:\LAS\Maven\Repository\commons-logging\commons-logging\1.1\commons-logging-1.1.pom SUCCESS AllocationSize: 8,192, EndOfFile: 6,182, NumberOfLinks: 1, DeletePending: False, Directory: False
11:32:33.2985057 AM eclipse.exe 3736    QueryStandardInformationFile    C:\LAS\Maven\Repository\commons-logging\commons-logging\1.1\commons-logging-1.1.pom SUCCESS AllocationSize: 8,192, EndOfFile: 6,182, NumberOfLinks: 1, DeletePending: False, Directory: False
11:32:33.2987730 AM eclipse.exe 3736    CloseFile   C:\LAS\Maven\Repository\commons-logging\commons-logging\1.1\commons-logging-1.1.pom SUCCESS 

(30 秒!)

【问题讨论】:

  • Eclipse 正在收集启动 Java VM 所需的所有 JAR 文件。我认为这不应该花这么长时间。你能看到 Eclipse 是真的读取 JAR 还是只检查它们是否存在?
  • 在命令行中执行mvn test 时是否遇到同样的问题?
  • Eclipse 锁定本地存储库并打开准备启动的每个 jar 文件。
  • 你已经在你的问题中说了这个。它只是打开 JAR(如“创建文件句柄”)还是实际读取字节(= 检查)JAR?另外,你在命令行有同样的问题吗?
  • @AaronDigulla 抱歉,添加了一些 ProcMon 输出示例。它打开和关闭 JAR,但在其他地方它在 POM 中打开和读取

标签: eclipse maven


【解决方案1】:

来自聊天:

mvn test 花了大约 20 秒从我们自己的快照存储库中为我们自己的包下载 maven-metadata.xml - 我没有看到 Eclipse 这样做。在 mvn test 开始显示输出之前没有大的延迟。
关闭除您需要的项目之外的所有项目可将构建时间缩短至 5 秒 POM 被配置为检查每个构建的快照更改,因此每次都会进行下载

Eclipse 的 m2e 插件使用与 Maven 相同的策略。如果您告诉 Maven 检查每个构建的快照,那么 Eclipse 也会这样做。如果 mvn test 花费 20 秒检查依赖项,Eclipse 将需要相同的时间(您应该能够在 Eclipse 的 Maven 控制台中看到这一点;您可以在与 Stack Trace Console 相同的下拉菜单中找到此控制台 - 查找按钮在控制台视图的右上角带有小+

减少构建时间的建议:

  • 将 POM 的配置更改为每天仅检查一次快照。白天使用mvn -U 升级它们。我认为这种变化会带来最大的收获。
  • 使用 CI 服务器使用最新快照构建所有内容,因此您不必浪费时间
  • 将所有快照依赖项拉入单个 Maven 项目;如果快照依赖项不是当前构建的一部分,Maven 只会下载它们。
  • 升级您的网络并尝试调整您的 Maven 代理服务器(您从那里下载快照)。我的经验是,这一步成本高昂,收益也不大。
  • 尽可能多地关闭项目。这通常会使 Eclipse 更快,但显然对快照检查没有帮助。
  • 避免快照;更多地使用已发布的版本。想出一个快速发布流程,这样您就可以在需要时每天发布多个版本。

[编辑] 除非您没有足够的内存,否则读取 XML 文件不需要 2 秒。请检查此项(在首选项中使用“常规/堆状态”)。

如果它仍然很慢,那么 m2e 会在这个“读取 Maven 项目”步骤中执行一些操作。我的猜测是它会重新计算类路径。如果这需要很长时间,那么:

  • 您的设置中有问题(-> 新工作区应该可以解决此问题)
  • 您的本地 Maven 存储库不知何故损坏了。尝试删除$HOME/.m2/repository/
  • 如果您启用了“始终更新”,请将其禁用。如果它现在很快,那么您的网络或公司的 Maven 存储库很慢。您将不得不再次禁用“始终更新”,忍受缓慢或与您的管理员交谈。
  • 尝试禁用所有不需要的插件。您可能需要为此安装第二个 Eclipse。也许其他插件之一会导致延迟。我在 eGit 插件中看到过这种情况,它有时会进入无限循环,试图刷新工作区状态。
  • Windows:不要在用户的主文件夹或 Windows 索引的任何文件夹中创建工作区。

如果关闭项目有帮助,那么您可能需要关闭尽可能多的项目。

【讨论】:

  • 有两件事与 Aaron 的诊断相反。首先,即使将刷新策略设置为“每天”,mvn test 开始测试的速度也是 Eclipse 的两倍(10 秒对 20 秒)。其次,Maven 刷新外部资源,而 eclipse 似乎正在检查工作区项目(并且不知何故需要更长的时间)。
  • 另一件事。即使我禁用“离开”更新策略,我仍然会在 Maven 日志中看到 2015-01-12 08:50:41,329 [Worker-27] DEBUG o.e.m.c.internal.embedder.MavenImpl - Read Maven project: C:\LAS\workspaces-luna\....\pom.xml in 1779 ms 登录(其中 .... 是我工作区中项目的路径)。这是我等待 Eclipse 启动测试的大部分时间。
  • m2e 插件尝试在某个时间点确定项目的类路径。那是它尝试将工作空间项目与 Maven 依赖项匹配的时候。这一步很“慢”,但不应该花费 2 秒。我有 60 个项目在这里打开,开始一个单元测试最多需要 1-2 秒。如果您更改 POM 文件或运行“更新项目”,它会非常慢(10 秒 - 2 分钟)。
  • 所以问题仍然是它在这 2 秒内做了什么。可以尝试创建一个新的工作区,只导入带有测试的项目吗?
  • 每次我开始测试时都会出现“读取 Maven 项目”日志消息,而不是在“更新 Maven 项目”时。他们需要 20 秒,而不是 2 秒。至于创建全新的工作区 - 我会尝试,但通过关闭所有其他项目可以很好地模拟。这确实加快了测试开始到类似于mvn test 的水平
【解决方案2】:

到目前为止,唯一有用的是关闭我工作区中的许多项目。当我的工作区有 30 个 Maven 依赖项时,单元测试需要 30 多秒才能启动。当我关闭这些项目并强制 Eclipse 转到本地存储库时,单元测试的开始需要 5 秒。

我发现开始时间和“外部”依赖关系之间没有相关性。只有“内部”(在工作区和打开的)依赖关系很重要。

【讨论】:

    【解决方案3】:

    如果可以,您会尝试将 m2e 1.4.x 与较旧的 Eclipse 版本一起使用吗?根据我在 m2e 用户邮件列表 (http://dev.eclipse.org/mhonarc/lists/m2e-users/msg05095.html) 上从 m2e 开发人员那里得到的回复,在 m2e 1.5 上引入了项目缓存大小的限制。当我们将 m2e 从 1.4 升级到 1.6(使用 Eclipse 版本)时,我们开始看到像您这样的问题。我想看看你的问题是否可以用 m2e 1.4.x 重新创建。谢谢,塔米

    【讨论】:

      【解决方案4】:

      我不认为过多的锁创建/访问是问题的根源。我的系统日志中也有数千行这样的行,以及 100 多个 maven 依赖项,但一切都很快。
      尝试在 Eclipse 之外运行测试。为此,请转到 .pom 目录并键入

      mvn test
      

      如果一切都很慢,那么eclipse不是问题的根源,可能是它在硬盘上的坏扇区或者谁知道是什么。
      但是,如果它的速度很快,那么 Eclipse 确实是问题所在。 您可以尝试关闭全局验证,方法是转到 Preferences>Validation,然后单击 Suspend all Validators,并确保您的项目不会覆盖全局验证设置。

      【讨论】:

        【解决方案5】:

        出于这个原因,我关闭了一个 maven 存储库,导致 m2e 挂起。 我只是在我的 /etc/hosts 中禁用了主机,它就起作用了。

        【讨论】:

          猜你喜欢
          • 2017-01-22
          • 1970-01-01
          • 1970-01-01
          • 2021-02-18
          • 1970-01-01
          • 1970-01-01
          • 2011-07-10
          • 1970-01-01
          • 2023-01-10
          相关资源
          最近更新 更多