【问题标题】:TomEE startup error: Cannot create unique file, please set java.io.tmpdir to a writable folder or create work folderTomEE 启动错误:无法创建唯一文件,请将 java.io.tmpdir 设置为可写文件夹或创建工作文件夹
【发布时间】:2015-11-22 21:07:43
【问题描述】:

从 IntelliJ 14 中启动我的应用程序时,应用服务器 TomEE 7.0.62 提供以下错误消息:

cannot create unique file, please set java.io.tmpdir to a writable folder or create work folder
at org.apache.openejb.assembler.DeployerEjb.<clinit>(DeployerEjb.java:109)

系统: OSX、IntelliJ 14、TomEE-Plume 7.0.62(自制)、Java 8(自制桶)

Java 版本:

/usr/libexec/java_home -V
Matching Java Virtual Machines (1):
1.8.0_60, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home

部署:来自 Vaadin Framework 7 的基本 Hello World 示例应用

信息:

  • 在终端上使用 startup.sh 启动 TomEE 可以正常工作,默认的 tomcat 欢迎屏幕显示在 localhost:8080
  • 尝试添加 JVM 选项以将 java.io.tmpdir 设置为具有 chmod 777 权限的不同目录。 VM options: -Djava.io.tmpdir=&lt;new temp dir&gt;
  • 尝试使用export _JAVA_OPTIONS=-Djava.io.tmpdir=&lt;new temp dir&gt; 导出环境变量
  • 使用 Tomcat 8 hello world 应用可以正常工作

完整的错误日志:

java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.openejb.util.Classes.forName(Classes.java:64)
at org.apache.openejb.config.rules.ValidationBase.loadClass(ValidationBase.java:151)
at org.apache.openejb.config.rules.CheckMethods.check_unusedCreateMethods(CheckMethods.java:318)
at org.apache.openejb.config.rules.CheckMethods.validate(CheckMethods.java:55)
at org.apache.openejb.config.rules.ValidationBase.validate(ValidationBase.java:50)
at org.apache.openejb.config.AppValidator.validate(AppValidator.java:101)
at org.apache.openejb.config.ValidateModules.deploy(ValidateModules.java:38)
at org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:403)
at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:971)
at org.apache.openejb.config.ConfigurationFactory.getOpenEjbConfiguration(ConfigurationFactory.java:526)
at org.apache.openejb.config.ConfigurationFactory.getOpenEjbConfiguration(ConfigurationFactory.java:591)
at org.apache.openejb.assembler.classic.Assembler.getOpenEjbConfiguration(Assembler.java:459)
at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:438)
at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:150)
at org.apache.openejb.OpenEJB.init(OpenEJB.java:298)
at org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:256)
at org.apache.tomee.catalina.ServerListener.install(ServerListener.java:168)
at org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:55)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:110)
at org.apache.catalina.startup.Catalina.load(Catalina.java:638)
at org.apache.catalina.startup.Catalina.load(Catalina.java:663)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:280)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:454)

Caused by: org.apache.openejb.OpenEJBRuntimeException: cannot create     unique file, please set java.io.tmpdir to a writable folder or create work folder
at org.apache.openejb.assembler.DeployerEjb.<clinit>(DeployerEjb.java:109)
... 32 more

谢谢大家..

【问题讨论】:

  • 在 MacOS 上尝试了您的设置 - 没问题,按预期启动。你用的是什么Java? Oracle JRE 还是 JDK?其他供应商?
  • 添加了信息。来自 homebrew cask('brew cask install java')的常规 Java SE 8。我使用的是 TomEE-Plume 版本。

标签: java intellij-idea apache-tomee openejb homebrew-cask


【解决方案1】:

您可以在 conf/system.properties 中添加 openejb.system.apps=false 或将 CATALINA_TMPDIR 导出到“新的 tmp dir 值”

【讨论】:

  • CATALINA_TMPDIR 的建议确实解决了这个问题。在 TomEE/bin 中使用 catalina.sh version 找出 CATALINA_TMPDIR 指向的位置。然后改变了这个目录的权限。工作正常!使用 Build Configuration -> Defaults -> Application -> Environment variables 将 CATALINA_TMPDIR 设置为 IntelliJ 14 中的环境变量不起作用。同样的错误不断出现。 (还没有尝试使用“export ...”终端)感谢您的帮助 rmannibucau!
猜你喜欢
  • 2020-12-20
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多