Shu*_*sia 33 java multithreading scala build maven
我有一个多模块java项目.Maven需要大约40秒来构建它.我通过指定-T和-Cargs来尝试使用多线程构建的maven,因为没有使用线程和内核.但我没有看到我的构建的时间有任何显着改善.
我正在使用maven 3.2.3,有时我需要经常构建我的项目.
我知道干净的目标需要花费很多时间,但我不能忽略它.
建议请....
编辑:
注意:在我的情况下,清洁不会花费太多时间.它在1秒内完成.安装正在休息.
mou*_*d m 32
在我的实际项目中:
mvn clean install
[INFO] 总时间:01:05 hmvn clean install -DskipTests
[信息] 总时间:18 : 35 分钟mvn clean install -Dmaven.test.skip -DskipTests
[信息] 总时间:10:58 分钟mvn -T 1C clean install -Dmaven.test.skip -DskipTests
[信息] 总时间:04 : 00 分钟mvn -T 1C clean install -Dmaven.test.skip -DskipTests -Dmaven.javadoc.skip=true
mvn -T 1C quickclean install -Dmaven.test.skip -DskipTests
。这个新任务 quickclean 只是将构建文件夹从 TARGET重命名为 TARGET-yyyy-MM-dd-HH-mm(非常快)。所以现在,每次创建 new 时mvn quickclean install...
,都会有一个包含构建时间的文件夹。不方便的是,这可能会占用硬盘上的大量空间,因此有时您必须清理所有这些目录。为此,我创建了另一个名为:trashclean 的任务, 将所有此文件夹放入垃圾箱。我可能每周都按时运行这些任务。或月,取决于我的工作mvn trashclean
。如果你想使用这个概念,这里是你需要添加到 pom.xml 的内容
<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>
Run Code Online (Sandbox Code Playgroud)
Ram*_*ram 31
使用多线程运行maven构建对我来说可以加速构建.例如 :
mvn clean install -T100
Run Code Online (Sandbox Code Playgroud)
其中-T用于根据硬件指定所需的线程数.
Maven 3.x具有执行并行构建的能力.命令如下:
- mvn -T 4 clean install用4个线程构建
- mvn -T 1C清理安装每个cpu核心1个线程
- mvn -T 1.5C clean每个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] *****************************************************************
Run Code Online (Sandbox Code Playgroud)
如果使用命令行,您可以检查您的机器有多少个内核并使用所有这些内核,如果您还想跳过测试,您可以添加-DskipTests
例如,我有 8 核处理器:
mvn -T 8C clean install -DskipTests
Run Code Online (Sandbox Code Playgroud)
您可以使用一些小技巧来优化构建,例如
-DskipTests=true
mvn.bat
设置MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m
有关更多信息,您可以查看如何加速您的 Maven 构建
小智 5
如果您像我一样有一些额外的 RAM,并且您不需要 SSD,那么您可以采用一种hacky 方式,因为 SSD 进行大量读写操作很敏感。即使您禁用 + 一点(MacOS - 我不记得 Win 是否有类似的问题)。但
创建 RAM 驱动器(方式数量取决于您的操作系统)并将其安装到 /Users/Username/volatile 文件夹
在 MVN_HOME/lib 中找到 maven-module-builder-XXXjar
在 JAR 中修改文件 org/apache/maven/model/pom-4.0.0.xml 通过修改
<build><directory>/Users/Username/volatile/${project.groupId}/${project.artifactId}/${project.version}/target
是的,它的 hack 和一些 Maven 插件可以停止工作 BTW。
小智 5
您可以尝试turbo-maven-plugin来帮助加速您的多模块Maven本地构建(我是插件作者之一)?
https://github.com/sparebank1utvikling/turbo-maven-plugin
它的工作原理是分析哪些模块实际上有代码更改,并仅构建那些模块以及依赖于它们的模块。有关其工作原理的更多信息请参见此处: