我正在使用Maven 3.2.3,并且有时需要频繁地构建我的项目。
我知道clean目标需要很长时间,但我不能省略它。
请提供建议....
编辑:
注意:在我的情况下,clean并不需要花费太多时间。它只需要1秒钟的时间完成。剩余的时间用于install。
编辑:
注意:在我的情况下,clean并不需要花费太多时间。它只需要1秒钟的时间完成。剩余的时间用于install。
对于我来说,使用多线程运行maven构建可以加快构建速度。 例如:
mvn clean install -T100
-T参数是用来根据硬件配置指定使用多少线程。
Maven 3.x 可以执行并行构建。命令如下:
- mvn -T 4 clean install 使用 4 线程进行构建
- mvn -T 1C clean install 每个 CPU 核心使用一个线程
- mvn -T 1.5C clean install 每个 CPU 核心使用 1.5 个线程
图中每个节点表示多模块构建中的一个模块,“级别”仅表示到内部反应堆依赖图中第一个模块的距离。Maven 根据多模块构建中声明的模块间依赖关系计算此图。请注意,父 Maven 项目也是一个依赖项,这就解释了为什么大多数项目图的顶部只有一个节点。反应堆之外的依赖项不会影响此图。
最后,如果您想跳过测试执行,也可以使用 -DskipTests
参数。
注意:某些插件可能不兼容多线程构建器,虽然它可能能工作,但会出现以下警告信息。您可能需要查看插件文档以获得多线程支持。
[WARNING] *****************************************************************
[WARNING] * Your build is requesting parallel execution, but project *
[WARNING] * contains the following plugin(s) that have goals not marked *
[WARNING] * as @threadSafe to support parallel building. *
[WARNING] * While this /may/ work fine, please look for plugin updates *
[WARNING] * and/or request plugins be made thread-safe. *
[WARNING] * If reporting an issue, report it against the plugin in *
[WARNING] * question, not against maven-core *
[WARNING] *****************************************************************
[WARNING] The following plugins are not marked @threadSafe in test-project:
[WARNING] de.dentrassi.maven:rpm:0.9.2
[WARNING] Enable debug to see more precisely which goals are not marked @threadSafe.
[WARNING] *****************************************************************
mvn clean install
[INFO] 总计时间: 01:05 小时mvn clean install -DskipTests
[INFO] 总计时间: 18:35 分钟mvn clean install -Dmaven.test.skip -DskipTests
[INFO] 总计时间: 10:58 分钟mvn -T 1C clean install -Dmaven.test.skip -DskipTests
[INFO] 总计时间: 04:00 分钟mvn -T 1C clean install -Dmaven.test.skip -DskipTests -Dmaven.javadoc.skip=true
mvn clean
这个任务在构建之前需要2分钟来清理TARGET文件夹。我创建了一个名为quickclean的新任务,并代替clean,这样就可以用mvn -T 1C quickclean install -Dmaven.test.skip -DskipTests
方式执行。这个新的任务quickclean只是将build文件夹重命名为TARGET-yyyy-MM-dd-HH-mm(非常快)。所以现在,每次您进行一个新的mvn quickclean install...
,都会有一个带有编译时间的文件夹。不方便的地方是,这可能会在硬盘上占用大量的空间,因此您必须有时清理所有这些目录。 因此,我创建了另一个名为:trashclean的任务,将所有这些文件夹放入垃圾箱中。 我可能每周或每月运行此任务,具体取决于我的工作情况 mvn trashclean
。<properties>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd-HH-mm</maven.build.timestamp.format>
<trashdir>trash/target-${maven.build.timestamp}</trashdir>
</properties>
<profile>
<id>quickclean</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>rename_target</id>
<phase>pre-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<move todir="${trashdir}" failonerror="false">
<fileset dir="target/"/>
</move>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>trashclean</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>clean_trash</id>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<delete dir="trash/" failonerror="false"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
-Dmaven.javadoc.skip=true
。这将跳过创建javadocs,对我的机器有很大帮助。 - Archmedemvn -T 1C clean install -Dmaven.test.skip -DskipTests
将我的构建时间从25分钟缩短到了3分53秒。谢谢! - Janet-DskipTests=true
mvn.bat
中:set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m
创建RAM驱动器(方法取决于您的操作系统),并将其挂载到 /Users/Username/volatile 文件夹
在MVN_HOME/lib中找到 maven-module-builder-X.X.X.jar
在JAR文件中修改 org/apache/maven/model/pom-4.0.0.xml 文件,通过修改以下内容来实现:
<build><directory>/Users/Username/volatile/${project.groupId}/${project.artifactId}/${project.version}/target
是的,这是一种hack方法,有些maven插件可能会停止工作。
如果使用命令行,您可以检查您的计算机有多少个核心并使用所有核心。如果您还想跳过测试,可以添加-DskipTests
。例如,我有一个8核处理器:
mvn -T 8C clean install -DskipTests
我的额外技巧是使用Ramdisk
.m2/repository
安装到该Ramdisk下(D:/m2/
)D:/maven/conf/settings.xml
以使用该Ramdisk存储库(<localRepository>D:/m2</localRepository>
)在我的机器上,我将
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.954 s (Wall Clock)
[INFO] Finished at: 2021-02-17T13:07:51+01:00
[INFO] Final Memory: 55M/642M
[INFO] ------------------------------------------------------------------------
Into
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.805 s (Wall Clock)
[INFO] Finished at: 2021-11-11T10:48:14Z
[INFO] ------------------------------------------------------------------------
两个结果都是高端的 (-DskipTests -T 12
)
警告: 在关机前不要忘记持久化ramdisk,否则你的工作将会丢失。
-Djava.io.tmpdir=D:/temp
也很重要。 - Grim<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath />
</parent>
我发现版本2.7.0比其他版本更快地下载依赖项。