Gradle + Dropwizard + Shadow -> 无法找到或加载主程序 class
Gradle + Dropwizard + Shadow -> Could not find or load main class
我正在尝试使用 Dropwizard 和 Gradle 作为构建系统来创建一个简单的微服务。
没有数据库,只有 REST 端点可以公开。
所以我有一个控制器:
@Path("/domainurl/")
@Produces(MediaType.APPLICATION_JSON)
public class SimpleController {
@GET
public Example resourceExample() {
return new Example("something");
}
}
我的应用程序主要 class:
public class Application extends Application<MyConfiguration> {
@Override
public void run(MyConfiguration configuration, Environment environment) throws Exception {
final SimpleCOntroller controller = new SimpleController();
environment.jersey().register(controller);
}
public static void main(String[] args) throws Exception {
new Application().run(args);
}
}
示例是一个带有一个字符串的简单值对象 属性,此时 MyConfiguration 为空 class。
和build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.0'
}
}
apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'application'
apply plugin: 'com.github.johnrengelman.shadow'
mainClassName = "com.example.Application"
//
dependencies
//
run {
args 'server', './src/config/microservice.yml'
}
task wrapper(type: Wrapper) {
gradleVersion = '2.1'
}
jar {
manifest {
attributes 'Main-Class': mainClassName
}
}
但是在构建之后,当我输入:
java -jar MyApp.jar
我仍然得到:
Error: Could not find or load main class com.example.Application
有什么想法吗?
当使用 com.github.johnrengelman.shadow
插件时,您需要执行 shadowJar
任务和 运行 在 <project_root>/build/libs
下创建的名为 <name>-all.jar
.[=17= 的工件]
顺便说一句:我知道您只提供了部分代码,但我在这里发现了一些错误(例如 SimpleCOntroller
和 SimpleController
)。 Here 可以找到有关开始使用 dropwizard 的精彩教程。
我刚刚遇到了同样的错误。请注意,您要将 "server your-file-name.yml" 添加到程序参数而不是 VM 选项 ;-)
我正在尝试使用 Dropwizard 和 Gradle 作为构建系统来创建一个简单的微服务。 没有数据库,只有 REST 端点可以公开。
所以我有一个控制器:
@Path("/domainurl/")
@Produces(MediaType.APPLICATION_JSON)
public class SimpleController {
@GET
public Example resourceExample() {
return new Example("something");
}
}
我的应用程序主要 class:
public class Application extends Application<MyConfiguration> {
@Override
public void run(MyConfiguration configuration, Environment environment) throws Exception {
final SimpleCOntroller controller = new SimpleController();
environment.jersey().register(controller);
}
public static void main(String[] args) throws Exception {
new Application().run(args);
}
}
示例是一个带有一个字符串的简单值对象 属性,此时 MyConfiguration 为空 class。
和build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.0'
}
}
apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'application'
apply plugin: 'com.github.johnrengelman.shadow'
mainClassName = "com.example.Application"
//
dependencies
//
run {
args 'server', './src/config/microservice.yml'
}
task wrapper(type: Wrapper) {
gradleVersion = '2.1'
}
jar {
manifest {
attributes 'Main-Class': mainClassName
}
}
但是在构建之后,当我输入:
java -jar MyApp.jar
我仍然得到:
Error: Could not find or load main class com.example.Application
有什么想法吗?
当使用 com.github.johnrengelman.shadow
插件时,您需要执行 shadowJar
任务和 运行 在 <project_root>/build/libs
下创建的名为 <name>-all.jar
.[=17= 的工件]
顺便说一句:我知道您只提供了部分代码,但我在这里发现了一些错误(例如 SimpleCOntroller
和 SimpleController
)。 Here 可以找到有关开始使用 dropwizard 的精彩教程。
我刚刚遇到了同样的错误。请注意,您要将 "server your-file-name.yml" 添加到程序参数而不是 VM 选项 ;-)