F4 IDE给出了;本地文件的Uri方案无效;运行Fantom应用程序时

F4 IDE给出了;本地文件的Uri方案无效;运行Fantom应用程序时,ide,fantom,Ide,Fantom,我使用Xored的F4IDE为Fantom启动了一个非常简单的项目。最初几次运行时没有出现错误,但我开始添加依赖项(fanbatis),在某个时候,每次运行测试或虚拟Hello World应用程序时,下面的错误都会出现 [23:44:18 22-Nov-13] [err] [pathenv] Cannot parse path: C:\dev\f4workspace\auth\bin\fan sys::ArgErr: Invalid Uri scheme for local file: c:

我使用Xored的F4IDE为Fantom启动了一个非常简单的项目。最初几次运行时没有出现错误,但我开始添加依赖项(fanbatis),在某个时候,每次运行测试或虚拟Hello World应用程序时,下面的错误都会出现

[23:44:18 22-Nov-13] [err] [pathenv] Cannot parse path: C:\dev\f4workspace\auth\bin\fan sys::ArgErr: Invalid Uri scheme for local file: c:\dev\f4workspace\auth\bin\fan/ fan.sys.LocalFile.uriToFile (LocalFile.java:64) fan.sys.File.make (File.java:26) util::PathEnv.parsePath (PathEnv.fan:47) fan.sys.List.each (List.java:555) util::PathEnv.parsePath (PathEnv.fan:43) util::PathEnv.make$ (PathEnv.fan:22) util::PathEnv.make (PathEnv.fan:20) java.lang.reflect.Method.invoke (Unknown) fan.sys.Method.invoke (Method.java:559) fan.sys.Method$MethodFunc.callList (Method.java:198) fan.sys.Type.make (Type.java:246) fan.sys.ClassType.make (ClassType.java:110) fan.sys.Type.make (Type.java:236) fan.sys.Sys.initEnv (Sys.java:447) fan.sys.Sys. (Sys.java:224) fanx.tools.Fan.execute (Fan.java:28) fanx.tools.Fan.run (Fan.java:298) fanx.tools.Fan.main (Fan.java:336) Hello, World! [23:44:18 22-Nov-13][err][pathenv]无法分析路径:C:\dev\f4workspace\auth\bin\fan sys::ArgErr:本地文件的Uri方案无效:c:\dev\f4workspace\auth\bin\fan/ fan.sys.LocalFile.uriToFile(LocalFile.java:64) fan.sys.File.make(File.java:26) util::PathEnv.parsePath(PathEnv.fan:47) fan.sys.List.each(List.java:555) util::PathEnv.parsePath(PathEnv.fan:43) util::PathEnv.make$(PathEnv.fan:22) util::PathEnv.make(PathEnv.fan:20) java.lang.reflect.Method.invoke(未知) fan.sys.Method.invoke(Method.java:559) fan.sys.Method$MethodFunc.callList(Method.java:198) fan.sys.Type.make(Type.java:246) fan.sys.ClassType.make(ClassType.java:110) fan.sys.Type.make(Type.java:236) fan.sys.sys.initEnv(sys.java:447) fan.sys.sys。(Sys.java:224) fanx.tools.Fan.execute(Fan.java:28) fanx.tools.Fan.run(Fan.java:298) fanx.tools.Fan.main(Fan.java:336) 你好,世界!
目前它更令人讨厌,因为测试和虚拟应用程序仍在运行。我创建了另一个项目,复制了所有源代码,一个类一个类地添加,并在每次更改后进行测试,但错误从未发生。有什么想法吗?

我认为问题与路径末尾的正斜杠有关,如错误消息的这一行所示

Invalid Uri scheme for local file: c:\dev\f4workspace\auth\bin\fan/

然而,我发现这样的路径并不存在。我手动创建了bin和fan文件夹,错误消失了。老实说,我真的不知道为什么F4需要并检查该文件夹,因为到目前为止它还没有在其中写入任何文件。

这是一个有趣的问题

tl/dr:您的工作区中有一个空项目“auth”,可以在其中创建一些虚拟类,也可以转到运行->运行配置,找到启动配置并取消选中“项目”选项卡上的无源项目

为了使您的Fantom安装与工作区中的项目保持干净,F4将内置的pod放入project/bin/fan/lib/fan中。当F4从工作区启动项目时,它使用并构建FAN_ENV_路径,方法是将指向Fantom安装的路径和工作区项目中的bin/文件夹的路径连接起来

当Fantom运行时分析FAN_ENV_路径时,首先它将路径解释为本机OS路径,但如果dir不存在,它将尝试将其解释为文件URI,下面是PathEnv源的相关部分:

path.split(File.pathSep[0]).each |item|
{
  if (item.isEmpty) return
  dir := File.os(item).normalize
  if (!dir.exists) dir = File(item.toUri.plusSlash, false).normalize
  if (!dir.exists) { log.warn("Dir not found: $dir"); return }
问题代码是item.toUri–在Mac OS X和Linux上,这被解析为URI,没有仅包含路径的方案,因此如果目录不存在,此代码只在控制台中打印警告

但在Windows上,由于路径中的磁盘名,磁盘名被解释为scheme:

fansh> "C:\\Users".toUri { echo(path); echo(scheme) }
[\Users]
c
fansh> "/Users".toUri { echo(path); echo(scheme) }
[Users]
null
然后文件构造函数失败,因为需要“文件”方案或空方案:

public static java.io.File uriToFile(Uri uri)
{
  if (uri.scheme() != null && !uri.scheme().equals("file"))
    throw ArgErr.make("Invalid Uri scheme for local file: " + uri);
  return new java.io.File(uriToPath(uri));
}

我在这里创建了一个问题,这样F4在构建FAN_ENV_PATH时会自动跳过空项目–。

根据我的经验,F4通常会创建它需要的目录,所以我从未见过这个特定错误。您是如何将src文件夹
fan/
添加到项目中的?我
右键单击项目-->新建-->Fantom源文件夹
,如果您手动将其添加到
build.fan
,则这可能是一个原因。