0

在我的开发团队中,我们有框架和业务开发人员。

该框架已经是一个 JEE6 webapp,业务开发人员使用该框架通过框架提供的 Web 界面构建他们的网页,并作为对业务服务的调用的中介。

每个业务应用程序都构建为一个外部 JAR 文件,该文件被添加到 tomcat 启动类路径中。此外,它们是 Eclipse 中的“Web 片段项目”(WFP),因为还可以添加自定义 JSP、HTML、CSS 等等,其中一些使用 web-fragment.xml。

到目前为止,一切都很好,在日食之外一切正常......

在 Eclipse 中,使用 WFP 和框架作为“动态 Web 项目”(DWP)一切都很好......

但是对于业务开发人员,我想在 eclipse 中创建 Tomcat Server 并将其直接指向 WAR 并使其一起部署 WFP。

我做了几次尝试将 WFP 添加到 .launch 文件中的类路径,我还尝试在 tomcat“VirtualWebappLoader”中添加 bin 目录,但是无法读取 web-fragment.xml。

任何线索如何实现它???

Ps:在eclipse之外运行tomcat并远程调试WFP不是一种选择。

4

1 回答 1

2

这是一个旧线程,似乎我是唯一一个遇到这种情况的人,但我仍然想分享答案。

  1. WFP 现在是 Maven 项目,构建输出到 /target/classes。

  2. 有一个普通的 wtp-tools web 容器 (tomcat) 指向文件系统中的 WAR 文件。

  3. 解决方案:我一直使用 VirtualWebappLoader 并为 JarScanner 添加了一个新标志,如下所示:

    <!-- 应用jar列表 -->
    <Loader
    className="org.apache.catalina.loader.VirtualWebappLoader"
    virtualClasspath="apptest/target/classes;
    customtest/target/classes"/>

    <!--
    将目录视为扩展 jar。
    详情: http: //tomcat.apache.org/tomcat-7.0-doc/config/context.html#Virtual_webapp
    -->
    <JarScanner scanAllDirectories="true" />

更新

使用 Tomcat 8 的人会注意到VirtualWebappLoader不再存在。所以看看资源。它已被 Pre、Jar 和 Post 资源所取代。

但是,我没有找到合适的方法来按照 Servlet 3.0 规范的要求将带有 META-INF/resources 和 META-INF/web-fragment.xml 的爆炸 Jar 加载到 WEB-INF/lib。

当使用 Tomcat 文档中建议的示例并将爆炸的 Jar 目录映射到 WEB-INF/classes 时,一切似乎都“正常”,但 META-INF/resources 和 web-fragment.xml 声明的元素不可用:

<Resources>
  <PreResources
    className="org.apache.catalina.webresources.DirResourceSet"
    base="/home/reginaldosantos/apptest/target/classes"
    webAppMount="/WEB-INF/classes"
  /> 
</Resources>

然后,将 webAppMount 更改为“/WEB-INF/lib”会在启动时给我一些 ClassNotFoundException。

最后,经过几次尝试,我想出了一个解决方法:

<Resources>
  <PreResources
    className="org.apache.catalina.webresources.DirResourceSet"
    base="/home/reginaldosantos/apptest/target/classes"
    webAppMount="/WEB-INF/classes"
  />
  <JarResources
    className="org.apache.catalina.webresources.DirResourceSet" 
    base="/home/reginaldosantos/apptest/target/classes/META-INF/resources"
    webAppMount="/"
  /> 
</Resources>

不过不太确定。

希望它对某人有所帮助;-)

于 2015-12-08T19:27:54.210 回答