【问题标题】:Unable to deploy on tomcat after switching from ant to maven从ant切换到maven后无法在tomcat上部署
【发布时间】:2019-07-15 13:46:11
【问题描述】:

我有一个将项目从 ant 迁移到 maven。
它是一个 tomcat 应用程序。
但是如果我现在用 maven 编译 war 文件,在启动 war 文件后会得到一个异常。

javax.naming.NameNotFoundException:名称 [comp/env] 未绑定在此上下文中。无法找到 [comp]。 在 org.apache.naming.NamingContext.lookup(NamingContext.java:817) 在 org.apache.naming.NamingContext.lookup(NamingContext.java:173) 在 org.apache.catalina.deploy.NamingResourcesImpl.cleanUp(NamingResourcesImpl.java:994) 在 org.apache.catalina.deploy.NamingResourcesImpl.stopInternal(NamingResourcesImpl.java:976) 在 org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:226) 在 org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5476) 在 org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:226) 在 org.apache.catalina.manager.ManagerServlet.undeploy(ManagerServlet.java:1456) 在 org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:373) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:635) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:613) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1463) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.base/java.lang.Thread.run(Thread.java:834)

当我使用 ant 编译时,应用程序启动时没有问题。

这是我的 context.xml

<?xml version="1.0" encoding="UTF-8"?>
    <Context antiJARLocking="true" path="/AppControlServer">
    <Resource name="jdbc/App" auth="Container"
    type="javax.sql.DataSource" maxActive="50" maxIdle="10" maxWait="4000"
    username="App" password="App"
    driverClassName="org.postgresql.Driver"
    url="jdbc:postgresql://localhost:5432/App"/>
</Context>

应用程序正在使用hibernate,这是我的hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="hibernate.connection.datasource">java:comp/env/jdbc/App</property>
        <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
        <property name="hibernate.current_session_context_class">managed</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.show_sql">false</property>
        <! -- entity mapping -->
    </session-factory>
</hibernate-configuration>

感谢您的帮助

【问题讨论】:

标签: java hibernate maven tomcat8


【解决方案1】:

好吧,如果您只更改了构建平台,那么比较两个 war 文件,看看有什么变化。当您知道发生了什么变化时,更容易修复它。

我基于类似迁移的猜测是您在源文件夹中有资源文件 (src/main/java)。 Maven 不会从源文件夹复制文件,它们应该放在资源文件夹 (src/main/resources) 中。如果您移动文件,请务必保留目录结构!

【讨论】:

  • 我看到的唯一区别是 maven 战争包含一个文件夹 maven,其中包含 pom.xml 和 pom.properties。而 MANIFEST.MF 则不同。
  • 奇数。我假设您已经使用某些工具递​​归地对文件夹进行了区分,以便您确定除了上述之外它们是相同的? Maven文件应该无关紧要。清单可能会有所作为,但这是一个长期的目标。您可以尝试手动替换 Maven 生成的 war 中的清单,看看是否有帮助。
猜你喜欢
  • 2015-09-28
  • 2018-01-21
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 2022-01-14
  • 1970-01-01
  • 2017-01-22
相关资源
最近更新 更多