如何配置我的Maven-war-plugin的useCache功能,以便连续构建更快?

时间:2016-04-05 19:35:29

标签: maven caching maven-3 pom.xml maven-war-plugin

我在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没有加快我的构建速度,但是如何以不同方式配置我的插件以便连续运行可以加快构建速度?如果有另一个插件,我应该使用它可以加快背靠背运行的构建,那么这也足够了。

1 个答案:

答案 0 :(得分:2)

查看WAR mojo code(在撰写本文时),缓存主要由其web app structure overlays management使用,因此在大多数情况下,它不会改善构建时间确实

此外,正如its official documentation所述,缓存机制是一个实验性功能,因此默认情况下已禁用,这可能无法实现(尚未)用户期望。

无论此缓存选项的有效性如何,加速maven构建的一些提示可能是:

  • 考虑一下每次运行是否真的需要clean
  • 如果您需要的所有内容都已在本地缓存中,请考虑构建离线(-o选项)
  • 在构建期间考虑使用线程(-T选项)
  • 考虑进入完全模式(-q选项),暂时关闭构建日志并仅获取错误日志(基本上:没有新闻,好消息)
  • 在您的情况下,War Plugin会在存在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根据开发阶段打开/关闭它。