2011-01-21 27 views
20

当我使用maven创建一个war包时,目录“src/main/resources”下的文件和目录被复制到/ WEB-INF/classes而不是/ WEB-INF。我怎样才能将它们复制到/ WEB-INF中?Maven:如何使用WEB-INF中复制的资源获取一个war包?

感谢, 兰特

UPDATE: 在我的POM现在我用这个:

<plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <id>copy-resources</id> 
        <!-- here the phase you need --> 
        <phase>war</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>myapp/target/WEB-INF</outputDirectory> 
         <resources> 
          <resource> 
           <directory>src/main/resources</directory> 
           <filtering>true</filtering> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

和我一起推出MVN:

MVN -Dmaven.test.skip =真正的清洁包资源:复制资源

但我得到了: [INFO]一个或多个必需的插件参数对于'resources:copy-resources'无效/丢失

[0]插件'maven-resources-plugin'的定义中指定了以下内容:

... VALUE 。

[1]里面定义插件 'Maven的资源 - 插件' 指定下列内容:

... VALUE 。

我使用的Maven 2.2和片段基本上是相同的文件 任何想法?

+0

不运行`resources:copy-resources`目标,它会自动包含在阶段`copy-resources`中(在我的答案中) – coubeatczech 2011-01-21 17:10:16

回答

27

要么配置outputDirectory参数resources:resources插件,要么将您的文件放在src/main/webapp/WEB-INF/目录下。 resource plugin

编辑:

此配置为我工作:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.4.2</version> 
    <executions> 
     <execution> 
     <id>default-copy-resources</id> 
     <phase>process-resources</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <overwrite>true</overwrite> 
      <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/</outputDirectory> 
      <resources> 
      <resource> 
       <directory>${project.basedir}/src/main/resources</directory> 
      </resource> 
      </resources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

可以在形式somePhase或目标somePlugin:someGoal运行阶段。阶段调用将按顺序调用间隔[validate,phase]中的阶段所挂接的所有插件目标,因此不需要显式调用它们。

+0

感谢您的回复,在上面的更新中检查我的回复 – Randomize 2011-01-21 16:43:56

+0

也可以使用`$ {project.build.finalName}`而不是`$ {project.artifactId} - $ {project.version}`来获取工件的名称。 – ivanjovanovic 2018-02-07 12:28:48

24

Web资源与java资源不一样,它们应该放在classpath中。 Web资源通过war插件进行处理,应放入src\main\webapp\WEB-INF\。在这种情况下,它将在pom.xml中自动工作而无需任何额外配置。

相关问题