我的eclipse版本信息如下:
Eclipse Java EE IDE for Web Developers.
Version: Luna Service Release 1 (4.4.1)
Build id: 20140925-1800
首先我们创建一个web工程aWebProj和一个普通java工程aCommon。如下图:
其中aWebProj是我们要发布的web工程,aCommon是存放一些工具类的工程。为什么要单独构建一个工程呢?这是考虑到,有可能还有一个bWebProj工程,也会用到相同的工具类,所以把能够复用的工具类、entity、pojo之类的独立建一个工程。
然后web工程引用工具类工程,如下所示:
然后在web工程里就可以引用工具类的方法了。
这时候我们将aWebProj发布到tomcat中,如下图:
但是此时我们到tomcat的webapps目录下查看aWebProj工程时会发现,aCommon包并没有打进来。这会导致我们启动时报类不存在的异常。
这里需要特别说明一下。这个问题算是某些eclipse版本的bug,并不是所有的eclipse上都有的问题,如果你所用的eclipse恰好没有问题,那么可以不用往下看了。
如果碰到此类问题,可参考如下的解决方案。
首先先确保被引用的aCommon工程的属性是一个Module。如下所示:
然后打开aWebProj工程所在的目录,打开.settings目录,用文本方式打开org.eclipse.wst.common.component这个配置文件:
此时你会看到的内容为:
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="aWebProj">
<wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<property name="context-root" value="aWebProj"/>
<property name="java-output-path" value="/aWebProj/build/classes"/>
</wb-module>
</project-modules>
增加关键的三行内容后:
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="aWebProj">
<wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<dependent-module archiveName="aCommon.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/aCommon/aCommon">
<dependency-type>uses</dependency-type>
</dependent-module>
<property name="context-root" value="aWebProj"/>
<property name="java-output-path" value="/aWebProj/build/classes"/>
</wb-module>
</project-modules>
保存关闭。这时候刷新aWebProj工程,重新加载到tomcat中,会是这个样子:
和上面加载时的对比一下,发现aWebProj里多了一个aCommon图标,这说明编译到tomcat里的工程,是将aCommon打成jar包放进去了。此时可以再到tomcat的webapps目录下查看aWebProj工程,aCommon.jar存在于aWebProj\WEB-INF\lib目录下。
再次强调一下我们在org.eclipse.wst.common.component这个配置文件里增加的三行内容:
<dependent-module archiveName="aCommon.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/aCommon/aCommon">
<dependency-type>uses</dependency-type>
</dependent-module>
其中aCommon.ja和aCommon/aCommon,根据自己需要引入工程的名字更改一下即可。