1

我有一个 JAX-RS 项目,它在 gradle 中有码头插件。我想用 gretty 替换 jetty 插件,因为 gradle 4 和其他版本不支持 jetty。运行 gretty 插件时出现以下错误。

任务“:appRunWar”执行失败。

java.lang.Exception:com/sun/jersey/spi/inject/InjectableProvider

包含 jetty 插件的 build.gradle 代码

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'jetty'
apply plugin: 'eclipse'
jettyRun {
    httpPort = 8080
    reload = 'automatic'
    scanIntervalSeconds = 2
    daemon = false
}
//other things....

用 gretty 替换 jetty 的 build.gradle 代码

apply plugin: 'java'
apply plugin: 'war'
apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'
apply plugin: 'eclipse' 
gretty {
    httpPort = 8080
    //contextPath = '/'
    servletContainer = 'jetty9'
    httpEnabled = true
}
//other things...
4

1 回答 1

3

首先,不要使用Akhikhl 的gretty,因为它不再维护,并且在某些码头版本中显示出困难,例如。码头94和码头93。此外,不支持 Java 版本 9 和 10。相反,您应该依赖gretty-gradle-plugin,它是一个直接维护的分支:

plugins {
    id 'java'
    id 'war'
    id 'eclipse'
    id 'org.gretty' version '2.1.0'
}

gretty {
    //contextPath = '/'
}

//other things...

您为 gretty 提供的配置是默认配置,您可以将其删除。
中的默认配置ServerConfig.groovy如下所示:

static ServerConfig getDefaultServerConfig(String serverName) {
    ServerConfig result = new ServerConfig()
    result.jvmArgs = []
    result.servletContainer = 'jetty9'
    result.managedClassReload = false
    result.httpEnabled = true
    result.httpsEnabled = false
    result.interactiveMode = 'stopOnKeyPress'
    result.scanInterval = 1
    result.loggingLevel = 'INFO'
    result.consoleLogEnabled = true
    result.fileLogEnabled = true
    result.logFileName = serverName
    result.redeployMode = 'restart'
    result.logDir = "${System.getProperty('user.home')}/logs" as String
    result.scanner = 'jetty'
    result.portPropertiesFileName = 'gretty_ports.properties'
    result.liveReloadEnabled = false
    return result
}

请注意,可以在'org.gretty'Akhikhl 的 gretty 所在的位置找到 gretty-gradle-plugin 'org.akhikhl.gretty'。如果您的错误仍然存​​在,请提供完整的堆栈跟踪并相应地更新您的答案。

于 2018-05-01T19:38:53.507 回答