Ratpack: как отобразить файл из пути к классам?

Я хочу отобразить или отправить «статический» файл из пути к классам. С точки зрения логистики файл исходит из ссылочного проекта и доступен в корневом каталоге пути к классам.

Мой код до сих пор:

  handlers {

    get{
      log.info "trying to get index ${file( '/index.html' )}"
      render file( '/index.html' )
    }

  }

при вызове URL-адреса я получаю страницу с ошибкой 404 и в журналах вижу:

INFO ratpack - попытка получить индекс C:\my-project\build\resources\main\index.html

Я попытался добавить пружинный префикс classpath: без положительного эффекта.

Что мне не хватает? BaseDir настроен?


person injecteer    schedule 27.08.2019    source источник
comment
я думаю, вам нужен этот параметр конфигурации: ratpack.io/manual/current/launching.html# базовый_каталог   -  person daggett    schedule 27.08.2019
comment
@daggett у тебя есть пример для меня?   -  person injecteer    schedule 27.08.2019


Ответы (1)


кажется, в ratpack нет поддержки рендеринга ресурсов:

FileSystemBinding. of() всегда создает DefaultFileSystemBinding

И DefaultFileSystemBinding.file() в настоящее время поддерживает только простую файловую систему.

однако легко добавить его:

./www/index.htm

<h1>hello world</h1>

./Main.groovy

@Grapes([
    @Grab(group='io.ratpack', module='ratpack-groovy', version='1.7.3',  transitive=false),
    @Grab(group='io.ratpack', module='ratpack-core',   version='1.7.3'),
    @Grab(group='io.ratpack', module='ratpack-guice',  version='1.7.3'),
    @Grab(group='org.slf4j',  module='slf4j-simple',   version='1.7.26')
])
import static ratpack.groovy.Groovy.ratpack
import java.nio.file.Paths
import java.nio.file.Path

@groovy.transform.CompileStatic
Path resource(String rname){
    URL url = this.getClass().getClassLoader().getResource(rname)
    assert url : "resource not found: $rname"
    return Paths.get( url.toURI() )
}

ratpack {
    handlers {
        get { //render default file
            render resource('index.htm')
        }
        get(":filename") { //render other files
            render resource(pathTokens.filename)
        }
    }
}

запустить его:

groovy -cp ./www Main.groovy
person daggett    schedule 27.08.2019
comment
изменил ответ - person daggett; 28.08.2019
comment
Ага, тоже об этом думал - person injecteer; 28.08.2019