如果对部署方式有疑问,请先看这个帖子:
JBoss和Tomcat部署方式的区别(解释暴露式部署)
我们说一下Eclipse J2ee版本(下个WTP插件也行)自带的run on server功能,支持好多webserver,但是jboss只支持到5了,原因你懂的。接下来我们就看一下如何使用。
1. Window-preferences-Server-Runtime Environment-Add-Jboss-选择ApplicationServer的Home即可添加一个Server。
2.新创建一个Dynamic Web Project,注意Dynamic web module version选2.5(5.10应该支持不了3.0)。
3.在WebContent下面写个index.html,然后在工程右键,run as-run on server,选择你刚才创建的JBoss,finish。然后就可以访问了。
接下来是贴题的内容了:
Eclipse的这个功能实际上是把项目打成war放到了JBoss的deploy目录下面,当我们在eclipse里面修改文件的时候,如果仔细观察console的话,会发现有类似以下的内容会闪着出现:
Buildfile: C:\eclipse\plugins\org.eclipse.jst.server.generic.jboss_1.6.1.v200904151730\buildfiles\jboss323.xml
这个目录可能和WTP或者eclipse版本有关,具体请自查。我们来看一下jboss323.xml,发现实际上是个ant脚本。以下内容
<target name="deploy.j2ee.web">
<jar compress="false" destfile="${project.working.dir}/${module.name}.war">
<zipfileset dir="${module.dir}">
<include name="**/*.*"/>
<exclude name="**/*.war"/>
</zipfileset>
</jar>
<move file="${project.working.dir}/${module.name}.war" todir="${server.publish.dir}"/>
<sleep seconds="${pause.deploy}"/>
</target>
描述了web项目发布时候的动作,先把整个项目打成war包,然后把他复制到了JBoss server的publish路径,这个路径我看了下应该是%JBOSS_HOME%\server\default\deploy。
现在的问题是,
每次修改完,他都要重新去做jar操作来打包,当项目比较大的时候这个操作是很耗时的,所以我们现在使用暴露式部署的方式进行部署,因为修改的文件少的时候,ant会检查文件的修改时间,没修改的文件是不会复制的:
1. 把上面那段xml修改为
<target name="deploy.j2ee.web">
<property name="deploy.dir" location="${server.publish.dir}/${module.name}.war" />
<mkdir dir="${deploy.dir}" />
<copy todir="${deploy.dir}">
<fileset dir="${module.dir}">
<include name="**/*.*"/>
<exclude name="**/*.war"/>
<exclude name="**/web.xml"/>
</fileset>
</copy>
<copy todir="${deploy.dir}" overwrite="true">
<fileset dir="${module.dir}">
<include name="**/web.xml"/>
</fileset>
</copy>
<sleep seconds="${pause.deploy}"/>
</target>
2.找到undeploy.j2ee.web这个target,这个是如果undeploy进行的动作,修改为:
<target name="undeploy.j2ee.web">
<!--<delete file="${server.publish.dir}/${module.name}.war" failonerror="false"> </delete>-->
<delete dir="${server.publish.dir}/${module.name}.war" failonerror="false"> </delete>
<sleep seconds="${pause.undeploy}"/>
</target>
解释:
- deploy.j2ee.web这个target修改为先根据项目名称在jboss的deploy里面创建一个 项目名称.war的目录,然后把eclipse工程下的所有文件,除了war和web.xml,都拷贝到那个新创建的目录下。
- 接下来,单独拷贝web.xml。单独拷贝的原因在于,我试了一下修改一个servlet类,发现已经同步过去了,但是JBoss并没有去重新部署他,但是修改一个静态html或者jsp都会即时生效,找了好半天资料,在链接发现,如果以暴露式部署的话,必须要修改web.xml,JBoss才认为需要重新部署,所以单独复制了一下web.xml用来修改他的修改时间,这样JBoss就会重新部署了。
- undeploy.j2ee.web就是为了把deploy里面创建的那个目录删掉。
其实这样还是稍微有一点问题,毕竟还多了一个复制操作。先把公司项目跑起来看看效率行不行吧,如果不行的话,就要修改JBoss添加自定义的load路径了,去掉这个复制操作。
参考资料:
http://www.blogjava.net/brian/articles/315942.html这个没有处理web.xml