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

如何解决JEE应用部署到Wildfly 25时出现的java.io.FileNotFoundException错误

问题原因

报错核心是文件写入权限不足,和Wildfly的Domain/Standalone运行模式无关,由两种启动方式的运行身份、工作目录差异导致:

  • 你配置的JPA schema生成规则指定了输出productDrop.ddl、productCreate.ddl两个脚本,使用相对路径时,文件默认写入Wildfly进程的当前工作目录。
  • 手动执行standalone.sh启动时,进程使用你当前登录的操作系统用户运行,工作目录为你执行脚本的路径,该用户对目录有写权限,因此可以正常生成文件。
  • 通过systemctl启动Wildfly服务时,进程默认使用专属的wildfly系统用户运行,默认工作目录为Wildfly的安装目录(通常为/opt/wildfly),该目录默认权限仅允许root用户写入,wildfly用户没有写权限,因此写入脚本时抛出权限拒绝错误。

解决思路

方案1(推荐,适用于生产环境)

移除自动导出ddl脚本的配置,不需要生成文件即可避免权限问题:
删除persistence.xml中的以下两行配置即可:

<property name ="javax.persistence.schema-generation.scripts.action" value="drop-and-create"></property>
<property name ="javax.persistence.schema-generation.scripts.create-target" value="productCreate.ddl"></property>
<property name ="javax.persistence.schema-generation.scripts.drop-target" value="productDrop.ddl"></property>

也可以将javax.persistence.schema-generation.scripts.action的value改为none,效果一致。

方案2(适用于需要保留ddl导出的场景)

将脚本输出路径改为绝对路径,指向wildfly用户有写入权限的目录:

  1. 新建专属目录用于存储导出的ddl文件,示例:
mkdir /opt/wildfly/ddl
chown -R wildfly:wildfly /opt/wildfly/ddl
  1. 修改persistence.xml中的路径配置为绝对路径:
<property name ="javax.persistence.schema-generation.scripts.create-target" value="/opt/wildfly/ddl/productCreate.ddl"></property>
<property name ="javax.persistence.schema-generation.scripts.drop-target" value="/opt/wildfly/ddl/productDrop.ddl"></property>

内容的提问来源于stack exchange,提问作者Tel lui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:15:01