首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与棘轮-pac4j相关的RatpackServer.start会导致非静态上下文错误。

与棘轮-pac4j相关的RatpackServer.start会导致非静态上下文错误。
EN

Stack Overflow用户
提问于 2016-05-12 12:34:53
回答 1查看 118关注 0票数 0

对于我来说,使用RatpackServer的start方法遇到了非常难以理解的麻烦。

我的意思是这种方法

代码语言:javascript
复制
static RatpackServer start(Action<? super RatpackServerSpec> definition)
                throws Exception

这是我的密码:

代码语言:javascript
复制
public static void main(String... args) throws Exception {

    ProgramInitializer programInitializer = new ProgramInitializer();
    programInitializer.initialize();


    RatpackServer.start(b -> b
            .serverConfig(s -> s
                    .baseDir(BaseDir.find())
                    .env()
            )
            .registry(
                    Guice.registry(s -> s
                            .module(TextTemplateModule.class, conf ->
                                    conf.setStaticallyCompile(true)
                            )
                            .bindInstance(ServerErrorHandler.class, (ctx, error) -> {
                                logger.error("Unexpected error", error);
                                ctx.render(groovyTemplate("error500.html"));
                            })
                            .bindInstance(ClientErrorHandler.class, (ctx, statusCode) -> {
                                ctx.getResponse().status(statusCode);
                                if (statusCode == 404) {
                                    ctx.render(groovyTemplate("error404.html"));
                                } else if (statusCode == 401) {
                                    ctx.render(groovyTemplate("error401.html"));
                                } else if (statusCode == 403) {
                                    ctx.render(groovyTemplate("error403.html"));
                                } else {
                                    logger.error("Unexpected: {}", statusCode);
                                }
                            })
                    )
            )
            .handlers(c -> { c
                                .get("index.html", ctx -> {
                                    //ctx.redirect(301, "/");
                                    logger.debug("Retrieving user profile...");
                                    final Map<String, Object> model = Maps.newHashMap();
                                    RatpackPac4j.userProfile(ctx)
                                            .route(Optional::isPresent, p -> {
                                                model.put("profile", p);
                                                ctx.render(groovyTemplate(model, "index.html"));
                                            })
                                            .then(p -> {
                                                ctx.render(groovyTemplate(model, "index.html"));
                                            });
                                    //
                                })
                                //.get(ctx -> ctx.render(groovyTemplate("index.html")))

                                .get("hello", ctx -> {
                                    RelativisticModel.select();
                                    //String energy = System.getenv("ENERGY");
                                    //Amount<Mass> m = Amount.valueOf(energy).to(KILOGRAM);
                                    ctx.render(programInitializer.getTweetsList());
                                })

                                .files(f -> f.dir("public"));
                    }
            )
    );
}

在我将此依赖添加到build.gradle之前,一切都进行得很顺利:

代码语言:javascript
复制
compile 'io.ratpack:ratpack-pac4j:1.3.3'

所以整个文件看起来如下:

代码语言:javascript
复制
group 'pl.edu.agh.tai.tdo'
version '1.0'

apply plugin: 'java'
apply plugin: 'idea'

buildscript {
    repositories {
        maven { url "http://oss.jfrog.org/repo" }
        mavenCentral()
        maven { url "http://dl.bintray.com/robfletcher/gradle-plugins" }
        maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
        jcenter()
    }
    dependencies {
        classpath "io.ratpack:ratpack-gradle:1.0.0"
        classpath ('org.ratpack-framework:ratpack-gradle:0.9.0-SNAPSHOT')
    }
}

apply plugin: "io.ratpack.ratpack-groovy"

repositories {
    maven { url "http://oss.jfrog.org/repo" }
    mavenCentral()
    maven { url "http://repo.springsource.org/repo" } // for springloaded
    maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
    jcenter()
}

mainClassName = "pl.edu.agh.tai.tdo.Main"

dependencies {

    compile "org.ratpack-framework:ratpack-handlebars:0.9.0-SNAPSHOT"

    runtime "org.slf4j:slf4j-simple:1.7.12"
    compile "com.heroku.sdk:heroku-jdbc:0.1.1"
    compile "org.postgresql:postgresql:9.4-1201-jdbc4"
    compile "org.jscience:jscience:4.3.1"

    compile 'io.ratpack:ratpack-pac4j:1.2.0'
    compile 'org.twitter4j:twitter4j-core:4.0.4'
    compile 'ch.qos.logback:logback-classic:1.1.7'

    testCompile group: 'junit', name: 'junit', version: '4.11'
}

sourceSets {
    main.java.srcDir "src/main/java"
    main.resources.srcDirs "src/main/resources"
    test.java.srcDir "src/test/java"
}

task stage {
    dependsOn installDist
}

在主类中添加此依赖项之后

代码语言:javascript
复制
Error:java: incompatible types: com.google.inject.Injector is not a functional interface
multiple non-overriding abstract methods found in interface com.google.inject.Injector


Error:(29, 22) java: method start in interface ratpack.server.RatpackServer cannot be applied to given types; required: no
arguments found: (b)->b.ser[...]); }) 
reason: actual and formal argument lists differ in length


Error:(63, 56) java: invalid method reference

不能从静态上下文引用非静态方法isPresent()

高于RatpackServer.start(.)在IntelliJ中它是写的

代码语言:javascript
复制
Non-static method start() cannot be referenced from a static context

有这样的问题吗?对我来说这真的是个谜。我试着建立我的第一个应用程序基于..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-12 14:54:48

您似乎正在混合和匹配多个版本的Ratpack。

在您的构建文件中,我发现:

  • Ratpack 0.9.0
  • Ratpack 1.2.0
  • Ratpack 1.0.0

您使用的RatpackServer版本没有将start方法作为静态方法。

我已经为您修复了构建gradle文件:

代码语言:javascript
复制
plugins {
  id 'io.ratpack.ratpack-groovy' version '1.3.3' // downloads ratpack-groovy 1.3.3 which is latest as of 2016-05-12
  id 'idea' // new way of applying idea plugin
}

group 'pl.edu.agh.tai.tdo'
version '1.0'

repositories {
    maven { url "http://oss.jfrog.org/repo" }
    mavenCentral()
    maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
    jcenter()
}

mainClassName = "pl.edu.agh.tai.tdo.Main"

dependencies {
    compile ratpack.dependency('handlebars') // use ratpack gradle plugin to ensure that ratpack-handlebars 1.3.3 is used
    compile ratpack.dependency('pac4j') // use ratpack gradle plugin to ensure that ratpack-pac4j 1.3.3 is used

    runtime "org.slf4j:slf4j-simple:1.7.12"
    compile "com.heroku.sdk:heroku-jdbc:0.1.1"
    compile "org.postgresql:postgresql:9.4-1201-jdbc4"
    compile "org.jscience:jscience:4.3.1"

    compile 'org.twitter4j:twitter4j-core:4.0.4'
    compile 'ch.qos.logback:logback-classic:1.1.7'

    testCompile group: 'junit', name: 'junit', version: '4.11'
}

task stage(dependsOn: installDist)

Ratpack Gradle插件,当您调用

代码语言:javascript
复制
plugins {
  id 'io.ratpack.ratpack-groovy' version '1.3.3'
}

提供一个方法ratpack.dependency,它将提取给定模块的适当版本,例如pac4j。

以下内容相当于:

代码语言:javascript
复制
dependencies {
    compile ratpack.dependency('pac4j')
}

代码语言:javascript
复制
dependencies {
    compile 'io.ratpack:ratpack-pac4j:1.3.3'
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37187059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档