The first step is to setup some properties describing your environment, i.e., the location of the weblogic installation, the weblogic domain installation and the weblogic classpath. Assuming we are using weblogic 10 with a domain called aDomain, those properties will look something like this:
<?xml version="1.0"?>
<project ....>
....
<property name="my.home" location="C:/bea" />
<property name="my.domain" location="${my.home}/user_projects/domains/aDomain" />
<path id="weblogic.classpath">
<fileset dir="${my.home}/wlserver_10.0/server/lib">
<include name="*.jar" />
</fileset>
</path>
....
</project>
Next, we define the wldeploy task:
<project ....>
....
<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy">
<classpath refid="weblogic.classpath" />
</taskdef>
....
</project>
Now we can create a macro for running any weblogic ant task that requires the environment be set through the setDomainEnv script:
<project ....>
....
<macrodef name="run-domain-task">
<attribute name="task.name" />
<sequential>
<property name="runner" location="${my.domain}/bin/run_domain_task.cmd" />
<copy file="${my.domain}/bin/setDomainEnv.cmd" tofile="${runner}" overwrite="true" />
<concat append="true" destfile="${runner}">
ant -f "${ant.file}" @{task.name}</concat>
<exec executable="${runner}" />
</sequential>
</macrodef>
....
</project>
This macro takes as input a target, such as deploy-to-domain below. It copies the setDomainEnv.cmd to a runner script and appends a command to call the input target from ant. In this way, the domain environment will be set properly before the weblogic-specific task runs.
We can now create a target to be called from the runner deployed in the macro:
<project ....>
....
<target name="deploy-to-domain">
<wldeploy action="deploy" .... />
</target>
....
</project>
Finally, we add a public target that we call directly or that our Continuous Integration system can run when it has finished building our enterprise application.
<project ....>
....
<target name="deploy">
<run-domain-task task.name="deploy-to-domain" />
</target>
....
</project>
Ideally, I would prefer to set the environment directly through Ant instead of through the script. As a quick solution, and because setDomainEnv is generated based on a particular installation of a domain, the solution works well in the general case. If anyone is aware of a generic, fully Ant-based solution to this problem, I would certainly like to hear about it.
I would also recommend moving away from Ant and towards Maven2 when at all possible. These instructions should be a good starting point for migrating toward a Maven2 build and deployment solution for Weblogic.
