Maven资源插件无法复制.metadata文件夹。

4
我正在尝试使用maven-resources-plugin复制一个文件夹或以下结构:
  root
   |- .metadata
   |- Project
   \- .gitignore

项目目录和.gitignore文件已复制,但由于某些原因.metadata目录被省略了。

我该如何复制根文件夹的所有内容?

这是我尝试的配置:

  <plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.5</version>
    <executions>
      <execution>
        <id>copy-resources</id>
        <phase>validate</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${project.build.directory}/aut-ws</outputDirectory>
          <useBuildFilters>false</useBuildFilters>
          <nonFilteredFileExtensions>
            <nonFilteredFileExtension>metadata</nonFilteredFileExtension>
          </nonFilteredFileExtensions>
          <resources>
            <resource>
              <directory>H:\rcptt\workspaces\root</directory>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>

创建了一个改进请求:http://jira.codehaus.org/browse/MRESOURCES-201 - kdoteu
4个回答

4
您需要查找配置参数addDefaultExcludes。请参阅文档页面
因此,您的配置部分应该如下所示:
    <configuration>
      <outputDirectory>${project.build.directory}/aut-ws</outputDirectory>
      <addDefaultExcludes>false</addDefaultExcludes>
      ...
      <resources>
        <resource>
          <directory>H:\rcptt\workspaces\root</directory>
        </resource>
      </resources>
    </configuration>

3
如果这与maven-assembly-plugin有关,则我曾经遇到过这个问题,并且必须使用useDefaultExcludes属性(最近版本的插件才能这样做)。默认情况下,它为true,并且需要将其设置为false以包括像.metadata这样的目录。然而,这似乎不适用于maven-resources-plugin,或者可能只是没有记录在文档中的属性。

1

我的第一次修复尝试将是尝试修改资源元素。

<resources>
  <resource>
    <directory>H:\rcptt\workspaces\root</directory>
    <includes>
      <include>**/*</include>
      <include>**/.*</include>
    </includes>
  </resource>
</resources>

此外,如果您将<nonFilteredFileExtensions>元素注释掉,它是否有效?

修改以显示与Maven 3.2.2,资源插件2.7在Windows 7和RedHat Linux上均可正常工作的完整插件配置。测试命令为mvn validate

<plugin>
  <artifactId>maven-resources-plugin</artifactId>
  <executions>
    <execution>
      <phase>validate</phase>
      <goals><goal>copy-resources</goal></goals>
      <configuration>
        <outputDirectory>${project.build.directory}/testing123</outputDirectory>
        <resources>
          <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <includes>
              <include>**/*</include>
              <include>**/.*</include>
            </includes>
          </resource>
        </resources>
      </configuration>
    </execution>
  </executions>
</plugin>

在我的情况下,它从来不是空的。 - kdoteu
使用的Maven版本和资源插件是什么?我正在使用Maven 3.2.2和资源插件2.7。我在测试项目的src/main/resources目录中添加了一个.metadata-directory文件夹,其中包含1个文件。我添加了上面的资源元素,并将目录${project.basedir}/src/main/resources绑定到copy-resources目标的执行中,绑定到验证阶段。当我运行mvn validate时,整个目录都被复制,包括点文件。这在Win 7和RedHat Linux上都可以工作。 - user944849
我使用插件版本2.5和Maven 3.2.2。但是我注意到我使用了resource-option filtering=true,因为我需要在文件中进行变量替换。你能否尝试使用以下示例: <resource> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>/*</include> <include>/.*</include> </includes> <filtering>true</filtering> </resource> - kdoteu
在我使用启用过滤的插件版本2.7时,它对我有效。然后,我将插件版本切换到2.5,它仍然有效。我想知道是否有其他插件执行了你的构建,在复制文件后删除了它们。尝试运行到copy-resources目标绑定的阶段(例如mvn generate-resources),而不是运行正常的构建(例如mvn clean install)。如果该目录存在,则说明该阶段之后的某些内容正在删除该目录。启用调试以查看详情。 - user944849

0
只需像 @Matthew Wise 所说的那样添加 addDefaultExcludes
<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <addDefaultExcludes>false</addDefaultExcludes>
    </configuration>
</plugin>

默认情况下,像.gitignore、.cvsignore等文件都被排除在外,这意味着它们不会被复制。如果您因特定原因需要它们,可以将其设置为false来实现。

文档:https://maven.apache.org/plugins/maven-resources-plugin/copy-resources-mojo.html#addDefaultExcludes


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接