如何更改Maven-WAR插件缓存文件位置?

时间:2014-02-14 16:10:39

标签: maven maven-3 maven-war-plugin

我正在使用Maven 3.1.1并使用Maven-war插件v 2.4。我想在$ {basedir} / target / war / work目录以外的目录中创建缓存,但我似乎无法弄清楚如何配置插件来执行此操作。我试过了

                            <plugins>
                                    <plugin>
                                            <groupId>org.apache.maven.plugins</groupId>
                                            <artifactId>maven-war-plugin</artifactId>
                                            <version>2.4</version>
                                            <configuration>
                                                    <useCache>true</useCache>
                                                    <workDirectory>/tmp/${project.artifactId}/war/work</workDirectory>
                                            </configuration>
                                            <goals>
                                                    <goal>inplace</goal>
                                            </goals>
                                    </plugin>
                            </plugins>

但是,工作目录永远不会改变。知道如何配置东西,以便插件尊重我想放置缓存文件的位置吗?

3 个答案:

答案 0 :(得分:1)

我将在调试标志(mvn -X clean install)的帮助下解释我发现的内容。

默认值为:

<workDirectory default-value="${project.build.directory}/war/work"/>
<cacheFile default-value="${project.build.directory}/war/work/webapp-cache.xml"/>

maven war plugin's doc中所述,workDirectory参数是,其中将临时提取叠加层;更改它不会影响缓存文件的路径。

而是将 cacheFile 标记添加到配置

<configuration>
  <useCache>true</useCache>
  <cacheFile>/customdir/webapp-cache.xml</cacheFile>
</configuration>

将覆盖缓存的最终位置,从而产生:

[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-war-plugin:2.4:war' with basic configurator -->
[DEBUG]   (s) archiveClasses = false
[DEBUG]   (s) attachClasses = true
[DEBUG]   (s) cacheFile = C:\customdir\webapp-cache.xml

此致 PaoloC

答案 1 :(得分:0)

不推荐直接在goals下声明plugin。请使用:

<plugins>
    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
        <executions>
              <execution>
                         <goals>
                            <goal>inplace</goal>
                         </goals>
                   <configuration>
                         <useCache>true</useCache>
                         <workDirectory>/tmp/${project.artifactId}/war/work</workDirectory>
                   </configuration>
            </execution>
        </executions>                                            
    </plugin>
</plugins>

(请注意executions标记)。

答案 2 :(得分:0)

我自己没有尝试过,但我认为问题在于你没有将执行与阶段联系起来。默认情况下,inplace目标与任何阶段都没有关联(与包阶段相关联的war不同)

您可以尝试以下

<executions>
   <execution>
      <phase>package</phase>
      <goals>
         <goal>inplace</goal>
      </goals>
      <configuration>
         <useCache>true</useCache>
         <workDirectory>/tmp/${project.artifactId}/war/work</workDirectory>
      </configuration>
   </execution>
</executions>  

当maven执行包阶段时,这应该触发inplace目标。