编译嵌入式Grizzly Jersey应用程序无法找到Jersey Resources

时间:2013-11-17 19:57:22

标签: java intellij-idea jersey gradle grizzly

我正在使用嵌入式Grizzly服务器在Jersey(v2)框架上安装一个应用程序。

在IntelliJ Idea社区12中编译和运行非常完美,但是当我使用Gradle编译为“.jar”时,对应用程序的每次http调用都会返回404。

我可以告诉资源类扫描不起作用,因为我有一个模拟类,它在启动时返回一个警告,我没有运行JAR的警告,但是我从Idea运行应用程序。

这是我的项目结构(简化为相关的事情):

api
    .idea
    libs
    src
        main
            java
                wci.api
                    main
                        Main.java
                    resource (Here are all resource classes)
    build.gradle

这是我在Main.java中初始化服务器的方式:

package wci.api.main;

// Some imports...

public class Main {
    public static final String BASE_URI = "http://0.0.0.0:4747/";

    public static void main(String[] args) throws IOException {
        // Some irrelevant code...

        final ResourceConfig rc = new ResourceConfig();

        rc.packages("wci.api.resource");                   // This does not work
        rc.register(wci.api.main.CorsSupportFilter.class); // This works

        final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);

        // Some more irrelevant code...
    }
}

这是我的build.gradle:

    apply plugin: 'java'

    repositories{
        mavenCentral()
    }

    dependencies{
        <<< Dependencies >>>

    }

    jar{
        from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
        manifest { attributes 'Main-Class': 'wci.api.main.Main' }
    }

这是我编译应用程序的方式:

gradle build

这就是我运行它的方式:

java -jar api.jar

缺少什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我可以发现一些问题:

  • 资源应该进入src/main/resources,而不是src/main/java。 (否则您将不得不重新配置sourceSets.main.resources.srcDirs。)
  • configurations.compile.collect { ... }应为configurations.runtime.collect { ... }

我建议使用Gradle的application插件,而不是手动创建一个胖Jar。