项目的结构是类似这样的:
main
|_ main-a
|_ main-b
在maven的配置文件里,main作为总的公共模块包含两个平级的web app模块,main-b是模拟静态资源服务而构建的,js,css,图片之类的静态资源都放在这里(方便以后静态资源迁移到专门的静态资源服务器),main-a是主要的模块,处理动态的请求,开发阶段使用maven的jetty插件来调试程序,因为不喜欢在eclipse里用WTP下Server工程的deploy(慢,有时候还会因为没有及时同步文件出一些错),也不想用cargo去专门管理deploy,因为需求很简单么,就是让jetty跑两个web app就可以了,去jetty的官网看了下资料(http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin ),原来用contextHandlers配置下就可以了。
这里我方便开发,直接在main-a里做了jetty的配置,让我在jetty加载完main-a的时候也去加载main-b
- <plugin>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>maven-jetty-plugin</artifactId>
- <configuration>
- <webApp>${basedir}/target/main-a</webApp>
- <scanIntervalSeconds>10</scanIntervalSeconds>
- <contextPath>/main-a</contextPath>
- <contextHandlers>
- <contextHandler implementation="org.mortbay.jetty.webapp.WebAppContext">
- <war>${project.parent.basedir}/main-b/target/main-b.war</war>
- <contextPath>/main-b</contextPath>
- </contextHandler>
- </contextHandlers>
- </configuration>
- </plugin>
然后在main-b执行完package生成war包后,再在main-a工程目录下直接mvn jetty:run就可以同时让jetty加载main-a和main-b
如果想不依赖生成的war包,也可以这样配置
- <plugin>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>maven-jetty-plugin</artifactId>
- <configuration>
- <webApp>${basedir}/target/main-a</webApp>
- <scanIntervalSeconds>10</scanIntervalSeconds>
- <contextPath>/main-a</contextPath>
- <contextHandlers>
- <contextHandler implementation="org.mortbay.jetty.webapp.WebAppContext">
- <resourceBase>${project.parent.basedir}/main-b/target/main-b</resourceBase>
- <contextPath>/main-b</contextPath>
- </contextHandler>
- </contextHandlers>
- </configuration>
- </plugin>