【问题标题】:Maven-resources-plugin won't copy .metadata folderMaven-resources-plugin 不会复制 .metadata 文件夹
【发布时间】:2014-10-14 20:22:08
【问题描述】:

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

【问题讨论】:

标签: maven maven-resources-plugin


【解决方案1】:

正如@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

【讨论】:

    【解决方案2】:

    您正在寻找配置参数addDefaultExcludes。见the documentation page

    所以你的配置部分应该如下所示:

        <configuration>
          <outputDirectory>${project.build.directory}/aut-ws</outputDirectory>
          <addDefaultExcludes>false</addDefaultExcludes>
          ...
          <resources>
            <resource>
              <directory>H:\rcptt\workspaces\root</directory>
            </resource>
          </resources>
        </configuration>
    

    【讨论】:

      【解决方案3】:

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

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

      另外,如果你注释掉 &lt;nonFilteredFileExtensions&gt; 元素,它会起作用吗?


      编辑以显示在 Windows 7 和 RedHat Linux 上适用于 Maven 3.2.2、资源插件 2.7 的完整插件配置。测试命令为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>
      

      【讨论】:

      • 在我的情况下它永远不会为空
      • 什么版本的 Maven 和资源插件?我正在使用 Maven 3.2.2 和资源插件 2.7。我在测试项目的src/main/resources 目录中添加了一个.metadata-directory 文件夹,其中包括1 个文件。我添加了上面的资源元素,目录${project.basedir}/src/main/resourcescopy-resources 目标的执行,绑定到验证阶段。当我运行mvn validate 时,整个目录都会被复制,包括点文件。这适用于 Win 7 和 RedHat Linux。
      • 我也使用插件版本 2.5 和 Maven 3.2.2。但我注意到我使用了资源选项过滤=true,因为我需要在文件中进行变量替换。你能用 ${project.basedir}/src/main/resources**/***/.* 试试你的例子吗true
      • 为我工作了 2.7 的插件并按照您的要求启用了过滤。然后,我将插件版本切换到 2.5,它仍然可以工作。我想知道您的构建中是否没有其他插件执行会在复制文件后删除文件。不要运行您的正常构建(例如mvn clean install),而是尝试运行到copy-resources 目标绑定到的阶段(例如mvn generate-resources)。如果目录在那里,那么该阶段之后的某些东西正在删除目录。在启用调试的情况下运行以查看内容。
      【解决方案4】:

      如果这与 maven-assembly-plugin 相关,那么我遇到了这个问题,必须使用 useDefaultExcludes 属性(仅限插件的最新版本);默认情况下它是true,它需要设置为false 以包含像.metadata 这样的目录。不过,这似乎不适用于 maven-resources-plugin,或者它可能只是没有记录的属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-15
        相关资源
        最近更新 更多