【发布时间】:2011-04-21 06:07:24
【问题描述】:
我正在使用带有 hudson CI 服务器和 Ant 的 Flex 3.5.0.12683 来编译我们的项目。在为这个项目编译资源包时我遇到了问题。
使用 root 用户,一切都编译成功,但是当我尝试使用 hudson (ant) 编译我的 flex 项目时,它失败了:
compile_resource:
[mxmlc] Loading configuration file /opt/lib/flex3.5/frameworks/flex-config.xml
[mxmlc] Error: null
[mxmlc]
[mxmlc] java.lang.NullPointerException
[mxmlc] at flex2.tools.CommandLineConfiguration.compilingResourceModule(CommandLineConfiguration.java:70)
[mxmlc] at flex2.tools.CommandLineConfiguration.getTargetFile(CommandLineConfiguration.java:45)
[mxmlc] at flex2.tools.CommandLineConfiguration.validate(CommandLineConfiguration.java:97)
[mxmlc] at flex2.tools.Compiler.processConfiguration(Compiler.java:672)
[mxmlc] at flex2.tools.Compiler.processConfiguration(Compiler.java:526)
[mxmlc] at flex2.tools.Compiler.mxmlc(Compiler.java:84)
[mxmlc] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[mxmlc] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[mxmlc] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[mxmlc] at java.lang.reflect.Method.invoke(Method.java:616)
[mxmlc] at flex.ant.FlexTask.executeInProcess(FlexTask.java:283)
[mxmlc] at flex.ant.FlexTask.execute(FlexTask.java:225)
[mxmlc] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
[mxmlc] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[mxmlc] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[mxmlc] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[mxmlc] at java.lang.reflect.Method.invoke(Method.java:616)
[mxmlc] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[mxmlc] at org.apache.tools.ant.Task.perform(Task.java:348)
[mxmlc] at org.apache.tools.ant.Target.execute(Target.java:390)
[mxmlc] at org.apache.tools.ant.Target.performTasks(Target.java:411)
[mxmlc] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1360)
[mxmlc] at org.apache.tools.ant.Project.executeTarget(Project.java:1329)
[mxmlc] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[mxmlc] at org.apache.tools.ant.Project.executeTargets(Project.java:1212)
[mxmlc] at org.apache.tools.ant.Main.runBuild(Main.java:801)
[mxmlc] at org.apache.tools.ant.Main.startAnt(Main.java:218)
[mxmlc] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
[mxmlc] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
看起来有些权限失败了,但我不知道是什么以及在哪里,因为编译器没有太多输出。
【问题讨论】:
-
刚刚查看了 CommandLineConfiguration.java 文件,发现失败的行:resourceModulePath = I18nUtils.getGeneratedResourceModule(this).getPath();似乎编译器找不到简单用户下的资源存储位置
-
所以我猜测无论用户 hudson 运行的是什么,它都没有访问所需路径的一些权限。
-
是的,看起来是这样。目前通过将 hudson 添加到具有运行 mxmlc 和 compc 的权限的 sudoers 文件来解决此问题。但是,这肯定不是真正的解决方案。
-
Debian 有没有办法检测 mxmlc 试图访问的路径?
标签: linux apache-flex ant hudson