Как убедиться, что плагин Maven является потокобезопасным

У меня есть несколько плагинов maven, которые были разработаны в моей команде, и эти плагины не помечены как @threadSafe. Я выполнил около 50 заданий и не вижу в этом несоответствия, но я хотел бы знать, есть ли способ проверить это программно.

И что нужно искать, что сделает плагин небезопасным для многопоточности

1 ответ

На основании https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3 моджо считается до тех пор, пока нет изменяемого состояния, которое является общим для разных экземпляров моджо - например, статическая ссылка на объект с изменяемым содержимым.

При сборке одного модуля создается экземпляр моджо, и его метод вызывается один раз в одном потоке.

OTOH, если собираются два модуля, и ни один из них не зависит от другого, создаются отдельные экземпляры моджо (по одному для каждого модуля), и ихexecute()методы могут вызываться одновременно в разных потоках - если-Tиспользуется флаг cli и соответствующие моджо.

По ссылке выше перечислены некоторые конкретные вещи, которые следует проверить:

  • Убедитесь, что все статические поля/переменные в плагине/коде плагина не подвержены проблемам с потоками.
  • Возможно, вам захочется обратить особое внимание на статические переменные-члены подклассовjava.text.Format(NumberFormat,DateFormatи т. д.), большинство из которых не являются потокобезопасными и не могут использоваться совместно как статические переменные.
  • Проверьте любое сплетениеcomponents.xml; если определенные компоненты являются одиночными, они должны быть потокобезопасными.
  • Проверьте наличие известных испорченных библиотек.
  • Проверьте потокобезопасность любых других сторонних библиотек. Этот последний пункт может оказаться немного сложным, но запросы в списках рассылки могут вам помочь.

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

Другие вопросы по тегам