[英]Does Maven support incremental builds?
如何使用 Maven 來支持增量構建? 某處有指南嗎? (谷歌搜索結果令人失望)
我無法弄清楚驅動Maven社區的動態,但對於對構建過程進行細粒度控制並不友好。
無論如何,在挖掘之后我找到了一個對我有用的答案: http : //www.codesenior.com/en/tutorial/Java-Maven-Compile-Only-Changed-Files
請注意,首先將值設置為false
會使我感到困惑,但此處給出了解釋: https : //stackoverflow.com/a/19653164/409638
為方便起見,這里轉載:
<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
這削減了我的增量構建的幾秒鍾。 現在我所要做的就是弄清楚如何禁用所有其他不必要的錯誤,這會減慢我的編輯/評估周期......
默認情況下,Maven逐步構建,但事實證明編譯器插件(即javac的核心)是如此之快以至於每次構建新鮮都不是代碼庫大小合理的瓶頸,而不是與構建大型程序集或運行大型測試相比套房。 (與大多數語言一樣,Java的編譯速度比C ++快得多。)
如果您的項目有數百個模塊,則可以使用maven-incremental構建插件 。 它節省了大量時間。
是的,現在可以感謝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)
Maven支持使用命令行參數-pl
, -am
和-amd
構建多模塊項目的子集,以指定要構建的模塊,還分別構建依賴項和構建依賴項。 它也只會在任何給定模塊中編譯已更改的源文件(實際上不是maven功能,而是javac功能)。
更新:真正的增量構建支持——類似於 Gradle 中的支持——已經在 Maven 代碼庫中實現。 介紹視頻在這里: https : //youtu.be/DEQG4CNFMFE
雖然到目前為止 maven 核心不支持緩存,但您可以查看這個 PR - 它是一個真正的增量構建,支持遠程緩存。 它還支持所有插件 - https://github.com/apache/maven/pull/526
您可以從分支構建和嘗試 maven 並享受。 我們正在努力將緩存以核心擴展的形式引入 Maven
親切的問候亞歷克斯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.