You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Heroku部署Java 19+Maven项目时遇Function not implemented错误

Heroku部署Java 19 Spring Boot项目时Maven资源插件报错解决

在Heroku上部署基于Spring Boot的Java 19项目时,触发Maven构建错误:

Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project abc: Function not implemented -> [Help 1]

项目在Heroku使用Java 18、本地Java 19环境下均可正常运行,当前使用Maven版本为3.6.2(Heroku官方支持的最高版本)。


完整构建日志

-----> Building on the Heroku-22 stack
-----> Using buildpack: heroku/java
-----> Java app detected
-----> Installing OpenJDK 19... done
-----> Installing Maven 3.6.2... done
-----> Executing Maven
       $ mvn -DskipTests clean dependency:list install
       [INFO] Error stacktraces are turned on.
       [INFO] Scanning for projects...
       [INFO] 
       [INFO] ------------------------< com.balsamee:dr-api >-------------------------
       [INFO] Building dr-api 0.0.2
       [INFO] --------------------------------[ jar ]---------------------------------
       [INFO] 
       [INFO] --- maven-clean-plugin:3.2.0:clean (default-clean) @ dr-api ---
       [INFO] 
       [INFO] --- maven-dependency-plugin:3.3.0:list (default-cli) @ dr-api ---
       [INFO] 
       [INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ dr-api ---
       [INFO] Using 'UTF-8' encoding to copy filtered resources.
       [INFO] Using 'UTF-8' encoding to copy filtered properties files.
       [INFO] Copying 1 resource
       [INFO] Copying 28 resources
       [INFO] ------------------------------------------------------------------------
       [INFO] BUILD FAILURE
       [INFO] ------------------------------------------------------------------------
       [INFO] Total time:  2.236 s
       [INFO] Finished at: 2022-09-27T15:04:25Z
       [INFO] ------------------------------------------------------------------------
       [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project dr-api: Function not implemented -> [Help 1]
       org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project dr-api: Function not implemented
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
           at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
           at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
           at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
           at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
           at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
           at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
           at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
           at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
           at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
           at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
           at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
           at java.lang.reflect.Method.invoke (Method.java:578)
           at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
           at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
           at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
           at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
       Caused by: org.apache.maven.plugin.MojoExecutionException: Function not implemented
           at org.apache.maven.plugins.resources.ResourcesMojo.execute (ResourcesMojo.java:362)
           at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
           at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
           at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
           at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
           at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
           at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
           at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
           at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
           at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
           at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
           at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
           at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
           at java.lang.reflect.Method.invoke (Method.java:578)
           at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
           at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
           at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
           at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
       Caused by: org.apache.maven.shared.filtering.MavenFilteringException: Function not implemented
           at org.apache.maven.shared.filtering.DefaultMavenFileFilter.copyFile (DefaultMavenFileFilter.java:113)
           at org.apache.maven.shared.filtering.DefaultMavenResourcesFiltering.filterResources (DefaultMavenResourcesFiltering.java:262)
           at org.apache.maven.plugins.resources.ResourcesMojo.execute (ResourcesMojo.java:356)
           at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
           at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
           at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
           at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
           at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
           at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
           at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
           at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
           at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
           at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
           at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
           at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
           at java.lang.reflect.Method.invoke (Method.java:578)
           at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
           at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
           at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
           at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
       Caused by: java.io.IOException: Function not implemented
           at sun.nio.ch.FileChannelImpl.transferFrom0 (Native Method)
           at sun.nio.ch.FileChannelImpl.transferFromDirectlyInternal (FileChannelImpl.java:804)
           at sun.nio.ch.FileChannelImpl.transferFromDirectly (FileChannelImpl.java:833)
           at sun.nio.ch.FileChannelImpl.transferFrom (FileChannelImpl.java:935)
           at org.apache.maven.shared.utils.io.FileUtils.doCopyFile (FileUtils.java:861)
           at org.apache.maven.shared.utils.io.FileUtils.copyFile (FileUtils.java:826)
           at org.apache.maven.shared.utils.io.FileUtils.copyFile (FileUtils.java:1888)
           at org.apache.maven.shared.filtering.DefaultMavenFileFilter.copyFile (DefaultMavenFileFilter.java:106)
           at org.apache.maven.shared.filtering.DefaultMavenResourcesFiltering.filterResources (DefaultMavenResourcesFiltering.java:262)
           at org.apache.maven.plugins.resources.ResourcesMojo.execute (ResourcesMojo.java:356)
           at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
           at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
           at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
           at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
           at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
           at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
           at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
           at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
           at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
           at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
           at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
           at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
           at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
           at java.lang.reflect.Method.invoke (Method.java:578)
           at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
           at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
           at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
           at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
       [ERROR] 
       [ERROR] Re-run Maven using the -X switch to enable full debug logging.
       [ERROR] 
       [ERROR] For more information about the errors and possible solutions, please read the following articles:
       [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
 !     ERROR: Failed to build app with Maven
       We're sorry this build is failing! If you can't find the issue in application code,
       please submit a ticket so we can help: https://help.heroku.com/
 !     Push rejected, failed to compile Java app.
 !     Push failed

配置文件详情

system.properties

java.runtime.version=19

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.4</version>
    </parent>

    <groupId>com.company</groupId>
    <artifactId>abc</artifactId>
    <version>0.0.2</version>

    <packaging>jar</packaging>
    <properties>
        <java.version>19</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <version>1.6.11</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.version}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

问题原因与解决方法

问题根源

从堆栈跟踪可见,错误来自sun.nio.ch.FileChannelImpl.transferFrom0本地方法抛出的“Function not implemented”异常,这是Java 19的文件传输逻辑与Heroku-22栈容器环境不兼容导致的,而Maven资源插件3.2.0版本恰好使用了这个存在兼容性问题的文件复制方式。

解决方法

1. 升级Maven资源插件版本

在pom.xml中显式指定3.3.1及以上版本的maven-resources-plugin,新版本修复了该兼容性问题:

<build>
    <plugins>
        <!-- 保留原有插件,新增资源插件配置 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.3.1</version>
        </plugin>
    </plugins>
</build>

2. 禁用NIO文件复制

如果不想升级插件,可添加配置强制插件使用传统文件复制方式,绕过NIO的transferFrom方法:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <useFileWritable>false</useFileWritable>
                <useNio>false</useNio>
            </configuration>
        </plugin>
    </plugins>
</build>

3. 降级Java版本到稳定兼容版

若上述方法无效,可暂时将Java版本降回Heroku兼容的18:

  • 修改system.properties:
    java.runtime.version=18
    
  • 修改pom.xml中的<java.version>为18。

内容的提问

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:25:36