Jimfs path to ceylon Directory

199 Views Asked by At

I'm trying to create a directory (using ceylon's file module) in the Jimfs file system but I'm having problems with the Jimfs provider not being installed when accessing the filesystem from ceylon.

This is my test program:

// File: test.se.gustavkarlsson.autogit.file.watcher.run

import ceylon.file {
    Nil,
    parseURI
}

import com.google.common.jimfs {
    Jimfs {
        jimFs=newFileSystem
    }
}

shared void run() {
    value fs = jimFs();
    value jPath = fs.getPath("directory");
    value uri = jPath.toUri().string;
    value path = parseURI(uri);
    value resource = path.resource;
    assert (is Nil resource);
    resource.createDirectory();
}

When run, prints the following stacktrace:

ceylon run: Provider "jimfs" not found
java.nio.file.ProviderNotFoundException: Provider "jimfs" not found
    at java.nio.file.FileSystems.newFileSystem(FileSystems.java:341)
    at java.nio.file.FileSystems.newFileSystem(FileSystems.java:276)
    at ceylon.file.internal.createSystem_.createSystem(ConcreteSystem.ceylon:64)
    at ceylon.file.createSystem_.createSystem(System.ceylon:43)
    at test.se.gustavkarlsson.autogit.file.watcher.run_.run(run.ceylon:17)
    at test.se.gustavkarlsson.autogit.file.watcher.run_.main(run.ceylon)
    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:498)
    at ceylon.modules.api.runtime.SecurityActions.invokeRunInternal(SecurityActions.java:57)
    at ceylon.modules.api.runtime.SecurityActions.invokeRun(SecurityActions.java:48)
    at ceylon.modules.api.runtime.AbstractRuntime.invokeRun(AbstractRuntime.java:75)
    at ceylon.modules.api.runtime.AbstractRuntime.execute(AbstractRuntime.java:122)
    at ceylon.modules.api.runtime.AbstractRuntime.execute(AbstractRuntime.java:106)
    at ceylon.modules.Main.execute(Main.java:69)
    at ceylon.modules.Main.main(Main.java:42)
    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:498)
    at org.jboss.modules.Module.run(Module.java:312)
    at org.jboss.modules.Main.main(Main.java:460)
    at ceylon.modules.bootstrap.CeylonRunTool.run(CeylonRunTool.java:244)
    at com.redhat.ceylon.common.tools.CeylonTool.run(CeylonTool.java:491)
    at com.redhat.ceylon.common.tools.CeylonTool.execute(CeylonTool.java:380)
    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:498)
    at com.redhat.ceylon.launcher.Launcher.runInJava7Checked(Launcher.java:114)
    at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:41)
    at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:34)
    at com.redhat.ceylon.launcher.Launcher.main(Launcher.java:27)

Any ideas on how to install that provider?

I'm running Ceylon 1.2.0 on Linux, with JimFs 1.0 (also tested 1.1-rc1) and working with Jimfs the "intended" way (pure java nio) works fine.

1

There are 1 best solutions below

1
On BEST ANSWER

This is related to module visibility, where we need to add a "read" (using Jigsaw terminology) from the JDK to the jimFs module.

I've opened https://github.com/ceylon/ceylon/issues/5995 to investigate.