#cmd #azure-devops #pmd
#cmd #azure-devops #pmd
Вопрос:
У меня есть задача командной строки, запущенная в Windows-образе конвейера Azure DevOps. Эта задача после выполнения команды pmd.bat завершается с кодом 4. Где, поскольку это отлично работает в моем локальном CMD.
task: CmdLine@2
inputs:
script: |
echo starting execution
cd $(Build.SourcesDirectory)
xcopy *.jar $(Build.SourcesDirectory)code
cd $(Build.SourcesDirectory)pmd-bin-6.24.0bin
pmd.bat -d "$(Build.SourcesDirectory)codesrcapexcode.cls" -f xml -R "$(Build.SourcesDirectory)codebuildMyApexRule.xml" -reportfile pmd.xml
Кто-нибудь может мне помочь, в чем может быть проблема?
Ответ №1:
Выход с кодом 4 в PMD предполагает, что обнаружено по крайней мере одно нарушение.
Вот два решения, позволяющие заставить команду работать:
-
Вы можете установить параметру
<failurePriority>
значение 1 (его значение по умолчанию равно 5), чтобы все нарушения воспринимались как предупреждение и отображались в выходных данных сборки. И затем вы можете увидеть, где команда выполняется неправильно. -
Вы можете установить для параметра
<failOnViolation>
значениеfalse
(его значение по умолчанию равноtrue
), чтобы команды не выполнялись с ошибкой, даже если проверка проверки завершится неудачей. Единственное отличие от решения 1 заключается в том, что предупреждающие сообщения не отображаются.
Вы можете задать параметры в файле POM:
<build>
<plugins>
<plugin>
<failurePriority>1</failurePriority>
<failOnViolation>false</failOnViolation>
</plugin>
</plugins>
</build>
или задайте их в качестве свойств во встроенном скрипте pmd.bat.
Комментарии:
1. Нет, проблема, похоже, не в ошибке xcopy, потому что я вижу в журнале, шаг xcopy сработал нормально, и файл скопирован правильно.
2. запуск выполнения D:apexcustom-rule-1.0.0-SNAPSHOT.jar скопированный 1 файл (ы) Успешно обработал 8 файлов; Сбой при обработке 0 файлов D:a1scodebuild D:a1spmd-bin-6.24.0bin .. D:a1s 17 августа 2020 г., 6:10:15 УТРА net.sourceforge.pmd. PMD поощряет временный анализ ПРЕДУПРЕЖДЕНИЕ: Этот анализ мог бы быть быстрее, пожалуйста, рассмотрите возможность использования инкрементного анализа: pmd.github.io/pmd-6.24.0/pmd_userdocs_incremental_analysis.html ##[ошибка]Cmd.exe завершается с кодом ‘4’. Завершение: командная строка
3. @priya Выход без сообщения об ошибке довольно странный. Вы когда-нибудь пытались запустить задачу без
pmd.pat
команды?4. целью задачи было выполнить pmd.bat и сгенерировать файл отчета… это отлично работает в моем local…so никаких проблем с the bat file..am не удается понять, почему он завершает работу и не выполняет задачу
5. @priya Выход с кодом 4 в PMD предполагает, что обнаружено по крайней мере одно нарушение. Вы можете установить параметру
<failurePriority>
значение 1 (его значение по умолчанию равно 5), чтобы все нарушения воспринимались как предупреждение и отображались в выходных данных сборки. И затем вы можете увидеть, где команда выполняется неправильно.
Ответ №2:
Как правильно объяснила Джейн Ма-MSFT, код выхода 4 означает, что обнаружены некоторые нарушения и сборка завершилась неудачно.
Смотрите https://pmd.github.io/latest/pmd_userdocs_cli_reference.html#exit-status для документации.
4: Обнаружено по крайней мере одно нарушение, если не установлено значение -failOnViolation false.
Вы могли бы настроить свой скрипт на add -failOnVioltation false
, если вы никогда не хотите, чтобы сборка завершалась неудачно, и просто хотите, чтобы был сгенерирован отчет:
Указывает, завершается ли PMD с ненулевым статусом, если обнаружены нарушения. По умолчанию PMD завершается со статусом 4, если обнаружены нарушения. Отключите эту функцию с помощью
-failOnViolation false
, чтобы вместо этого завершить работу с 0 и просто вывести отчет.