嵌入式Tomcat 8无法启动

时间:2015-12-07 23:22:42

标签: java tomcat jdbc embedded-tomcat-8

我有一个jar,它在一个带有Java 8.0.66的独立tomcat 8.0.28服务器上部署和运行

我希望从嵌入式Tomcat运行它来运行集成测试。 战争部署但未能启动,我没有想法,我收到以下错误:

Dec 07, 2015 6:11:46 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-9191"]
Dec 07, 2015 6:11:46 PM org.apache.tomcat.util.net.NioSelectorPool 
getSharedSelector
INFO: Using a shared selector for servlet write/read
Dec 07, 2015 6:11:46 PM org.apache.catalina.core.StandardService 
startInternal
INFO: Starting service Tomcat
Dec 07, 2015 6:11:46 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.0.28
Dec 07, 2015 5:43:47 PM org.apache.catalina.startup.ContextConfig 
getDefaultWebXmlFragment
INFO: No global web.xml found
Dec 07, 2015 5:43:47 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: 
org.apache.catalina.LifecycleException: Failed to start component 
[StandardEngine[Tomcat].StandardHost[localhost].
StandardContext[/StrateboBackEnd]]
...
Caused by: org.apache.catalina.LifecycleException: 
Failed to start component StandardEngine[Tomcat].StandardHost[localhost].
StandardContext[/myApp]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
... 6 more
Caused by: java.lang.NoSuchMethodError:   
javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;

我为嵌入式tomcat设置了以下设置

final Tomcat tomcat = new Tomcat();
tomcat.setPort(9191);
File baseDir = new File(".");
Context context = tomcat.addContext("", baseDir.getAbsolutePath());
tomcat.addWebapp("/Myapp", "C://Users//Add//git//Myapp//build//libs//Myapp-1.1.war");
tomcat.enableNaming();
ContextResource res = new ContextResource();
res.setName("jdbc/myDatabase");
res.setType("javax.sql.DataSource");
res.setAuth("Container");
res.setProperty("username", "username");
res.setProperty("password", "password");
res.setProperty("driverClassName","net.sourceforge.jtds.jdbc.Driver");
res.setProperty("url", "jdbc:jtds:sqlserver://127.0.0.1:1433//myDatabase");
res.setProperty("maxTotal", "10");
res.setProperty("maxIdle", "10");
res.setProperty("maxWaitMillis", "10000");
res.setProperty("removeAbandonedTimeout","300"); 
res.setProperty("defaultAutoCommit","true"); 
context.getNamingResources().addResource(res);
tomcat.start();
tomcat.getServer().await();

我有一个我用于正常部署的context.xml,但是从我能说的内容中看不到嵌入式内容。

由于jar是独立工作的,我知道jar不是问题

有这条信息专线 信息:找不到全局web.xml 哪个可能指向一个问题但无法找到参考 以防这里是我的gradle文件依赖项的相关部分

compile 'org.apache.tomcat:tomcat-util:8.0.28'
compile 'org.apache.tomcat.embed:tomcat-embed-core:8.0.28'
compile 'org.apache.tomcat.embed:tomcat-embed-jasper:8.0.28'
compile 'org.apache.tomcat.embed:tomcat-embed-logging-juli:8.0.28'
compile 'org.apache.tomcat:tomcat-dbcp:8.0.28'

有什么建议非常感谢? 对于额外的一点是否有任何方法可以让tomcat更好地反馈它不喜欢什么?

1 个答案:

答案 0 :(得分:0)

经过一些研究后,看起来关于嵌入式Tomcat 8的StackOverflow上的大多数问题仍未得到解答,似乎没有兴趣或开发这个领域。由于这是用于集成测试,我在我的Jenkins机器上设置了一个tomcat服务器,Jenkins将战争推向它,重新启动它然后运行集成测试。这项工作虽然可能不是最优雅的。