繁体   English   中英

Gradle Tomcat插件依赖性

[英]Gradle Tomcat plugin dependencies

也许我没有正确理解Gradle的配置,但是我似乎无法理解这里发生的事情。 我的WAR中需要org.glassfish.web:javax.servlet.jsp.jstl:1.2.1,因为Tomcat不提供JSTL,因此我将依赖项放在运行时配置中(编译不需要)。 Tomcat的配置也需要此软件包。 但是,仅在将依赖项添加到tomcat配置中时,tomcatRun任务才起作用。 如果将依赖项添加到运行时,或同时添加到运行时和tomcat,或两者都不添加,则会生成以下堆栈跟踪结果:

Servlet  threw load() exception
org.apache.jasper.JasperException: /WEB-INF/jsp/index.jsp (line: 1, column: 63) Unable to read TLD "META-INF/c.tld" from JAR file "file:/home/rob/.gradle/caches/modules-2/files-2.1/org.glassfish.web/javax.servlet.jsp.jstl/1.2.1/7f687140e9d264ee00eaa924714adf9a82cc18dc/javax.servlet.jsp.jstl-1.2.1.jar": org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.standard.tlv.JstlCoreTLV
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:443)
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:219)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:184)
    at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:410)
    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:475)
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1410)
    at org.apache.jasper.compiler.Parser.parse(Parser.java:138)
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242)
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:102)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:374)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:341)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    at org.apache.jasper.servlet.JspServlet.init(JspServlet.java:138)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5231)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5518)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

gradle代码如下。 有问题的行已被注释掉,从而允许tomcatRun成功工作,但阻止了我的WAR工作。 当该行取消注释时,tomcatRun失败并且WAR起作用。

dependencies {
  runtime 'org.apache.derby:derby:10.10.2.0',
    'com.sun.mail:javax.mail:1.5.2'/*,
    'org.glassfish.web:javax.servlet.jsp.jstl:1.2.1'*/

  compile 'javax.mail:javax.mail-api:1.5.2'

  providedCompile "javax.servlet:javax.servlet-api:${servletSpec}"

  tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
    "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}",
    "org.apache.tomcat:tomcat-dbcp:${tomcatVersion}",
    files('ecj-4.3.1.jar'),
    "org.glassfish.web:javax.servlet.jsp.jstl:1.2.1"

  tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") {
    exclude group: 'org.eclipse.jdt.core.compiler', module: 'ecj'
  }
}

请使用https://mvnrepository.com/artifact/javax.servlet/jstl/1.2

compile group: 'javax.servlet', name: 'jstl', version: '1.2'

我使用了https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl并得到了相同的错误。

我通过使用'javax.servlet:jstl:1.2'而不是'org.glassfish.web:javax.servlet.jsp.jstl:1.2.1'解决了该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM