简体   繁体   English

Gradle Tomcat插件依赖性

[英]Gradle Tomcat plugin dependencies

Perhaps I'm not understanding Gradle's configurations properly, but I can't seem to make sense of what's going on here. 也许我没有正确理解Gradle的配置,但是我似乎无法理解这里发生的事情。 I need org.glassfish.web:javax.servlet.jsp.jstl:1.2.1 in my WAR because Tomcat doesn't provide JSTL, so I put the dependency on the runtime configuration (it's not needed for compilation). 我的WAR中需要org.glassfish.web:javax.servlet.jsp.jstl:1.2.1,因为Tomcat不提供JSTL,因此我将依赖项放在运行时配置中(编译不需要)。 The tomcat configuration also requires this package. Tomcat的配置也需要此软件包。 However, the tomcatRun task will only work if the dependency is ONLY added to the tomcat configuration. 但是,仅在将依赖项添加到tomcat配置中时,tomcatRun任务才起作用。 If the dependency is added to runtime, or to both runtime and tomcat, or to neither, the following stack trace results: 如果将依赖项添加到运行时,或同时添加到运行时和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)

The gradle code is as follows. gradle代码如下。 The offending line is commented out, allowing tomcatRun to work successfully but preventing my WAR from working. 有问题的行已被注释掉,从而允许tomcatRun成功工作,但阻止了我的WAR工作。 When the line is uncommented, tomcatRun fails and the WAR works. 当该行取消注释时,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'
  }
}

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

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

I had used https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl and got same error. 我使用了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