Есть ли простой Java-линтер CLI? [закрыто]

86

Я пытался найти Java-линтер, способный работать в интерфейсе командной строки, отличном от Eclipse, который я могу назвать ловушкой фиксации для git или нашего сценария автоматической сборки. Такое существует?

В идеале он должен проверять наличие неиспользуемых импортов и переменных, соблюдение правил стиля, правильное использование исключений и т. Д. Хотя некоторые из этих функций были бы лучше, чем то, что есть сейчас - ничего!

СинийДраконX
источник
2
//, Разве это не запрос рекомендации по программному обеспечению?
Натан Басанезе,
3
Я не знаю, следует ли мне спрашивать здесь или в мета, но что плохого в таких вопросах, которые требуют рекомендаций? Конечно, на этот вопрос нет однозначного и объективного ответа, но, опять же, это касается и многих технических вопросов. Этот вопрос можно переформулировать так: «У меня нет линтера, и я не знаю, какие инструменты доступны, актуальны и широко используются». Это поможет? Я бы предпочел найти на StackOverflow тщательно отобранных, ранжированных и регистрируемых вопросов и ответов, чем где-либо еще. Куда идти людям с подобными вопросами, как не сюда?
Кайл Крулл

Ответы:

78
  • SpotBugs (ранее Findbugs ) для поиска существующих ошибок. ОЧЕНЬ ХОРОШО!
  • PMD для поиска шаблонов, которые могут привести к ошибкам (например, неиспользуемые переменные)
  • Checkstyle для обеспечения соблюдения стандартов и соглашений кодирования (например, пробел, Javadoc)
  • Error Prone перехватывает прямо на этапе компиляции вашего приложения

У всех этих инструментов есть некоторые общие правила. Есть много других подобных инструментов, но они самые популярные и поддерживаемые.

микрофон
источник
Вы бы сказали, что Findbugs и PMD делают разные вещи? В прошлый раз, когда я изучал это, я пришел к выводу, что они достаточно похожи, что нам нужен был только один (и выбрали PMD). Мы также запустили Checkstyle и, да, обнаружили, что даже PMD и Checkstyle пересекаются.
Том Андерсон
@TomAnderson - я бы сказал, что они определенно делают разные вещи, да. есть ценность для них обоих (очевидно, что есть и совпадение).
jtahlborn
Да, совсем разные цели. Findbugs пытается найти АКТУАЛЬНЫЕ ошибки, иногда путем глубокого анализа. PMD просто ищет шаблоны, которые, как известно, иногда приводят к ошибкам. Лично я использую FindBugs и Checkstyle, так как перекрытия меньше.
mikeslattery
вы можете упомянуть, что pmd имеет 2 разных типа проверок: pmd и cpd.
jtahlborn
4
Findbugs теперь называется SpotBugs (на GitHub )
Matruskan
12

Кроме того, обратите внимание на Sonar , который сочетает в себе многие другие инструменты и обеспечивает хороший обзор.

правила из Checkstyle, FindBugs, PMD, Clirr, fb-contrib.


Не знаю, как именно добавить его в ловушку после фиксации, но http://docs.codehaus.org/display/SONAR/Analyzing+with+Maven может быть хорошей отправной точкой (особенно если вы используете maven).

Возможно, даже подумайте об использовании одного из подходов, перечисленных в http://docs.codehaus.org/display/SONAR/Continuous+Integration, поскольку кажется, что вы, возможно, пытаетесь найти лучший инструментарий для всей своей команды («Хотя некоторые подмножества те особенности , было бы лучше, что мы не имеем сейчас - ничего»

Егений
источник
2
+1 Через четыре года после того, как вопрос был задан, SonarQube кажется более активным, современным и законченным. Раньше он сочетал в себе инструменты, упомянутые выше, но теперь он реализует их изначально, избегая дублирования blog.sonarsource.com/…
user2518618
-1

Это ИМЕННО то, над чем я работаю: инструмент, удобный для интерфейса командной строки, который будет использоваться для проверки качества кода Java. Он также имеет интерактивную модальность. Вы можете запускать отдельные запросы (чтобы проверить наличие отдельных предупреждений) или все запросы вместе.

Инструменты находятся на начальной стадии, но я работаю над ними почти каждый день. Он доступен здесь:

https://github.com/ftomassetti/effectivejava

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

Федерико Томассетти
источник
3
Последний коммит этого проекта был 2 года назад. Не уверен, что это сейчас активно разрабатывается.
Дэниел Игл,
Нет это не так. Но потом я начал работать над JavaParser. Этот проект не дает вам CLI, чтобы его можно было построить поверх него.
Федерико Томассетти