在Hybris
开发环境中,我们正在寻找在每个类修改后减少Hybris
服务器(Tomcat
)重新启动,
除了可用的已知工具(JRebel
,HotswapAgent
,...)之外,我们还尝试使用tomcat
服务器的默认类/ webapp重新加载机制:reloadable="true"
在extention webroot
文件夹
但是在[Extention]/classes
文件夹下进行更改时并非如此。
所以问题是:
是否可以让hybris服务器(tomcat)知道[Extention] / classes文件夹中的更改,并重新加载相应的webapp?知道hybris
有自己的ClassLoading机制!
Environment :
Hybris 5.4
Tomcat 7.0
JDK 1.8
祝你好运
--------编辑1 -------
构建工具:
我们只使用ant
命令来构建/清理...项目,
IDEs
(eclipse,intelliJ ...)仅用于编辑源代码。
文件夹层次结构:
[HybrisFolder]
|__bin
|__platform
|__custom
|__[ExtentionFolder]
|__classes
|__web
|__webroot
|__WEB-INF
|__classes
尝试过的解决方案(不起作用)
在tomcat中添加[ExtentionFolder]/classes
文件夹作为监视的资源:
在webapp上下文中将其添加为WatchedResource:
<Context reloadable="true" path="[ExtentionName]" docBase="[ExtentionFolder]/web/webroot">
<Manager pathname="" />
<Loader platformHome="[PlatformFolder]" className="de.hybris.tomcat.HybrisWebappLoader" deployName="default" />
<WatchedResource>[ExtentionFolder]/classes</WatchedResource>
</Context>
==&GT;它无法正常工作
在webapp上下文中将其添加为ExtraResource:
<Context reloadable="true" path="[ExtentionName]" docBase="[ExtentionFolder]/web/webroot">
<Manager pathname="" />
<Loader platformHome="[PlatformFolder]" className="de.hybris.tomcat.HybrisWebappLoader" deployName="default" />
<Resources className="org.apache.naming.resources.VirtualDirContext" extraResourcePaths="/WEB-INF/classes=[ExtentionFolder]/classes"/>
</Context>
==&GT;我得到一个奇怪的错误,就像它是同一个类的双重加载(第一次加载是由Hybris的 PlatformInPlaceClassLoader 完成的,第二次加载是由tomcat完成的)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException:
Bean named 'myBean' must be of type [x.y.z.DefaultMyBean], but was actually of type [x.y.z.DefaultMyBean]