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
для обновления новых текущих абсолютных путей.