Поддерживает ли Maven инкрементные сборки?
Как использовать Maven для поддержки инкрементных сборок? Есть ли где-нибудь гид? (лучшие результаты Google разочаровывают)
Ответы
Ответ 1
Maven поэтапно строит по умолчанию, но оказывается, что плагин компилятора (т.е. ядро javac) настолько быстр, что сборка свежего каждый раз не является узким местом с разумными размерами кодовой базы, а не сравнением с построением больших сборок или запуск больших наборов тестов. (Java, как и большинство языков, гораздо быстрее компилируется, чем С++.)
Ответ 2
Вы можете использовать плагин maven-incremental build, если ваш проект содержит сотни модулей. Это экономит много времени.
Ответ 3
Жизненный цикл Takari Maven
Да, теперь это возможно благодаря takari-lifecycle-plugin. Взгляните на этот образец проекта: maven-incremental-compilation
Образец вывода
[INFO] --- takari-lifecycle-plugin:1.10.2:compile (default-compile) @ maven-incremental-compilation ---
[INFO] Performing incremental build
[INFO] Compiling 2 sources to /home/mariuszs/maven-incremental-compilation/target/classes
[INFO] Compiled 1 out of 2 sources (670 ms)
Дополнительная информация
Ответ 4
Я не могу полностью определить динамику, которая управляет сообществом Maven, но не настолько дружелюбно иметь мелкомасштабный контроль над вашим процессом сборки.
Во всяком случае, после копания я нашел ответ, который работал у меня здесь: http://www.codesenior.com/en/tutorial/Java-Maven-Compile-Only-Changed-Files
Обратите внимание, что установка значения false
сначала меня путала, но здесь дается пояснение: fooobar.com/questions/156032/...
Воспроизводится здесь для удобства:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<useIncrementalCompilation>false</useIncrementalCompilation>
</configuration>
</plugin>
Здесь useIncrementalCompilation
установлен в false
.
Я могу подтвердить, что когда я запускаю свою сборку, я перешел от:
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 114 source files to /home/vagrant/workspace/splat/target/classes
к
[INFO] Compiling 1 source file to /home/vagrant/workspace/splat/target/classes
который побрил несколько секунд моей инкрементной сборки. Теперь все, что мне нужно сделать, - это выяснить, как отключить все ненужные рывки, замедляющие мои циклы редактирования/оценки...
Ответ 5
Maven поддерживает создание подмножеств проектов с несколькими модулями, используя аргументы командной строки -pl
, -am
и -amd
, чтобы указать модули для сборки, а также строить зависимости, а также строить иждивенцы соответственно. Он также будет компилировать измененные исходные файлы в любом данном модуле (на самом деле это не функция Maven, а функция javac).