gpt4 book ai didi

Java 1.6 被后台 Symfony 任务调用时损坏

转载 作者:IT老高 更新时间:2023-10-28 21:13:08 24 4
gpt4 key购买 nike

我有一个 Symfony 任务,它生成一些文件,调用 exec 到一个 jar,然后解析输出。 jar 从命令行运行良好,任务从命令行运行良好。

问题:

我在基于表单提交的操作中调用任务。我让 Action 在后台启动一个新的 php 进程来运行任务,而不管它现在生成的页面是什么。

当它到达 java 调用时,说 exec(java -version);它输出这个:

Error occurred during initialization of VM
Unable to load native library: libjava.jnilib

我觉得这与我在启动任务时调用 php 的方式有关,但我不知道为什么它没有与我使用命令行时相同的库。

如何让 java 从“后台”Symfony 任务中运行?

注意事项:

在我将 mamp 从 1.9.6 升级到 2.0.3 之前,它一直可以正常工作。

我看过: Broken Java Mac 10.6但因为我可以从命令行很好地运行它,所以这似乎是一个不同的问题。

我也看过 Execute symfony task command from the shell_exec() permission denied但我不认为权限是这里的问题。

更新:

我已将问题范围缩小到 MAMP 并从浏览器访问 php。

<?php
echo exec("java -version")
...

从命令行调用时有效,但通过浏览器打开 php 文件时无效。所以 MAMP 的配置方式导致了这个问题。

这是环境信息:

  • 变量值
  • SHELL/bin/bash
  • TMPDIR/var/folders/YH/YH+uW3hDHZyxQ5AiUtr0T++++TI/-Tmp-/
  • Apple_PubSub_Socket_Render/tmp/launch-3rr9ZI/Render
  • 用户我的用户
  • COMMAND_MODE unix2003
  • SSH_AUTH_SOCK/tmp/launch-zinaMI/Listeners
  • __CF_USER_TEXT_ENCODING 0x1F5:0:0
  • PATH/usr/bin:/bin:/usr/sbin:/sbin
  • 残疾人/
  • 首页/用户/我的用户
  • SHLVL 2
  • DYLD_LIBRARY_PATH/Applications/MAMP/Library/lib:
  • LOGNAME 我的用户
  • 显示/tmp/launch-FYrw70/org.x:0
  • _/Applications/MAMP/Library/bin/httpd

Dyld 似乎在这里。我需要找到一种方法从 mamp 的环境中取消它。

已解决

我想出了一个解决办法。这似乎是一个 hack,但它确实有效。我会在这里发布,以防其他人遇到同样的问题。

作为 Broken Java Mac 10.6提到 DYLD_LIBRARY_PATH 必须取消设置。不知道为什么,在 Unix 系统上似乎需要它,但在 MacOSX 上不需要。

如果 MAMP 设置为/Applications/MAMP/Library/lib,以下是禁用它的方法:编辑 /Applications/MAMP/Library/bin/envvars 并注释掉以下几行

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH

所以它看起来像这样:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH

这应该可以解决问题,java 1.6 可以正常运行。

这是黑客行为吗?还是这是 MAMP 中的错误?如果您知道解决此问题的更好方法,请回答。

最佳答案

这是@paaat 添加的解决方案。我只是发布这个问题,以便将这个问题排除在未回答的列表之外。

I've figured out a solution. It seems like a hack but it worked. I'll post it here just incase anyone else runs into the same problem.

As Broken Java Mac 10.6 mentions the DYLD_LIBRARY_PATH must be unset. Not sure why, it seems to be needed on Unix systems but not MacOSX.

If MAMP sets to /Applications/MAMP/Library/lib here's how to disable it: Edit /Applications/MAMP/Library/bin/envvars and comment out the following lines

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH

所以它看起来像这样:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH

这应该可以解决问题,java 1.6 可以正常运行。

请务必重新安装 MAMP 以使更改生效。

关于Java 1.6 被后台 Symfony 任务调用时损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7650013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com