java - 嵌入式 Tomcat 8 无法启动

标签 java tomcat jdbc embedded-tomcat-8

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

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

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 就它不喜欢的东西提供更好的反馈?

最佳答案

经过一些研究后,StackOverflow 上关于嵌入式 Tomcat 8 的大部分问题似乎都没有得到解答,似乎没有人对这个领域感兴趣或没有开发。因为这是用于集成测试,所以我在我的 Jenkins 机器上设置了一个 tomcat 服务器,然后 Jenkins 将 war 推向它,重新启动它然后运行集成测试。这项工作虽然可能不是最优雅的。

关于java - 嵌入式 Tomcat 8 无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34145237/

相关文章:

java - ireports内部预览和pdf预览之间的区别

java - 关于JLabel的基本问题

java - 无法反序列化模型实例。PublisheDataList 超出 START_ARRAY token

Java SimpleDateFormat 像 America/Los_Angeles 一样解析时区

java - HTTP 状态 500 - java.lang.NoClassDefFoundError : Could not initialize class org. apache.jasper.el.E​​LContextImpl

java - mvn tomcat7 :run-war or tomcat:run-war give a 404 and no logs

tomcat - 将 war 文件从本地机器复制到 docker

java - 通过Java程序连接Oracle

java - 如何从 Java 中的 T-SQL 存储过程获取返回值?

java - 收到错误“SQL 状态 : 08001 No suitable driver found for jdbc:oracle:thin:@128:23:44:01:12345:pppp_rr