我在Mac Yosemite上使用Maven 3.3.0 。我想利用maven-war-plugin的useCache
功能,但它在我的多模块项目中没有做任何事情。我跑的时候
mvn clean install -DskipTests
我的项目大约需要1:25才能运行以下配置
<profile>
<id>prepare-deploy-war-to-jboss</id>
<activation>
<file>
<exists>${basedir}/src/main/webapp</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<useCache>true</useCache>
<cacheFile>/tmp/${project.artifactId}/war/work</cacheFile>
</configuration>
</plugin>
</plugins>
</build>
</profile>
然后我再次运行相同的命令,项目花费相同的时间。我可以看到“工作”文件被创建,所以插件肯定在运行,但连续的构建似乎没有做任何事情。
我的问题不在于为什么useCache
没有加快我的构建速度,但是如何以不同方式配置我的插件以便连续运行可以加快构建速度?如果有另一个插件,我应该使用它可以加快背靠背运行的构建,那么这也足够了。
答案 0 :(得分:2)
查看WAR mojo code(在撰写本文时),缓存主要由其web app structure overlays management使用,因此在大多数情况下,它不会改善构建时间确实
此外,正如its official documentation所述,缓存机制是一个实验性功能,因此默认情况下已禁用,这可能无法实现(尚未)用户期望。
无论此缓存选项的有效性如何,加速maven构建的一些提示可能是:
clean
-o
选项)-T
选项)-q
选项),暂时关闭构建日志并仅获取错误日志(基本上:没有新闻,好消息)war
打包典型结构时激活,这可能意味着此配置文件是聚合器/父pom的一部分,然后仅在war模块上激活。虽然它可能影响很小,但也可以考虑将War Plugin配置移动到其相关模块并避免这种触发配置最后但并非最不重要的是,在开发时,构建时间可能比战争大小更重要,因此您可以关闭重新压缩添加到war文件中的外部库的默认机制, recompressZippedFiles
选项:
指示是否应再次压缩添加到战争中的zip存档(jar,zip等)。再次压缩可以缩小存档大小,但会显着延长执行时间 默认:
true
所以示例配置如下:
<properties>
<war.recompress.files>false</war.recompress.files>
</properties>
<build>
<finalName>webapp</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<recompressZippedFiles>${war.recompress.files}</recompressZippedFiles>
</configuration>
</plugin>
</plugins>
</build>
注意:由于此配置条目没有用户属性,我还为其添加了一个属性,可以通过命令行(或通过配置文件)按需打开/关闭它。
然后,您可以针对先前的配置测试执行默认构建的不同执行时间(上面的配置禁用重新压缩)(下面,根据需要切换当前执行的重新压缩):
mvn clean install -Dwar.recompress.files=true
然后,您可以考虑profile it根据开发阶段打开/关闭它。