Hi!
I just slaved days over getting Eclipse/WOLips to generate a WAR to
JBoss' liking.
Somehow the out-of-the-box WAR support in WOLips seems very broken. I
ended up rewriting much of the involved Ant targets. Furthermore I
had to patch the generated web.xml to get a classpath that NSBundle
can work with.
First, I had to add additional arguments to the WOApplication task:
<woapplication name="${project.name}" stdFrameworks="false"
destDir="${dest.dir}"
customInfoPListContent="${customInfoPListContent}"
principalClass="${principalClass}"
webXML="${webXML}"
webXML_CustomContent="${webXML_CustomContent}"
webXML_WOAINSTALLROOT="/tmp/${project.name}.dst/Library/
WebObjects/Applications/"
webXML_WOtaglib="WOtaglib_1_0.tld"
webXML_WOAppMode="Development">
...
<frameworks root="${wo.wosystemroot}" embed="true">
<patternset>
<includesfile name="woproject/ant.frameworks.wo.wosystemroot"/>
</patternset>
</frameworks>
<frameworks root="${wo.wolocalroot}" embed="true">
<patternset>
<includesfile name="woproject/ant.frameworks.wo.wolocalroot"/>
</patternset>
</frameworks>
<frameworks root="${user.home}" embed="true">
<patternset>
<includesfile name="woproject/ant.frameworks.user.home"/>
</patternset>
</frameworks>
...
</woapplication>
I modified the ssdd target as follows:
<target name="ssdd">
<mkdir dir="${dest.dir}/${project.name}/WEB-INF/tlds"/>
<copy todir="${dest.dir}/${project.name}/WEB-INF/">
<fileset dir="${dest.dir}/${project.name}.woa/Contents/">
<include name="web.xml"/>
</fileset>
</copy>
<copy todir="${dest.dir}/${project.name}/WEB-INF/">
<fileset dir=".">
<include name="LICENSE"/>
</fileset>
</copy>
<copy todir="${dest.dir}/${project.name}/WEB-INF/">
<fileset dir="${dest.dir}">
<include name="${project.name}.woa/**"/>
</fileset>
</copy>
<copy todir="${dest.dir}/${project.name}/WEB-INF">
<fileset dir="${dest.dir}/${project.name}.woa/Contents">
<include name="Frameworks/**"/>
<include name="Resources/**"/>
</fileset>
</copy>
<copy todir="${dest.dir}/${project.name}/WEB-INF/lib">
<fileset dir="${dest.dir}/${project.name}/WEB-INF">
<include name="**/Resources/**/*.jar"/>
</fileset>
<flattenmapper />
</copy>
<copy todir="${dest.dir}/${project.name}/WEB-INF/lib">
<fileset dir="/Library/WebObjects/Extensions">
<include name="*.jar"/>
<exclude name="servlet.jar"/>
</fileset>
<flattenmapper />
</copy>
<copy todir="${dest.dir}/${project.name}/WEB-INF/tlds">
<fileset dir="${wo.wosystemroot}/Library/Frameworks/
JavaWOJSPServlet.framework/Resources/">
<include name="WOtaglib_1_0.tld"/>
</fileset>
</copy>
<fixcrlf srcdir="${dest.dir}/${project.name}/WEB-INF/" eol="unix"
includes="web.xml" />
<patch originalfile="${dest.dir}/${project.name}/WEB-INF/web.xml"
patchfile="web.diff" ignorewhitespace="true"/>
</target>
The last two steps patch the classpath. First we neet to strip Mac
line endings for the patch task to work. The patch file looks like this:
75c75,77
< WEBINFROOT/Resources/Java/
--- > > WEBINFROOT/HelloWorld.woa/Contents/Resources/Java/helloworld.jar > 84d85 < WEBINFROOT/Resources/Java/helloworld.jarBTW, having to work with a patch file is UGLY. I guess WOLips should be updated to generate a valid classpath.
This changes the way we refer to the main JAR in a way that allows NSBundle to recognize it as a bundle.
The WAR target could be greatly simplified by basing the WAR off the SSDD:
<target name="war" depends="ssdd"> <war destfile="${dest.dir}/${project.name}.war" webxml="${dest.dir}/ ${project.name}/WEB-INF/web.xml" basedir="${dest.dir}/${project.name}"> <lib dir="${wo.wosystemroot}/Library/Frameworks/ JavaWOJSPServlet.framework/WebServerResources/Java/"> <include name="JavaWOJSPServlet_client.jar"/> </lib> </war> <copy todir="/tmp/${project.name}.dst/Library/WebObjects/ Applications/"> <fileset dir="${dest.dir}"> <include name="${project.name}.woa/**"/> </fileset> </copy> </target>
All this buys me a self-contained WAR file with all frameworks embedded. This WAR works fine on JBoss 4.
Pierre.
This archive was generated by hypermail 2.0.0 : Tue Mar 21 2006 - 04:09:19 EST