【问题标题】:Deploying maven project to tomcat server将maven项目部署到tomcat服务器
【发布时间】:2015-10-20 13:28:49
【问题描述】:

我在 Eclipse(webapp 原型)中的 maven 项目存在一些问题。我用一个 .jsp 和一个 servlet 编写了一个简单的应用程序。 .jsp 页面工作正常,但访问 servlet 会导致 Class not found 异常。 我认为问题在于 Maven(以及 Eclipse)将 servlet 类部署为 Servlet.java 而不是 Servlet.class(在 wtpwebapps > .. > WEB_INF > classes >> etc. 中)。

编写为动态 Web 应用程序的相同代码可以正常工作,因为 Eclipse 使用 .class 扩展名部署了 servlet。

我想坚持一个 Maven 项目,所以你能给我一些关于如何解决这个问题的提示吗?

【问题讨论】:

    标签: eclipse tomcat7 maven-3


    【解决方案1】:

    Tomcat 提供 servlet.jar。你需要把它作为<scope>provided</scope>放在你的pom.xml中。

    话虽如此,Eclipse/Maven 不应将 servlet 部署为 Java 类文件。它是 Tomcat 提供的完整库,不应编译为单个类。打包的 *.war 文件(webapps 下的 lib 文件夹)中绝对不能有 2 个 servlet-api 或 servlet.jar。

    此外,注意抛出哪个 ClassNotFoundException 可能会有所帮助。缺什么课?因为这听起来像您的 JSP 版本引用的类不在自动部署的 servlet-api jar Tomcat7 提供的 (3.0) 中。

    【讨论】:

    • 我的意思是我的类被部署为 .java(SimpleServlet.java 而不是 SimpleServlet.class)。根本原因是:ClassNotFoundException: com.webapp.simpleservlet.SimpleServlet。动态 Web 应用程序在 wptwebapps 文件夹中部署类似,但类文件夹中有一个 SimpleServlet.class 而不是 .java。
    • 顺便说一句:Eclipse 将两个项目都部署到 wptwebapp 目录,运行 mvn tomcat7:deploy 将其放在其他地方 - 我也可以将其更改为 wptwebapps 吗?
    • 为什么使用maven部署?通过 Eclipse 运行 Tomcat 并通过mvn eclipse:eclipse在 Eclipse 中将项目设置为 Maven 项目将自动允许您通过 Eclipse 在 Tomcat 上部署它。如果在 Eclipse 中启动 Tomcat,它会自动编译和部署项目。
    • 是的,我就是这么做的,但我只是好奇为什么“mvn tomcat7:deploy”的工作方式与 Eclipse 不同。
    • 尝试编辑您的原始问题并提供有关您的设置的更多信息(和屏幕截图)。在这一点上,我不能说为什么这两个行为不同。
    【解决方案2】:

    这是我的错。我将源代码放入 src/main/resources 而不是 src/main/java - 这就是它没有被编译的原因。

    我仍然想知道为什么 maven 不将应用程序部署到 wtpwebapps 但主要问题现在已修复,感谢帮助!

    【讨论】:

      【解决方案3】:

      如果您运行mvn tomcat7:deploy,则 maven 正在搜索 pom.xml 中配置的正在运行的 tomcat 服务器:

      <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <configuration>
              <server>TomcatServer</server>
              <username>USERNAME</username>
              <password>PASSWORD</password>
              <url>http://localhost:8080/manager/text</url>
              <path>/training</path>
          </configuration>
      </plugin>
      

      正如您在 url 中看到的那样,调用 manager 应用程序进行部署(管理器应用程序默认安装在 tomcat 中,但 NOT 安装在 eclipse 中的 tomcat 中,因为eclipse 使用它自己的 tomcat-webapp-folder (wptwebapp))。

      无论如何,如果你想在 eclipse 之外使用这种部署,你必须在 tomcat-users.xml 中创建一个角色为manager-guimanager-script 的用户。

      【讨论】:

      • 哦好的,我现在明白了,非常感谢您的澄清:)
      • 顺便说一句 - 如果你想在一个开放的存储库(如 GitHub)中提交 pom,并且不希望你的本地 TomcatServer 在 pom.xml 中的用户名和密码,你可以排除它进入用户目录的 maven settings.xml (servers->server->id(TomcatServer),username,password)。这样,您不必在 pom 中设置用户名和密码,但 server-entry 必须与 settings.xml 中的 server-id 匹配,以便 Maven 可以为您组合这些信息。 ;-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多