2015-01-05 2 views
5

Я использую Eclipse для разработки большого проекта Maven (десятки зависимостей). Когда я пытаюсь выполнить единичный тест, я вижу паузу около минуты, в то время как в статусе отображается «проверка атрибутов запуска». Наблюдая за действиями Eclipse в Process Monitor, я вижу много файлов доступа к различным замкам и банкам в репозитории Maven. Похоже, Eclipse просматривает каждый JAR, от которого зависит мой проект. Как только этот доступ к файлу будет завершен, начнется фактический тест.Eclipse висит на «проверке атрибутов запуска» в больших проектах Maven

Я знаю совет, предлагаемый в «Why is Eclipse hanging at 57% with the status “Verifying launch attributes…” when launching a run configuration?», и я выполнил предложенные исправления. Я думаю, что Eclipse делает то, что он должен делать, переходя через каждый JAR. Мой вопрос: как можно отключить это поведение, как в Eclipse, так и в Maven?

Я использую Eclipse, Luna на Windows 7, m2e версия 1.5.0.20140606

Edit:

Ниже пример того, что я вижу в Process Monitor:

Короче говоря, мы проводим некоторые 10 секунд на разумной активности, такой как проверка состояния файлов Java и JAR, а затем мы тратим ~ 40 секунд на блокировку Maven repo и чтение файлов POM.

Зачем это затмение? И что мне нужно изменить, чтобы остановить его?

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 секунд !)

+0

Eclipse собирает все файлы JAR, необходимые для запуска виртуальной машины Java. Я не думаю, что это займет много времени; вы можете увидеть, действительно ли Eclipse читает JAR или он только проверяет, что они есть? –

+0

У вас такая же проблема, когда вы выполняете 'mvn test' из командной строки? –

+0

Eclipse блокирует локальный репозиторий и открывает каждый файл jar при подготовке к запуску. – Arkadiy

ответ

2

Пока что единственное, что помогает, - это закрыть много проектов в моей рабочей области.Когда у меня есть 30 зависимостей Maven, поступающих из моего workapce, единичный тест займет 30 + секунд. Когда я закрываю эти проекты и форсирую Eclipse, чтобы перейти в локальный репозиторий, начало модульных тестов занимает 5 секунд.

Я не вижу корреляции между временем начала и «внешними» зависимостями. Различают только «внутренние» (в рабочем пространстве и открытые) зависимости.

0

Не думаю, что причиной возникновения проблемы является чрезмерное создание/доступ к замкам. У меня также есть тысячи этих строк в журнале в моей системе и более 100 зависимостей maven, но все быстро освещается.
Попробуйте запустить тесты за пределами Eclipse.To сделать это, перейдите в каталог .pom и введите

mvn test 

Если все снова идет медленно, то затмение не является источником проблемы, может быть его плохих секторов на HDD или кто знает что.
Однако, если его быстро, то действительно Eclipse является проблемой. Вы можете попробовать отключить проверку по всему миру, выбрав «Настройки»> «Проверка», а затем нажмите «Приостановить все проверки» и убедитесь, что ваш проект не переопределяет глобальные параметры проверки.

1

Из чата:

теста МВН тратит ~ 20 секунд загрузка Maven-Metadata.xml для наших собственных пакетов из собственного хранилища моментальных снимков - что-то я не вижу Затмение делать. Задержка до начала теста mvn не показывает большой задержки.
Закрытие всех проектов, за исключением того, что вам нужно приносит время сборки до 5са П сконфигурирован, чтобы проверить каждый построить изменения в снимке, поэтому загрузка происходит каждый раз, когда

m2e плагин Затмение использует то же стратегии как Maven. Если вы скажете Maven для проверки моментальных снимков для каждой сборки, тогда Eclipse также сделает это. Если mvn test тратит 20 секунд на проверку зависимостей, Eclipse будет нуждаться в том же времени (вы должны увидеть это в Maven Console в Eclipse, вы можете найти эту консоль в том же выпадающем меню, что и Stack Trace Console - найдите кнопку с маленьким + в правом верхнем углу в консоли View)

Предложения по сокращению времени сборки:

  • Изменения конфигурации из РОМА, чтобы проверить снимки только один раз в день. Используйте mvn -U, чтобы обновить их в течение дня. Я думаю, что это изменение принесет наибольшую прибыль.
  • Используйте CI-сервер, чтобы создавать все с последними моментальными снимками, поэтому вам не нужно тратить время
  • Потяните все зависимости моментальных снимков в один проект Maven; Maven загружает только моментальные снимки, если они не являются частью текущей сборки.
  • обновите свою сеть и попробуйте настроить прокси-сервер Maven (где вы загружаете моментальные снимки). Мой опыт в том, что этот шаг дорогой и не дает такого выигрыша.
  • закрыть столько проектов, сколько сможете. Это, как правило, ускоряет работу Eclipse, но, очевидно, не помогает с моментальными снимками.
  • Избегайте моментальных снимков; больше работайте с выпущенными сборками. Придумайте процесс быстрого выпуска, чтобы вы могли делать много выпусков в день, если возникнет такая необходимость.

[EDIT] Чтение файла XML не занимает 2 секунды, если у вас не хватает памяти. Проверьте это (используйте «Общие/Куча» в настройках).

Если это все еще медленно, то m2e делает что-то в этом проекте «Прочитайте проект Maven». Я предполагаю, что он пересчитывает путь к классам. Если это занимает много времени, то либо:

  • что-то сломалось в настройках (-> Новая рабочая область должна это исправить)
  • ваш локальный репозиторий Maven каким-то образом поврежден. Попробуйте удалить $HOME/.m2/repository/
  • Если у вас есть опция «всегда обновлять», отключите это. Если это быстро, то ваша сеть или компания Maven repo работают медленно. Вам придется либо снова отключить «всегда обновлять», либо жить с медленностью, либо поговорить с администраторами.
  • Попробуйте отключить все плагины, которые вам не нужны. Возможно, вам понадобится установить второе Eclipse для этого. Возможно, один из других плагинов вызывает задержки. Я видел это с помощью плагина eGit, который иногда переходил в бесконечный цикл, пытаясь обновить состояние рабочей области.
  • Windows: Не создавайте рабочее пространство в домашней папке пользователя или в любой папке, в которой индексы Windows.

Если помощь при закрытии проектов, возможно, вам придется закрыть столько проектов, сколько сможете.

+0

Две вещи противоречат диагнозу Аарона. Во-первых, даже после установки политики обновления на «ежедневно» тест mvn начинает тестирование в два раза быстрее, чем Eclipse (10 секунд против 20 секунд). Во-вторых, Maven обновляет внешний ресурс, в то время как eclipse, по-видимому, проверяет проекты рабочей области (и как-то больше это делает). – Arkadiy

+0

Еще одна вещь. Даже когда я отключу политику обновления «aways», я все еще вижу «2015-01-12 08: 50: 41,329 [Worker-27] DEBUG oemcinternal.embedder.MavenImpl - проект Read Maven: C: \ LAS \ workspaces-luna \ .... \ pom.xml в записи 1779 мс в журналах Maven (где .... - путь к проекту в моей рабочей области). Вот где большую часть времени проводил, когда я жду, когда Eclipse начнет тесты. – Arkadiy

+0

Плагин m2e пытается определить путь к классу проекта в определенный момент времени. Именно тогда он пытается сопоставить проекты рабочей области с зависимостями Maven. Этот шаг «медленный», но он не должен занимать 2 секунды. У меня открыто 60 проектов, и здесь, начиная единичный тест, занимает 1-2 с макс. Это очень медленно (10 с - 2 минуты), если вы меняете файл POM или запускаете «Update Project». –

1

Если вы можете, попытаетесь ли вы использовать m2e 1.4.x со старшим выпуском Eclipse? Согласно ответе, полученному от разработчика m2e в списке рассылки m2e-user (http://dev.eclipse.org/mhonarc/lists/m2e-users/msg05095.html), на m2e 1.5 был введен лимит размера кэша проекта. Когда мы обновили m2e с 1.4 до 1.6 (с версией Eclipse), мы начали видеть такие проблемы, как ваши. Я хотел бы посмотреть, можно ли воссоздать вашу проблему с m2e 1.4.x. Спасибо, Tami

Смежные вопросы