我正在尝试使用JRebel将Eclipse中的多模块Maven项目部署到本地Tomcat。该项目具有以下结构:
root [packaging: pom]
|
|--- domain [packaging: jar
|
|--- manager [packaging: jar]
|
|--- web [packaging: war]
我在3个子模块中的每一个中都创建了src/main/resources/rebel.xml
。我可以在Eclipse中将Web项目部署到Tomcat(不使用JRebel),没有任何问题。
但是,如果我change the deployment to use JRebel,我会收到以下错误:
SEVERE: Exception sending context initialized event to listener instance
of class com.web.listeners.WebAppListener
java.lang.IllegalArgumentException: Unknown entity: com.model.Role
....
....
Caused by: org.hibernate.MappingException: Unknown entity: com.model.Role
Role
是来自域项目的持久性(JPA / Hibernate)类,它似乎是引发错误的WebAppListener
中的引用:
public class WebAppListener implements ServletContextListener, HttpSessionListener,
HttpSessionAttributeListener {
private RoleManager roleManager;
@Override
public void contextInitialized(ServletContextEvent sce) {
BeanFactory beanFactory = WebApplicationContextUtils.
getRequiredWebApplicationContext(sce.getServletContext());
this.roleManager = beanFactory.getBean(RoleManager.class);
saveIfAbsent("USER", "Normal User");
}
private void saveIfAbsent(String roleName, String roleDescription) {
if (roleManager.getRole(roleName) == null) {
Role role = new Role();
role.setName(roleName);
role.setDescription(roleDescription);
roleManager.saveRole(role);
}
}
}
执行此代码时,似乎没有加载domain
类,知道如何解决这个问题吗?
答案 0 :(得分:2)
您的反叛文件的内容是什么?它们应该看起来像
<classpath>
<dir name="/absolute/path/to/projectname/target/classes"></dir>
</classpath>
如果您正在使用maven,您还可以查看相关主题:Getting JRebel to work with 'mvn tomcat:run'
注意:如果rebel.xml还包含对src / main / resources的引用,有时也是如此 混淆一些框架,如果发生错误,您应该尝试从所有rebel.xml文件中删除它。例如,以下conf很常见,但可能并不总是有效:
<classpath>
<dir name="/absolute/path/to/projectname/target/classes"></dir>
<dir name="/absolute/path/to/projectname/src/main/resources"></dir>
</classpath>
答案 1 :(得分:0)
我通过删除
解决了问题<dir name="/absolute/path/to/projectname/src/main/resources"></dir>
来自域项目中的rebel.xml文件,如here
所述