TeamCity + Inspections + Maven = doesn't work

Извиняюсь, что по русски (тут похоже принято общаться по английски), но решил не использовать свой корявый английский для упрощения понимания.

Вводные данные: есть проект, который перевели на maven2. Соответственно iml файлы считаются вторичными и под version control не лежат - все их импортируют локально из maven.
Есть настроенные профили и scope для inspections. Есть билд на team city, который периодически прогоняет в соответствии с этими настройками весь код. Результат билда должен быть эквивалентен результату, который получается при ручном запуске из Idea Analyze\Inspect Code...
Версия TeamCity 6.0
Версия Idea 10.0.1 Ultimate Edition

Для проекта в формате Idea все работает как надо. Профили и scope подхватываются, получается нужный результат.
Что касается Maven 2, то хотя такая возможность в билде есть, она почему то игнорирует все настройки. И выдает не отфильтрованный в соответствии с ними результат, а 100500 ненужных ошибок.

Я два дня занимался камасутрой с билдом, перепробовав всевозможные варианты, гуглил и читал документацию и аналогичные темы, но результата не добился. Формально профиль вроде бы подхватывается - про крайней мере так утверждает билд лог: Inspecting with profile 'InsProfile'. Да и в командной строке запуска видно, что профиль передается в качестве параметра:
com.intellij.idea.Main inspect  /var/tainted/build-agent/work/f1_inspections_test/inspetest/pom.xml  /var/tainted/build-agent/work/f1_inspections_test/inspetest/.idea/inspectionProfiles/InsProfile.xml

Однако в результате билда все равно упорно высвечиваются inspections, которые вообще говоря должны быть выключены. Выключать я пытался как целиком, так и настраивая для различных комбинаций scope. Но все мои попытки отключить билдер игнорировал.

В общем вопросы:
1. Как настроить билд для maven2, чтобы он таки не игнорировал профиль?
2. Зачем нужны две настройки Inspections profile path и Inspections profile name? Разве они делают не одно и тоже? Которая имеет приоритет?
3. http://confluence.jetbrains.net/display/TCD6/Inspections - там упомянуто, что scope для teamcity настраивается как-то по другому. Можно ли как то использовать scope из idea? Дело в том, что возможностей такого scope не хватает, так как "they do not support file-level patterns". А нужно настроить паттерны так, чтобы исключить кучу всяких ненужных файлов, разбросанных по всему проекту (в основном это кодогенеренный файлы), но их можно выцепить по маске. Да и в целом получается, что разные scope в билде и idea приводят к разной выдаче результата, что неприемлемо.
4. scope работает для проекта в idea-формате, если его добавить в настройки профиля. То что работает - это я экспериментально проверил, меняя scope и сравнивая результаты. Но непонятно, как именно. Потому что если делать Analyze\Inspect Code... то там scope явно указывается, и понятно что происходит. А в билде он как то косвенно подхватывается через настройки для отдельных inspections, причем scopes может быть несколько. Какой там алгоритм работы?
5. У меня есть запасной вариант, что раз уж maven2 не работает, то сделать билд на формате idea. Но при этом не хочется коммитить iml под source control. Можно ли как то сделать, чтобы на билдере эти iml импортировались из maven, а потом уже прогонять inspections?

7 comments
Comment actions Permalink

Hello Timur,

could you please try to place your profile.xml somewhere else. As when you run inspections with Maven, IDEA should ignore all settings located under .idea directory. As you said - .idea (as well as .imls) is secondary setting.

As for profile name/path to profile:
Actually you can store your profile in .ipr file or in .idea/inspectionProfiles/profile_file.xml. Then you can point IDEA which profile to use just by profile name. When you want to use profile which is located (corresponding xml file) in version control or elsewhere you should point IDEA to use corresponding profile file.

Thank you

0
Comment actions Permalink

Спасибо что откликнулись, но я все же по русски, а то боюсь по английски напишу так, что просто не поймете ;)

То что maven конфигурация сама не найдет .idea это понятно, я на это и не рассчитываю.
Но я же явно задал полный путь к профилю в настройках билда, по утверждению логов он передается как параметр в строку запуска, и даже Inspecting with profile 'InsProfile'...

Или же, дальше у вас стоит какой-то фильтр, который обнаруживает, что профиль лежит в .idea и заставляет его игнорировать? И вы рекомендуете перенести профиль в другое место, чтобы обойти фильтр?

Я могу пояснить, почему профиль хранится именно там. Потому что он общий для всей команды. Все должны шарить общий профиль инспекций чтобы работать с ними локально, а билдер на нем делает регулярную полную проверку проекта. Разумеется, настройки везде должны быть одни и те же.

Если предположение про фильтр верно, то конечно я могу сделать предварительный build step, который будет копировать оригинал из .idea куда то еще.

0
Comment actions Permalink

Timur,

when you ask TeamCity to run inspections from Maven - IDEA will import your project from pom.xml and won't reuse .idea. I suspect that it will overwrite everything it found in .idea directory. You can try it locally - just try to open your pom.xml and reject to use existing configuration files.

So I would recommend to store profile somewhere else now.

I see the problem - when you want to change the profile, everyone  would have to reimport it. Why do you need Maven on the first place? As far as I know it is possible to supoort up-to-date .idea/.imls and use pom.xml for build purpose only.

Thank you

0
Comment actions Permalink

У нас так: под svn лежит проект в pom и некоторые (не все) настройки в .idea. При первом открытии проекта разработчик импортит его из pom. При этом настройки в .idea не перетираются и нормально потом используются. Обновление общих настроек делается просто через svn update. То есть ничего реимпортить не надо, просто проапдейтил .idea - и у тебя новые настройки.

Maven используем для скачивания по зависимостям внешних библиотек и вообще все скрипты сборки - на нем. iml не кладем под svn чтобы не создавать мусорных изменений.

То что билд может перетирать .idea при реимпорте - да это мысль. Проверю в понедельник, как приду на работу.

Остается вопрос по поводу работы scope. При нажатии кнопки "Analyze" scope указывается явно. В билде его указать нельзя и они как-то косвенно подхватываются через профиль инспекций (там для каждого inspection можно указать список scope). То что они подхватываются и влияют - это я уже экспериментально установил. Но как именно они влияют на build мне непонятно.

0
Comment actions Permalink

Снова вернулся к экспериментам.

Результаты такие:
На каталог .idea билд не влияет, по крайней мере профили инспекций лежат на своем месте и не меняются.
Попытка переложить профиль в другое место не помогла - эффект тот же самый: все логи утверждают что нужный профиль используется, однако реальные значения настроек оттуда не берутся, выключенные инспекции продолжают работать.

0
Comment actions Permalink

Тимур. Это скорее всего просто баг, для которого, к сожалению, в данный момент нет обходного пути. Я добавил по этому поводу запись в наш трекер - http://youtrack.jetbrains.net/issue/TW-15455 . Вы можете следить за его состоянием.

При обнаружении проблем в TeamCity (равно как и в других продуктах JetBrains) лучше добавляйте баги прямо туда. Чтоб не потерялись.

Спасибо!

0
Comment actions Permalink

да, я так и сделал в итоге:
http://youtrack.jetbrains.net/issue/TW-15440
так что теперь их два :)

Все еще упорно пытаюсь настроить билд обходными путями, так как опыт показывает, что если нет билда, народ ломает их десятками и сотнями. Но пока результаты не очень.

0

Please sign in to leave a comment.