4

I am working on an open source project that uses ANT which can perform all kind of useful targets. One of them generate an executable jar and a webapp directory in the same directory. I tried to find ways to package that webapp directory with the jar, there is tons of information out there but non of them provide a example that fits my problem.

Open Refine is a great data cleansing tool, you can start it using a script that takes different start up arguments. It is built using jetty Web server and Web app for UI. Architecture here. It uses ANT for deployment management, where there is a task that create the Linux kit:

<target name="linux" depends="jar, prepare_webapp">
    <mkdir dir="${linux.dir}"/>

    <copy todir="${linux.dir}/server/lib">
        <fileset dir="${server.lib.dir}">
            <include name="**/*.jar"/>
        </fileset>
    </copy>

    <copy file="${build.dir}/${fullname}-server.jar" tofile="${linux.dir}/server/lib/${fullname}-server.jar"/>

    <copy todir="${linux.dir}/webapp">
        <fileset dir="${built.webapp.dir}">
            <include name="**"/>
        </fileset>
    </copy>

    <mkdir dir="${linux.dir}/licenses"/>
    <fixcrlf srcDir="${basedir}/licenses" destDir="${linux.dir}/licenses" eol="lf"/>

    <fixcrlf srcDir="${basedir}" destDir="${linux.dir}" eol="lf">
        <include name="refine"/>
        <include name="refine.ini"/>
        <include name="README.txt"/>
        <include name="LICENSE.txt"/>
    </fixcrlf>

    <mkdir dir="${dist.dir}"/>
    <tar longfile="gnu" compression="gzip" destfile="${dist.dir}/openrefine-linux-${version}.tar.gz">
       <tarfileset dir="${linux.dir}/.." filemode="755">
           <include name="${release.name}/refine"/>
       </tarfileset>        
       <tarfileset dir="${linux.dir}/..">
           <include name="${release.name}/**"/>
           <exclude name="${release.name}/refine"/>
       </tarfileset>        
    </tar>
</target>

This task creates a web directory, which is used in the previous task:

<target name="prepare_webapp" depends="jar_webapp, build">
    <mkdir dir="${built.webapp.dir}" />

    <copy todir="${built.webapp.dir}">
        <fileset dir="${webapp.dir}">
            <include name="**/*"/>
            <exclude name="WEB-INF/classes/**"/>
            <exclude name="WEB-INF/lib-src/**"/>
            <exclude name="WEB-INF/lib/icu4j*.jar"/>
        </fileset>
    </copy>

and the Jar are prepared using another ANT target as following:

<target name="jar_webapp" depends="prepare_jar, build_webapp">
    <jar destfile="${build.dir}/${fullname}.jar" basedir="${webapp.classes.dir}"/>
</target>

The result of running ant linux is an executable jar and a webapp directory, Is it possible to package the entire thing as one fat jar?

InsaneBot
  • 2,422
  • 2
  • 19
  • 31
  • 1
    I don't have an answer but you may want to ask this on the OpenRefine dev forum https://groups.google.com/forum/#!forum/openrefine-dev – Owen Stephens Apr 18 '16 at 08:41

0 Answers0