我正在使用Spring版本4.1.1.RELEASE与junit版本4.11
我创建了一个类型为“Maven archetype webapp”的Maven
在使用 junit 之前,我把 spring-servlet.xml 放在 webapp/WEB-INF/ 中。此配置适用于 Tomcat Web 容器,但 Junit 无法引用此上下文文件,因为 junit 对类路径的感知不包括 webapp/WEB-INF/。
为了让jUnit能够读取Spring的上下文配置,我必须将Spring的servlet配置文件放在:src/main/Resources/config/spring-servlet.xml。Maven会将此文件复制到 /target//WEB-INF/class/config/spring-servlet.xml
为了使此配置适用于JUnit和Tomcat Web容器,我必须进行以下修改
对于 Junit:
数字一(one)
@ContextConfiguration({ "classpath:config/spring-servlet.xml" })
public class AnotherTest { ... }
对于Tomcat部署:
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
对于 junit 和 tomcat 部署来说,情况都很好。
但是从一些来源来看,他们说使用“classpath:”在某些情况下会引起上下文混淆(我不知道是哪种情况?)
他们建议我们应该使用下面的config(即option2)代替,以避免使用“classpath:”
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/classes/config/spring-servlet.xml</param-value> <!-- this config does not use classpath -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
使用选项2,junit工作正常。但是在 eclipse 中运行此 Web 项目会在 tomcat 启动时导致 FileNotFoundException,因为 tomcat 容器看不到 spring-servlet.xml。当然,我已经执行了Maven clean。
我发现,如果我复制Maven创建war文件,并手动将这个war部署到Tomcat中,那么一切都会正常工作。
我怀疑,在Maven启动Tomcat时,带有Eclipse some的Maven没有正确地生成we b-INF/classes/config/spring-servlet . XML。至少,我认为Maven和Eclipse没有简单地使用已经构建好的东西(即项目的java类和其他资源)来运行/部署Tomcat。
我是否可以使用上面选项2中的配置在Eclipse中开发以启动Tomcat并正确执行JUnit?
或者有没有其他更好的方法(比如另一个目录)来存储和配置文件spring-servlet.xml,请说明。
谢谢你。
有很多方法可以实现这一点,下面是我避免这种情况的一种方法。
我希望遵循maven给出的相同的自定义目录结构。
Project
Module
src
main
Java
resources
webapp
test
Java
resources
以下是我们所做的几个选项。
classpath*:
访问上下文XML文件
@ContextConfiguration
中的测试用例,这些测试用例将从主/资源
main/Resources
但是从一些来源来看,他们说使用“classpath:”在某些情况下会引起上下文混淆(我不知道是哪种情况?)
混淆上下文?真的吗?大多数情况下,使用classpath*将在执行中访问所有文件。这里可能会出现多个jar的名称相同的情况,尽管我从来没有遇到过这种情况。
正在测试的 Junit 的另一个上下文文件/资源
这使我们能够灵活地更改用于测试的环境。例如
即使会发生内部访问,访问生成的类也不是首选方法。
而且我相信在这里,与spring/junit的版本无关。这是关于从不同的角度访问上下文文件。
1.[localhost-startStop-1]org.apache.Catalina.core.containerbase.addchildinal containerbase.addchild:start:org.apache.Catalina.lifecycleException:无法启动组件[StandardEngine[Catalina].StandardHost[localhost]
我在eclipse IDE中有一个ant项目。Ant build在dist文件夹中创建一个war。我将war复制到Tomcat webapps文件夹并成功部署它。现在,我将Tomcat添加到eclipse中,并尝试在这里部署war,它会忽略war文件。它没有给出任何例外bu也没有做任何有用的事情。下面是完整的Tomcat日志- 它是一个动态的Web模块项目。在Eclipse中设置Tomcat时是否
我正在使用Eclipse开普勒和Maven的M2E插件。 我想用我的“Util”Maven项目创建web app Maven项目——这不是一个多模块项目。我只想要这么简单。jar在项目中,可以在使用主项目的过程中编辑带有增强和修复的“Util”项目。 我在webb应用程序中只添加了maven依赖项(没有构建路径、部署程序集等设置),Eclipse自动发现这是来自工作区的项目(简单地说:不是带有版本
我在项目中使用JUnit进行代码覆盖。对于db,我将dbunit用作模拟db。当我从EclipseUI运行JUnit时,它会被通过,但在运行maven时会失败。 通过使用maven,上述设置在JDK 1.6.25中运行良好,升级到1.8.51时开始失败。我已经更新了maven编译器插件,它不工作。我使用以下版本,jUnit-4.72.dbunit-2.4.8 hsqldb-2.0.0 maven-
错误是:至少扫描了一个JAR的顶级域,但没有包含顶级域。为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的JAR的完整列表。在扫描过程中跳过不需要的JAR可以提高启动时间和JSP编译时间。
默认情况下,maven插件与最新的Eclipse IDE版本(例如,Mars)集成在一起。但是,在创建Maven项目时,它只会抛出以下错误: 注意:它不经过任何代理设置 无法计算构建计划:Plugin org.apache.maven.plugins:maven-resources-plugin:2.6或无法解决其依赖项之一:未能在http://localhost:8081/nexus/conte