如何使用java代码在eclipse Kepler中启动tomcat 7服务器?

时间:2014-06-01 04:21:26

标签: java eclipse tomcat eclipse-plugin

有没有办法在不进入'Servers'并点击'Run'的情况下启动在eclipse中运行的tomcat服务器?我希望进行功能测试,设置属性文件,然后启动服务。 在真正的功能测试环境中,我正在重新启动Windows服务,但是当我开发新测试并且“服务”在我的日食中本地运行时,我想要这种能力。

任何提示/想法?

2 个答案:

答案 0 :(得分:1)

据我所知,您有3个选项(按优先顺序列出):

  1. the tomcat maven plugin。我猜你正在使用一些构建系统运行你的测试(希望是maven)。在这种情况下,这已经得到了照顾。
  2. 旧的System.exec()(或更好,ProcessBuilder) - 只需执行tomcat的启动脚本。这可能是最不起作用和最兼容的选项(与以后正常执行的结果兼容)
  3. class Tomcat可用于为单元测试显式启动最小的嵌入式tomcat实例。你可能会遇到与#34;真正的"相关的各种小烦恼的不兼容性。运行时环境虽然(类路径问题,各种小差异等)

答案 1 :(得分:0)

您可以构建一个轻量级的嵌入式实例进行测试,其内容如下:

import org.apache.catalina.startup.Tomcat;

String TEMP_DIR = System.getProperty("java.io.tmpdir");

// Init tomcat
tomcat = new Tomcat();
tomcat.setPort(0);
tomcat.setBaseDir(TEMP_DIR);
tomcat.getHost().setAppBase(TEMP_DIR);

// Init servlet
File docBase = new File(TEMP_DIR);
Context ctx = tomcat.addContext("", docBase.getAbsolutePath());
Tomcat.addServlet(ctx, "test", new DefaultServlet());
ctx.addServletMapping("/*", "test");

// Start tomcat
tomcat.init();
tomcat.start();

//--------------------
// Do something useful
//--------------------
tomcat.getEngine().getLogger().info("Logging with embedded tomcat");

// Stop tomcat
if (tomcat.getServer() != null
        && tomcat.getServer().getState() != LifecycleState.DESTROYED) {
    if (tomcat.getServer().getState() != LifecycleState.STOPPED) {
        tomcat.stop();
    }
    tomcat.destroy();
}

此语法适用于tomcat 7+但据我所知早期版本使用的嵌入机制略有不同