1

我正在使用 maven-jetty-plugin 快速运行和调试我在 Eclipse/m2eclipse 下开发的 WebApp。它启动正常,我可以完全使用调试器,但我不能优雅地停止应用程序。

当我在控制台视图中执行 ctrl+c 时,尽管在启动器配置中启用了“分配控制台”,但它什么也不做。

在简单的 java 项目中, ctrl+c 选项工作正常(在 windows 上测试)。所以这似乎是一些远程/嵌入式 jvm 问题。我的应用程序使用持久 JMS 队列,因此每次重新启动后,我都需要手动终止另一台服务器上的会话。这不是很敏捷。

任何人都知道问题的根源是什么?或者也许有一些已知的解决方法?

4

2 回答 2

6

如果您使用 m2eclipse 插件,您可以直接从 eclipse 运行 maven。

1 转到您调试配置并在 maven build 下创建一个新条目。
2 给它一个名字。
3 选择 maven 项目的基本目录。
4 为一个目标输入 jetty:run 然后点击调试按钮。

一切都应该很好。您可以从 Eclipse 内的控制台视图中将其杀死。所有断点都应该照常工作。

要从 Eclipse 中正常关闭应用程序,您必须执行以下操作。将以下配置添加到您的 pom 中以获取 jetty 插件。这里的重要部分是停止键和停止端口。

<configuration>
    <tmpDir>target/not/necessary</tmpDir>
    <webAppConfig>
        <contextPath>/${project.name}</contextPath>
    </webAppConfig>
    <stopPort>9966</stopPort> 
    <stopKey>jetty-stop</stopKey>
</configuration>

接下来为 maven 添加另一个运行配置,但这次将目标设置为 jetty:stop。它将执行正常关机。

为了使其更加自动化:可以将目标设置为 jetty:stop jetty:start。这样,如果该进程未运行,则会出现一个小警告,但启动过程将继续。否则其他进程将被优雅地关闭,然后服务器将被启动。

只需要一个命令,它可以通过一个快捷方式(运行最后一个构建)运行,从而减少上下文切换。

于 2012-12-27T17:09:37.163 回答
1

解决方法 1

  1. 从命令提示符 cd 到您的 webApp 项目(例如,主 pom.xml 所在的位置)。
  2. 从那里运行 Jettymvn jetty:run
  3. 从那里开始用 ctrl+c 杀戮!(至少使用 Windows cmd)

解决方法 2

  1. 安装VisualVM
  2. 在新的 VisualVM 上安装Kill Application插件
  3. 右键单击 VisualVM 列表中的 Jetty 应用程序,然后“杀死应用程序”
于 2015-12-30T08:41:42.253 回答