Java 嵌入式Tomcat不´;不要从eclipse开始

Java 嵌入式Tomcat不´;不要从eclipse开始,java,eclipse,maven,tomcat,embedded-tomcat-7,Java,Eclipse,Maven,Tomcat,Embedded Tomcat 7,我在maven项目中使用嵌入式tomcat进行一些集成测试(客户机-服务器场景) 如果我使用maven构建项目,测试将按预期运行,服务器将正常启动。如果我尝试通过Eclipse调试测试,tomcat服务器不会启动异常: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Tomcat]] 我试图调试tomcat.start()方法,以找出异常发生的位置。它位于(StandardSe

我在maven项目中使用嵌入式tomcat进行一些集成测试(客户机-服务器场景)

如果我使用maven构建项目,测试将按预期运行,服务器将正常启动。如果我尝试通过Eclipse调试测试,tomcat服务器不会启动异常:

org.apache.catalina.LifecycleException: Failed to start component [StandardService[Tomcat]]
我试图调试
tomcat.start()
方法,以找出异常发生的位置。它位于(
StandardServer.class
)中:

Im使用Eclipse版本:Neon发行版(4.6.0)。一些同事也使用eclipse,它在一种情况下工作。我们试图找出其中的差别,但没有找到多少。到目前为止,我们尝试的是编辑项目的某些依赖项的构建路径。当然,我们只改变了我们自己的项目依赖关系。其他库(如嵌入式tomcat)未被触及

在Netbeans中,它按预期工作。我想这是一个eclipse设置或类似的东西

编辑: 我想我没有提供足够的信息。
pom.xml
的依赖项如下所示:

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-core</artifactId>
  <version>7.0.55</version>
</dependency>

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-logging-log4j</artifactId>
</dependency

<dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>tomcat-jasper</artifactId>
  <version>7.0.55</version>
  <exclusions>
    <exclusion>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>

org.apache.tomcat.embed

post解释了这两个依赖项之间的区别。但是我仍然不明白,为什么它不起作用。

也许eclipse日志中有一个提示:我清理了日志并再次通过RunAs->Junit执行了测试。只有3条消息说“警告:未设置环境变量Home”。但它也说它使用my/Users/目录。留下的两条消息是一些css和logger引用未绑定的信息。我更新了帖子以提供更多信息。Maven中的测试由Surefire插件处理,这在Eclispe Junit runner中不存在。换句话说,通过Maven和Eclipse运行测试是两件完全不同的事情。该问题可能是由测试配置错误引起的(例如,如何为测试目的意外启动Tomcat实例)。然而,如果不看看你是如何做到的,就很难给出任何建议。您是否提供了完整的pom.xml及其配置的一些示例性测试?那么,首先排除是毫无意义的:)在这种情况下,Tinki所说的是非常相关的;Netbeans和Eclipse之间的区别在于,Netbeans实际上在包括运行测试在内的所有事情上都使用Maven,而Eclipse基本上只采用Maven的项目设置。所问的问题是一个死胡同,它需要让测试在Eclipse中成功。也许Eclipse日志中有一个提示:我清理了日志并再次通过RunAs->Junit执行了测试。只有3条消息说“警告:未设置环境变量Home”。但它也说它使用my/Users/目录。留下的两条消息是一些css和logger引用未绑定的信息。我更新了帖子以提供更多信息。Maven中的测试由Surefire插件处理,这在Eclispe Junit runner中不存在。换句话说,通过Maven和Eclipse运行测试是两件完全不同的事情。该问题可能是由测试配置错误引起的(例如,如何为测试目的意外启动Tomcat实例)。然而,如果不看看你是如何做到的,就很难给出任何建议。您是否提供了完整的pom.xml及其配置的一些示例性测试?那么,首先排除是毫无意义的:)在这种情况下,Tinki所说的是非常相关的;Netbeans和Eclipse之间的区别在于,Netbeans实际上在包括运行测试在内的所有事情上都使用Maven,而Eclipse基本上只采用Maven的项目设置。所问的问题是一条死胡同,它需要让测试在Eclipse中成功。
synchronized (services) {
        for (int i = 0; i < services.length; i++) {
            services[i].start();
        }
    }
try {
        startInternal();
    } catch (Throwable t) {
        ExceptionUtils.handleThrowable(t);
        setStateInternal(LifecycleState.FAILED, null, false);
        throw new LifecycleException(
                sm.getString("lifecycleBase.startFail",toString()), t);
    }
<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-core</artifactId>
  <version>7.0.55</version>
</dependency>

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-logging-log4j</artifactId>
</dependency

<dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>tomcat-jasper</artifactId>
  <version>7.0.55</version>
  <exclusions>
    <exclusion>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>