Makefile для запуска команды Maven, но в командах есть символ «:»

#maven #makefile

#maven #makefile

Вопрос:

Пожалуйста, небольшой вопрос относительно Makefile. В настоящее время мы используем Makefile для выполнения команд. (Многие из них). Одна конкретная команда, которая является сборкой java Maven, завершается с ошибкой.

Вот фрагмент Makefile:

 .PHONY: help
.DEFAULT_GOAL := help

help: ## This help.
    @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-] :.*?## / {printf "33[36m%-30s33[0m %sn", $$1, $$2}' $(MAKEFILE_LIST)

build:
    mvn clean install -U -Pintegration -Dspringdoc.writer-with-default-pretty-printer=true javadoc:javadoc checkstyle:checkstyle spotbugs:spotbugs pmd:pmd pmd:cpd org.pitest:pitest-maven:mutationCoverage jacoco:prepare-agent jacoco:report dependency:tree sonar:sonar

  

Чтобы подчеркнуть, make build здесь ничего не делается:

 make build
make: Nothing to be done for `build'.

  

В среде IDE я вижу ошибку:

 $, <conditional>, <directive>, EOL, 't' or macro expected, got ':'
  

Чтобы также добавить информацию, это работает:

 .PHONY: help
.DEFAULT_GOAL := help

help: ## This help.
    @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-] :.*?## / {printf "33[36m%-30s33[0m %sn", $$1, $$2}' $(MAKEFILE_LIST)

clean: ## mvn clean
    mvn clean;
  

Вызов make clean фактически будет очищен. make help также работает.

Но не работает для этого правила:

 build:
    mvn clean install -U -Pintegration -Dspringdoc.writer-with-default-pretty-printer=true javadoc:javadoc checkstyle:checkstyle spotbugs:spotbugs pmd:pmd pmd:cpd org.pitest:pitest-maven:mutationCoverage jacoco:prepare-agent jacoco:report dependency:tree sonar:sonar

  

Я не понимаю, что это значит.
Могу я спросить, как это исправить, пожалуйста?

Для подтверждения, точно такая же команда maven, выполняемая с терминала, работает отлично.

Спасибо за вашу помощь.

Комментарии:

1. Удалите @ из команды и посмотрите, что make на самом деле передается в качестве командной строки awk .

2. Какая команда не выполняется? сделать справку? сделать сборку?

3. Makefile в порядке. Ваша «IDE» запутывается.

4. правило, которое не запускается, — это make build . Я обновил вопрос, чтобы подтвердить детали

5. Ваш вопрос очень запутанный. Сначала вы, кажется, говорите, что команды работают нормально, но ваша среда разработки жалуется. Это проблема с вашей IDE, которую вы здесь не называете, поэтому вам следует проверить систему справки / поддержки вашей IDE и / или задать здесь информацию о том, какую IDE вы используете, и добавить соответствующие теги; похоже, это не вопрос make или makefile. Затем вы предполагаете, что make build это «не работает», Но вы не предоставляете никаких сообщений об ошибках, выходных данных и т. Д. Поэтому мы никак не можем помочь вам решить эту проблему.

Ответ №1:

Используйте функцию Make «call».

 define buildfn
    mvn clean install -U -Pintegration -Dspringdoc.writer-with-default-pretty-printer=true javadoc:javadoc checkstyle:checkstyle spotbugs:spotbugs pmd:pmd pmd:cpd org.pitest:pitest-maven:mutationCoverage jacoco:prepare-agent jacoco:report dependency:tree sonar:sonar
endef
  

Затем запустите его следующим образом:

 build:
    $(call buildfn)
  

Вот справочная документация: функция вызова

Комментарии:

1. Это действительно правильно, спасибо @luqo33, узнал что-то новое с makefile