我正在使用嵌入式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
缺少什么?
提前致谢。
答案 0 :(得分:0)
我可以发现一些问题:
src/main/resources
,而不是src/main/java
。 (否则您将不得不重新配置sourceSets.main.resources.srcDirs
。)configurations.compile.collect { ... }
应为configurations.runtime.collect { ... }
。我建议使用Gradle的application
插件,而不是手动创建一个胖Jar。