0

我正在使用 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>

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

4

3 回答 3

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 插件文档中所述,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

于 2014-02-19T15:47:31.820 回答
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标签)。

于 2014-02-14T16:44:29.337 回答
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>  

inplace这应该在 Maven 执行打包阶段时触发目标。

于 2014-02-15T19:25:31.660 回答