【问题标题】:Maven:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.7:resourcesMaven:未能执行目标 org.apache.maven.plugins:maven-resources-plugin:2.7:resources
【发布时间】:2014-12-04 13:19:10
【问题描述】:

我正在使用 Maven 构建我的项目。我的 Maven 版本是 apache-maven-3.0.4。我正在使用 Eclipse Luna。当我尝试构建我的项目时,出现以下错误

[错误] 无法在 OrionCommunity 项目上执行目标 org.apache.maven.plugins:maven-resources-plugin:2.7:resources (default-resources):标记无效 -> [帮助 1]。

以下是我运行 mvn clean install -X 时的堆栈跟踪:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:53.295s
[INFO] Finished at: Thu Oct 09 20:00:26 IST 2014
[INFO] Final Memory: 9M/25M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.7:resources (default-resources) on project OrionCommunity: Mark invalid -> [Hel
p 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.7:resources (default-resources)
 on project OrionCommunity: Mark invalid
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: Mark invalid
        at org.apache.maven.plugin.resources.ResourcesMojo.execute(ResourcesMojo.java:306)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
        ... 19 more
Caused by: org.apache.maven.shared.filtering.MavenFilteringException: Mark invalid
        at org.apache.maven.shared.filtering.DefaultMavenFileFilter.copyFile(DefaultMavenFileFilter.java:129)
        at org.apache.maven.shared.filtering.DefaultMavenResourcesFiltering.filterResources(DefaultMavenResourcesFiltering.java:264)
        at org.apache.maven.plugin.resources.ResourcesMojo.execute(ResourcesMojo.java:300)
        ... 21 more
Caused by: java.io.IOException: Mark invalid
        at java.io.BufferedReader.reset(BufferedReader.java:485)
        at org.apache.maven.shared.filtering.MultiDelimiterInterpolatorFilterReaderLineEnding.read(MultiDelimiterInterpolatorFilterReaderLineEnding.java:416)
        at org.apache.maven.shared.filtering.MultiDelimiterInterpolatorFilterReaderLineEnding.read(MultiDelimiterInterpolatorFilterReaderLineEnding.java:205)
        at java.io.Reader.read(Reader.java:123)
        at org.apache.maven.shared.utils.io.IOUtil.copy(IOUtil.java:181)
        at org.apache.maven.shared.utils.io.IOUtil.copy(IOUtil.java:168)
        at org.apache.maven.shared.utils.io.FileUtils.copyFile(FileUtils.java:1856)
        at org.apache.maven.shared.utils.io.FileUtils.copyFile(FileUtils.java:1804)
        at org.apache.maven.shared.filtering.DefaultMavenFileFilter.copyFile(DefaultMavenFileFilter.java:114)
        ... 23 more

我的 maven 存储库位于 D:/mavenrepo 下。我已经完全删除了存储库中存在的所有 jar 并进行了全新安装。但我仍然收到此错误。

【问题讨论】:

  • 没有 pom.xml,没有日志(除了尾部)。无法帮助您或重现问题。在这里阅读:stackoverflow.com/help/how-to-ask
  • 这看起来您正在过滤一些您不应该过滤的文件。创建mvn -X compiler | tee mvn.log 并检查[DEBUG] filtering 的日志文件。在那里您可以看到正在过滤的文件。我的假设是您错过了将文件添加到nonFilteredFileExtension
  • @khmarbaise 非常感谢。你是我今天的救星。按照你的建议,我运行了命令,可以在日志中看到资源被过滤。在我的 pom.xml 中,我有以下代码
  • src/main/resourcestrue 评论后构建成功。构建不需要正在过滤的资源。但不确定为什么构建不适用于那段代码
  • 我的同事遇到了同样的问题,但问题出在其中一个文件上。不确定是什么问题。我们删除了导致问题的文件并保留了过滤代码并运行了构建。它是成功的。我希望问题仅出在该特定文件上,并且该文件在 3 个月前已更改,并且最近没有代码更改

标签: java eclipse maven maven-plugin


【解决方案1】:

我通过引用最新的 maven 资源插件版本解决了同样的问题:

<dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.2.0</version>
</dependency>

【讨论】:

    【解决方案2】:

    我通过将资源文件的编码格式更改为 UTF-8 解决了这个问题

    【讨论】:

      【解决方案3】:

      这可能是 IntellijIdea IDE 中 mvn 主路径中的问题。对我来说,当我正确设置 mvn 主目录时,它就解决了。

      【讨论】:

        【解决方案4】:

        由于资源/application.properties 中的字符“@”,我遇到了同样的错误。我所做的只是将 '@' 替换为其 unicode 值: eureka.client.serviceUrl.defaultZone=http://discUser:discPassword\u0040localhost:8082/eureka/ 它就像魅力一样。我知道 '@' 在 .properties 文件中是一个完全有效的字符,并且该文件采用 UTF-8 编码,这让我一直质疑我的职业生涯,但如果你删除资源文件的内容来看看你是否可以通过这个错误。

        【讨论】:

        • 当我将电子邮件地址添加到资源文件中时,我突然发生了这种情况。感谢您的解决方案。
        【解决方案5】:

        在我的情况下,这是与 IntelliJ 的冲突,我已经通过从命令行构建项目来解决它并且它有效!

        【讨论】:

        • 山姆和我的案子也是如此。
        【解决方案6】:

        来自官方文档

        警告:请勿过滤包含图像等二进制内容的文件!这 很可能会导致输出损坏。

        如果您同时拥有文本文件和二进制文件作为资源 建议有两个单独的文件夹。一个文件夹 src/main/resources (默认) 用于未过滤的资源 和另一个文件夹 src/main/resources-filtered 的资源 被过滤。

        <project>
          ...
          <build>
            ...
            <resources>
              <resource>
                <directory>src/main/resources-filtered</directory>
                <filtering>true</filtering>
              </resource>
              ...
            </resources>
            ...
          </build>
          ...
        </project>
        

        现在你可以把那些不应该的文件放到 src/main/resources 过滤并将其他文件放入 src/main/resources-filtered。

        如前所述,过滤图像、pdf 等二进制文件 可能会导致输出损坏。为防止出现此类问题,您可以 配置不被过滤的文件扩展名。

        当然,您的目录中有无法过滤的文件。所以你必须指定没有被过滤的扩展。

        【讨论】:

          【解决方案7】:

          在我的情况下,targetPath 没有任何值,它在文件directoryresources --&gt; resource 中为空白,文件有问题。 如Code Sample 2 所示,我必须将其更新为global 并重新运行构建以解决该问题。

          代码示例 1(有问题)

          <build>
              <resources>
                  <resource>
                      <directory>src/main/locale</directory>
                      <filtering>true</filtering>
                      <targetPath></targetPath>
                      <includes>
                          <include>*.xml</include>
                          <include>*.config</include>
                          <include>*.properties</include>
                      </includes>
                  </resource>
              </resources>
          

          代码示例 2(已应用修复)

          <build>
              <resources>
                  <resource>
                      <directory>src/main/locale</directory>
                      <filtering>true</filtering>
                      <targetPath>global</targetPath>
                      <includes>
                          <include>*.xml</include>
                          <include>*.config</include>
                          <include>*.properties</include>
                      </includes>
                  </resource>
              </resources>
          

          【讨论】:

            【解决方案8】:

            对我有用的是添加 include 标签以准确指定我想要过滤的内容。

            似乎资源插件在遍历整个 src/main/resource 文件夹时出现问题,可能是由于其中的某些特定文件。

                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <filtering>true</filtering>
                        <includes>
                            <include>application.yml</include>
                        </includes>
                    </resource>
                </resources>
            

            【讨论】:

              【解决方案9】:

              我遇到了同样的问题,并且像下面的过滤错误为我工作。 你也可以试试...

              <testResources>
                  <testResource>
                      <directory>src/test/java</directory>
                      <filtering>false</filtering>
                  </testResource>
                  <testResource>
                      <directory>src/test/resources</directory>
                      <filtering>false</filtering>
                  </testResource>
              </testResources>
              

              【讨论】:

              • 如之前的评论中提到的,项目中有时需要过滤,因此不是一个有效的答案 imo
              【解决方案10】:

              我也遇到了这个问题,因为我正在过滤 /src/main/resources 并且忘记了我已将密钥库 (*.jks) 二进制文件添加到此目录。

              添加一个包含二进制文件排除项的“资源”块,您的问题可能会得到解决。

              <build>
                <finalName>somename</finalName>
                <testResources>
                  <testResource>
                    <directory>src/test/resources</directory>
                    <filtering>false</filtering>
                  </testResource>
                </testResources>
                <resources>
                  <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                    <excludes>
                      <exclude>*.jks</exclude>
                      <exclude>*.png</exclude>
                    </excludes>        
                  </resource>
                </resources>
              ...
              

              【讨论】:

                【解决方案11】:

                与:

                        <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-resources-plugin</artifactId>
                            <version>2.7</version>
                        </plugin>
                

                收到以下异常:

                ...
                Caused by: org.apache.maven.plugin.MojoExecutionException: Mark invalid
                    at org.apache.maven.plugin.resources.ResourcesMojo.execute(ResourcesMojo.java:306)
                    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)
                    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
                    ... 25 more
                Caused by: org.apache.maven.shared.filtering.MavenFilteringException: Mark invalid
                    at org.apache.maven.shared.filtering.DefaultMavenFileFilter.copyFile(DefaultMavenFileFilter.java:129)
                    at org.apache.maven.shared.filtering.DefaultMavenResourcesFiltering.filterResources(DefaultMavenResourcesFiltering.java:264)
                    at org.apache.maven.plugin.resources.ResourcesMojo.execute(ResourcesMojo.java:300)
                    ... 27 more
                Caused by: java.io.IOException: Mark invalid
                    at java.io.BufferedReader.reset(BufferedReader.java:505)
                    at org.apache.maven.shared.filtering.MultiDelimiterInterpolatorFilterReaderLineEnding.read(MultiDelimiterInterpolatorFilterReaderLineEnding.java:416)
                    at org.apache.maven.shared.filtering.MultiDelimiterInterpolatorFilterReaderLineEnding.read(MultiDelimiterInterpolatorFilterReaderLineEnding.java:205)
                    at java.io.Reader.read(Reader.java:140)
                    at org.apache.maven.shared.utils.io.IOUtil.copy(IOUtil.java:181)
                    at org.apache.maven.shared.utils.io.IOUtil.copy(IOUtil.java:168)
                    at org.apache.maven.shared.utils.io.FileUtils.copyFile(FileUtils.java:1856)
                    at org.apache.maven.shared.utils.io.FileUtils.copyFile(FileUtils.java:1804)
                    at org.apache.maven.shared.filtering.DefaultMavenFileFilter.copyFile(DefaultMavenFileFilter.java:114)
                    ... 29 more
                



                然后添加maven-filtering 1.3后就没了:

                        <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-resources-plugin</artifactId>
                            <version>2.7</version>
                          <dependencies>
                            <dependency>
                                <groupId>org.apache.maven.shared</groupId>
                                <artifactId>maven-filtering</artifactId>
                                <version>1.3</version>
                            </dependency>
                          </dependencies>
                        </plugin>
                

                【讨论】:

                • 是的,如果您不需要任何 2.7 新功能,请添加依赖项或返回之前的版本 (2.6)
                • 升级 maven-resources-plugin 到 3.0.1 也可以解决问题。
                【解决方案12】:

                帮我删除这项工作:

                <filtering>true</filtering>
                

                我猜是this filtering bug引起的

                【讨论】:

                • 在某些项目上可能需要过滤。在我看来,这不是一个正确的答案
                • 我们在主 POM 中设置了过滤,因此无法轻松删除它。我们已经迁移到 2.7。上面描述了更好的方法:stackoverflow.com/a/28864641/1279002,我们添加了对 maven-filtering 1.3 的依赖
                猜你喜欢
                • 1970-01-01
                • 2021-04-30
                • 2019-12-23
                • 1970-01-01
                • 2012-09-04
                • 1970-01-01
                • 2021-04-01
                • 1970-01-01
                • 2022-07-08
                相关资源
                最近更新 更多