我正在尝试通过JNLP启动Tomcat,以允许我们的用户远程启动Web应用程序。
Maven POM文件具有以下依赖性:
...
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>8.5.32</version>
</dependency>
JNLP文件如下:
...
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.8+"/>
<jar href="app.jar"/>
</resources>
<application-desc main-class="com.myapp.Main"/>
app.jar 包含所有Maven依赖关系中的所有类。通过JNLP启动时,出现以下异常:
2018年7月1日晚上7:18:59 org.apache.catalina.core.StandardService startInternal INFO:启动服务[Tomcat] 2018年7月1日晚上7:18:59 org.apache.catalina.core.StandardEngine start内部信息:正在启动 Servlet引擎:Apache Tomcat / 8.5.32 2018年7月1日晚上7:18:59 org.apache.catalina.startup.ContextConfig getDefaultWebXmlFragment 信息:找不到全局web.xml 2018年7月1日晚上7:18:59 org.apache.catalina.core.ApplicationContext日志信息:标记servlet [jsp]无效,2018年7月1日晚上7:18:59 org.apache.catalina.core.StandardContext loadOnStartup严重:Servlet Web应用程序中的[jsp]抛出load()异常 java.lang.ClassNotFoundException:org.apache.jasper.servlet.JspServlet 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1137) 在 org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:546) 在 org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:527) 在 org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150) 在 org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1044) 在 org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:983) 在 org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4978) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5290) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1421) 在 org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1411) 在java.util.concurrent.FutureTask.run(未知来源) java.util.concurrent.ThreadPoolExecutor.runWorker(未知源),位于 java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知源) java.lang.Thread.run(未知来源)
我已经检查过罐子里有没有。这也得到了证明,因为以下程序运行良好:
java -jar app.jar com.myapp.Main
Main 类如下:
public static void main(String[] args){
Tomcat tomcat = new Tomcat();
String baseDir = createTempDir();
tomcat.setBaseDir(baseDir);
tomcat.setPort(9000);
tomcat.getHost().setAppBase(".");
tomcat.addWebapp("", ".");
tomcat.start();
tomcat.getServer().await();
System.out.println("Done");
}
任何帮助将不胜感激。您在这里看不到任何真正的webapp文件夹,因为我试图使用 AbstractAnnotationConfigDispatcherServletInitializer
运行Spring