Showing posts with label ANT. Show all posts
Showing posts with label ANT. Show all posts

Wednesday, November 28, 2012

Ant Task in Tomcat 7

After working for years with Tomcat 6, I just thought to upgrade to Tomcat 7 and voila... My ANT scripts are not working anymore.... After googling for few hours found some interesting facts about new things in Tomcat 7.


Step 1:
To start with, Tomcat7 manager app is not configured by default. Make sure you make below changes in your TOMCAT_HOME/conf/tomcat-users.xml
For example:

<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="tomcat" password="s3cret" roles="manager-gui,manager-script"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>

</tomcat-users>


Step 2:


Catalina-Ant for Tomcat 6 was encapsulated within a single JAR file. 
Catalina-Ant for Tomcat 7 requires four JAR files. One from TOMCAT_HOME/bin:
tomcat-juli.jar
and three from TOMCAT_HOME/lib:
catalina-ant.jar
tomcat-coyote.jar
tomcat-util.jar
 
So here goes the modified ANT script: 
 
build.properties file 
 
# Ant properties for building the sampleapp
appserver.home=C:/root/dev/apache-tomcat-7.0.33
# for Tomcat 5 use $appserver.home}/server/lib
# for Tomcat 6 use $appserver.home}/lib
# for Tomcat 7 use $appserver.home}/lib
appserver.lib=${appserver.home}/lib
deploy.path=${appserver.home}/webapps
tomcat.manager.url=http://localhost:8080/manager
tomcat.manager.username=tomcat
tomcat.manager.password=s3cret
 
part of ANT Script file
 
<!--- Updated for Tomcat 7, for Tomcat 6 only catalina-ant.jar is needed -->
<path id="catalina-ant-classpath">
    <fileset dir="${appserver.lib}">
           <include name="catalina-ant.jar"/>
           <include name="tomcat-coyote.jar"/>
           <include name="tomcat-util.jar"/>
        </fileset>
    <fileset dir="${appserver.home}/bin">
               <include name="tomcat-juli.jar"/>
    </fileset>
</path>


<!-- Configure the custom Ant tasks for the Manager application -->
  <taskdef name="deploy"    classname="org.apache.catalina.ant.DeployTask"   classpathref="catalina-ant-classpath"/>
  <taskdef name="list"      classname="org.apache.catalina.ant.ListTask"   classpathref="catalina-ant-classpath"/>
  <taskdef name="reload"    classname="org.apache.catalina.ant.ReloadTask"   classpathref="catalina-ant-classpath"/>
  <taskdef name="findleaks" classname="org.apache.catalina.ant.FindLeaksTask"  classpathref="catalina-ant-classpath"/>
  <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask"  classpathref="catalina-ant-classpath"/>
  <taskdef name="start"     classname="org.apache.catalina.ant.StartTask"   classpathref="catalina-ant-classpath"/>
  <taskdef name="stop"      classname="org.apache.catalina.ant.StopTask"   classpathref="catalina-ant-classpath"/>
  <taskdef name="undeploy"  classname="org.apache.catalina.ant.UndeployTask"  classpathref="catalina-ant-classpath"/>
  
  <!-- Executable Targets -->
<target name="deploy" description="Deploy application in Tomcat7">
<deploy url="${tomcat.manager.url}"
username="${tomcat.manager.username}"
password="${tomcat.manager.password}"
path="/${name}"
war="${name}"/>
</target>

<target name="list" description="List Tomcat applications">
<list url="${tomcat.manager.url}"
username="${tomcat.manager.username}"
password="${tomcat.manager.password}"/>
</target>

<target name="reload" description="Reload application in Tomcat">
<reload url="${tomcat.manager.url}"
username="${tomcat.manager.username}"
password="${tomcat.manager.password}"
path="/${name}"/>
</target>

<target name="findleaks" description="Find leaks in Tomcat applications">
<findleaks url="${tomcat.manager.url}"
username="${tomcat.manager.username}"
password="${tomcat.manager.password}"/>
</target>

<target name="resources" description="List resources in Tomcat applications">
<resources url="${tomcat.manager.url}"
username="${tomcat.manager.username}"
password="${tomcat.manager.password}"/>
</target>


<target name="start" description="Start Tomcat application">
<start url="${tomcat.manager.url}"
username="${tomcat.manager.username}"
password="${tomcat.manager.password}"
path="/${name}"/>
</target>

<target name="stop" description="Stop Tomcat application">
<stop url="${tomcat.manager.url}"
username="${tomcat.manager.username}"
password="${tomcat.manager.password}"
path="/${name}"
failonerror="false"/>
</target>
<!--The stop task has the failonerror attribute set to false as on most occasions you don’t want the Ant build to stop if a Tomcat application you’re trying to stop isn’t running. -->
<target name="undeploy" description="Stop Tomcat application">
<undeploy url="${tomcat.manager.url}"
username="${tomcat.manager.username}"
password="${tomcat.manager.password}"
path="/${name}"
failonerror="false"/>
</target>

<!-- End Tomcat tasks -->  

Note :- few target task like 'install' have been deprecated in Tomcat7.

Tuesday, July 24, 2012

Ant Build file (build.xml)

Following is the general ant build file (build.xml).
<project name="MyWebApplication" basedir="." default="archive">

    <property name="WEB-INF" value="${basedir}/WebRoot/WEB-INF" />
    <property name="OUT" value="${basedir}/out" />
    <property name="WAR_FILE_NAME" value="mywebapplication.war" />
    <property name="TEMP" value="${basedir}/temp" />

    <target name="help">
        <echo>
            --------------------------------------------------
            compile - Compile
            archive - Generate WAR file
            --------------------------------------------------
        </echo>
    </target>

    <target name="init">
        <delete dir="${WEB-INF}/classes" />
        <mkdir dir="${WEB-INF}/classes" />
    </target>

    <target name="compile" depends="init">
        <javac srcdir="${basedir}/src" 
                    destdir="${WEB-INF}/classes" 
                    classpathref="libs">
        </javac>
    </target>

    <target name="archive" depends="compile">
        <delete dir="${OUT}" />
        <mkdir dir="${OUT}" />
        <delete dir="${TEMP}" />
        <mkdir dir="${TEMP}" />
        <copy todir="${TEMP}" >
            <fileset dir="${basedir}/WebRoot">
            </fileset>
        </copy>
        <move file="${TEMP}/log4j.properties" 
                        todir="${TEMP}/WEB-INF/classes" />
        <war destfile="${OUT}/${WAR_FILE_NAME}" 
                        basedir="${TEMP}" 
                        compress="true" 
                        webxml="${TEMP}/WEB-INF/web.xml" />
        <delete dir="${TEMP}" />
    </target>

    <path id="libs">
        <fileset includes="*.jar" dir="${WEB-INF}/lib" />
    </path>

</project>