Есть ли способ настроить плагин maven-compiler-plugin для работы с относительными путями для исходных файлов? - PullRequest
0 голосов
/ 17 апреля 2020

maven-compiler-plugin, когда он компилирует классы src или test, он генерирует в выходном каталоге target список со всеми скомпилированными файлами Java (inputFiles.lst). Например, target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

Файлы Java, перечисленные в этом файле, содержат абсолютные пути скомпилированных файлов Java (по одному на строку):

/tmp/build/8565a572/my-maven-project/my-module/src/main/java/com/example/MyClass.java

Наоборот, сгенерированные файлы также перечислены в том же каталоге в файле createdFiles.lst, но с относительными путями:

com/example/MyClass.class

Это делает этот каталог target непереносимым (без дополнительных обходных путей), и эту сборку нельзя использовать повторно , (отправляется по электронной почте или между контейнерами заданий CI / CD, которые используют случайный путь, видимый в файле inputFiles.lst.

Можно ли настроить плагин maven-compiler-plugin на использование относительных путей к источникам Java? I inputFiles.lst хотел бы сохранить только относительные пути:

src/main/java/com/example/MyClass.java

Вариант использования : в среде Concourse (CI / CD), где встроенные классы можно использовать повторно для ускорения Задания CI / CD - создать один раз, повторно использовать на всех последующих этапах. Конвейеры CI / CD содержат более 10 вещей, которые можно сделать с кодом (игнорируйте порядок и значение, просто учтите, что есть много таких вещей, которые можно сделать):

  • компиляция (скомпилируйте только здесь, используйте повторно)
  • проверки зависимостей
  • модульное тестирование
  • отчеты о покрытии
  • соответствие и проверки безопасности
  • интеграционные тесты
  • сквозные / системные тесты
  • пакет
  • et c.

Из-за абсолютных путей ( примечание : 8565a572 против 19ad4352), даже если я В каталоге target вместе с заданиями CI / CD код всегда компилируется с нуля:

[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1840 source files to /tmp/build/19ad4352/my-maven-project/my-module/target/classes

И если вы повторите эту операцию несколько раз на CI / CD, вы потеряете минуты ожидание каждой фиксации.

И, например, mvn test-compile для одного модуля (500 Java файлов) занимает 20 секунд , когда выполняется компиляция против 5 секунд при повторном использовании / кэшировании / передаче встроенных классов.

Обходной путь может быть sed -и заменить во всех inputFiles.lst для обновления новых текущих абсолютных путей.

...