<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MyArch &#187; Ant</title>
	<atom:link href="http://myarch.com/category/ant/feed" rel="self" type="application/rss+xml" />
	<link>http://myarch.com</link>
	<description>Builds and bytes</description>
	<lastBuildDate>Sat, 17 Mar 2012 14:13:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>DataPower Buddy 2.2.2 Release</title>
		<link>http://myarch.com/datapower-buddy-2-2-2-release</link>
		<comments>http://myarch.com/datapower-buddy-2-2-2-release#comments</comments>
		<pubDate>Mon, 30 May 2011 23:23:54 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[DataPower]]></category>
		<category><![CDATA[dpbuddy]]></category>

		<guid isPermaLink="false">http://myarch.com/?p=727</guid>
		<description><![CDATA[DataPower Buddy 2.2.2 is available from this link. This release contains several bug fixes, mostly around "import" Ant task. MyArch, Inc. offers paid support for dpbuddy, including implementing custom enhancements. If you're interested, please contact us as info at myarch.com.]]></description>
			<content:encoded><![CDATA[<p>DataPower Buddy 2.2.2 is available from <a href="/download/id/3/dpbuddy-2.2-dist.zip">this link</a>. This release contains several bug fixes, mostly around "import" Ant task.</p>

<p>MyArch, Inc. offers <a href="/why-pay-for-dpbuddy-support">paid support for dpbuddy</a>, including implementing custom enhancements. If you're interested, please contact us as <a href="mailto:info@myarch.com">info at myarch.com</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://myarch.com/datapower-buddy-2-2-2-release/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PAnt 2.0.1 is Released</title>
		<link>http://myarch.com/pant-201-release</link>
		<comments>http://myarch.com/pant-201-release#comments</comments>
		<pubDate>Sun, 28 Mar 2010 02:05:06 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[PAnt]]></category>

		<guid isPermaLink="false">http://myarch.com/?p=613</guid>
		<description><![CDATA[PAnt 2.0.1 contains an important bug fix that was preventing using certain Ant tasks from python. Specifically, the bug affected all tasks that utilize addConfigured method to handle nested elements. This included the "manifest" task and several others. You can download PAnt 2.0.1 from the PAnt project page]]></description>
			<content:encoded><![CDATA[<p>PAnt 2.0.1 contains an important bug fix that was preventing using certain Ant tasks from python. Specifically, the bug affected all tasks that utilize <a href="http://ant.apache.org/manual/develop.html">addConfigured</a> method to handle nested elements. This included the "manifest" task and several others.</p>

<p>You can download PAnt 2.0.1 from the <a href="/pant">PAnt project page</a></p>]]></content:encoded>
			<wfw:commentRss>http://myarch.com/pant-201-release/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PAnt Documentation Has Been Updated</title>
		<link>http://myarch.com/pant-documentation-has-been-updated</link>
		<comments>http://myarch.com/pant-documentation-has-been-updated#comments</comments>
		<pubDate>Mon, 30 Nov 2009 04:20:46 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[Building software]]></category>
		<category><![CDATA[PAnt]]></category>

		<guid isPermaLink="false">http://myarch.com/?p=502</guid>
		<description><![CDATA[We've just updated PAnt documentation to reflect changes implemented in PAnt 2.0. There are two significat changes: Support for Ant targets. PAnt is now bundled with Ant Jython tasks that previously were available separately. You can follow this guide to get started with PAnt.]]></description>
			<content:encoded><![CDATA[<p>We've just updated <a href="/pant">PAnt documentation</a> to reflect changes implemented in PAnt 2.0. There are two significat changes: </p>


<ul>
<li>Support for <a href="/pant2-targets">Ant targets</a>.</li>
<li>PAnt is now bundled with <a href="/ant-jython-task">Ant Jython tasks<a/> that previously were available separately.</li>
</ul>



<p>You can follow <a href="/pant-get-started">this guide</a> to get started with PAnt.</p>]]></content:encoded>
			<wfw:commentRss>http://myarch.com/pant-documentation-has-been-updated/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating Ant Targets in Python with PAnt 2.0</title>
		<link>http://myarch.com/pant2-targets</link>
		<comments>http://myarch.com/pant2-targets#comments</comments>
		<pubDate>Tue, 10 Nov 2009 04:19:29 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[PAnt]]></category>

		<guid isPermaLink="false">http://myarch.com/?p=417</guid>
		<description><![CDATA[We've just released a new version of PAnt, a tool for developing build scripts in python. The key new feature of PAnt 2.0 is the ability to create Ant targets directly from python. This allows for completely getting rid of Ant XML files and for developing build scripts entirely in Python. Here is an example: [...]]]></description>
			<content:encoded><![CDATA[<p>We've just released a new version of <a href="/pant">PAnt</a>, a tool for developing build scripts in python. The key new feature of PAnt 2.0 is the ability to create Ant targets directly from python. This allows for completely getting rid of Ant XML files and for developing build scripts entirely in Python.</p>
<p>Here is an example:<br />
@target(unless="prop.name", depends=ptarget1)<br />
def p_target2():<br />
    """Python project ptarget2"""<br />
    ant.echo("echo ptarget2")
</pre>
<p></code></p>
<p>You can find more details about creating targets from PAnt <a href="/pant-targets">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://myarch.com/pant2-targets/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PAnt 1.5 is Released</title>
		<link>http://myarch.com/pant-15</link>
		<comments>http://myarch.com/pant-15#comments</comments>
		<pubDate>Tue, 14 Jul 2009 02:40:12 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[Building software]]></category>
		<category><![CDATA[PAnt]]></category>

		<guid isPermaLink="false">http://myarch.com/?p=308</guid>
		<description><![CDATA[This is a major update to our popular python Ant wrapper. Notable changes in this release: Support for positional (as opposed to named) arguments, e.g., &#8220;pant.echo(&#8216;message&#8217;)&#8221;. Support for lists to express repeating elements. Support for &#8220;ant_&#8221; prefix to avoid conflicts with python keywords. More information is available from PAnt project page Please subscribe to our [...]]]></description>
			<content:encoded><![CDATA[	<p>This is a major update to our popular <a href="/pant">python Ant wrapper</a>.</p>

	<p>Notable changes in this release:</p>

	<ul>
		<li>Support for positional (as opposed to named) arguments, e.g., &#8220;pant.echo(&#8216;message&#8217;)&#8221;.</li>
		<li>Support for lists to express repeating elements.</li>
		<li>Support for &#8220;ant_&#8221; prefix to avoid conflicts with python keywords.</li>
	</ul>

	<p>More information is available from <a href="/pant">PAnt project page</a></p>

	<p>Please subscribe to our <a href="/feed">feed</a> or <a href="http://twitter.com/aananiev">follow us on twitter</a> to continue receiving updates about PAnt &#8211; new version is coming shortly.</p>
 ]]></content:encoded>
			<wfw:commentRss>http://myarch.com/pant-15/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ant Task without Setters</title>
		<link>http://myarch.com/ant-task-without-setters</link>
		<comments>http://myarch.com/ant-task-without-setters#comments</comments>
		<pubDate>Wed, 25 Mar 2009 02:35:23 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[Building software]]></category>

		<guid isPermaLink="false">http://myarch.com/?p=230</guid>
		<description><![CDATA[Ant uses reflection to pass data from XML to the Java class that implement an Ant task. For every attribute in XML, you have to define a setter in the Java task&#8217;s class. This works fine most of the time, however, in some cases there could be a need for a dynamic list of attributes. [...]]]></description>
			<content:encoded><![CDATA[	<p>Ant uses reflection to pass data from <span class="caps">XML</span> to the Java class that implement an Ant task. For every attribute in <span class="caps">XML</span>, you have to define a setter in the Java task&#8217;s class.</p>

	<p>This works fine most of the time, however, in some cases there could be a need for a dynamic list of attributes. For example a task can pass attribute values to some external tool that has its own set of parameters that you don&#8217;t want to hardcode in Ant. Or you may simply like the flexibility of using dynamic attributes as opposed to predefined setters.</p>

In order to implement dynamic attributes, first you need to override &#8220;maybeConfigure&#8221; method in your Ant task and have it do nothing:
<pre>
<code>
public void maybeConfigure() throws BuildException {
}
</code>
</pre>


Then in your &#8220;execute&#8221; method you can access the map of attributes (that represents all attributes set in <span class="caps">XML</span>) as follows:
<pre>
<code>
RuntimeConfigurable configurator= getRuntimeConfigurableWrapper();
Map attributes=configurator.getAttributeMap();
String attr1=(String)attributes.get("attr1");
</code>
</pre>


 ]]></content:encoded>
			<wfw:commentRss>http://myarch.com/ant-task-without-setters/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Jython 2.2.1 with WSAdmin Tool</title>
		<link>http://myarch.com/using-jython-221-with-wsadmin-tool</link>
		<comments>http://myarch.com/using-jython-221-with-wsadmin-tool#comments</comments>
		<pubDate>Fri, 06 Feb 2009 03:40:34 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[WebSphere]]></category>
		<category><![CDATA[WebSphere Application Server Administration]]></category>

		<guid isPermaLink="false">http://myarch.com/?p=166</guid>
		<description><![CDATA[In one of the previous posts I complained that wsadmin tool (which is the main WebSphere Application Server administration tool) still relies on Jython 2.1, which is quite old. The issue became critical when I realized that jython automatically re-compiles classes compiled with a different jython version. In my case, I was using Jython 2.2 [...]]]></description>
			<content:encoded><![CDATA[	<p>In one of the previous posts I <a href="/was-70-is-still-on-jython-21" title="">complained</a> that wsadmin tool (which is the main WebSphere Application Server administration tool) still relies on Jython 2.1, which is quite old.</p>

	<p>The issue became critical when I realized that jython automatically re-compiles classes compiled with a different jython version. In my case, I was using Jython 2.2 for my Ant scripts and Jython 2.1 for wsadmin scripts. Some of the code was shared. This led to the situation of concurrent builds stepping on each other by dynamically re-compiling classes with different jython versions. The error looked something like that:</p>

<pre>
<code>
File "&lt;string&gt;", line 5, in ?
java.lang.ArrayIndexOutOfBoundsException: -4
at org.python.core.imp.createFromPyClass(Unknown Source)
</code>
</pre>

	<p>Bugs like that are always fun to troubleshoot.</p>

	<p>Going back to 2.1 was not an option for me since I use closures and &#8220;new classes&#8221; in quite a few places. So I tried putting jython 2.2.1 on wsadmin classpath and it worked without a hitch with <a href="/wsadmin-thin-client" title="">thin wsadmin client</a>. All my of wsadmin scripts work without a problem.</p>

	<p>Here is a <a href="/files/wsadmin/wsadmin_thin.bat" title="">sample wsadmin.bat file</a> that I use. This file utilizes thin client jars. Note how in line 85 my jython.jar (which is jython 2.2.1) is added to the classpath so it would override jython packages supplied with <span class="caps">WAS</span>.</p>

	<p>One possible downside of this approach is running into issues with <span class="caps">IBM</span> support in case if you need to open a <span class="caps">PMR</span> related to wsadmin scripting.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://myarch.com/using-jython-221-with-wsadmin-tool/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Updated Jython Ant Task</title>
		<link>http://myarch.com/updated-jython-ant-task</link>
		<comments>http://myarch.com/updated-jython-ant-task#comments</comments>
		<pubDate>Sun, 12 Oct 2008 04:49:23 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[Building software]]></category>

		<guid isPermaLink="false">http://myarch.com/?p=92</guid>
		<description><![CDATA[I've updated Ant Jython task with a number of new features: Jython path is now handled by a separate JythonPath task. Jython interpreter is now scoped to Ant project. This means that you can have multiple Jython calls withing the same project that share common imports and variables. Jython task now supports nested text, similar [...]]]></description>
			<content:encoded><![CDATA[<p>I've updated <a href="/ant-jython-task">Ant Jython task</a> with a number of new features:</p>


<ul>
<li>Jython path is now handled by a separate JythonPath task.</li>
</ul>




<ul>
<li>Jython interpreter is now scoped to Ant project. This means that you can have multiple Jython calls withing the same project that share common imports and variables.</li>
</ul>




<ul>
<li>Jython task now supports nested text, similar to the "script" task. </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://myarch.com/updated-jython-ant-task/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ant Jython Tasks (PAnt Tasks)</title>
		<link>http://myarch.com/ant-jython-task</link>
		<comments>http://myarch.com/ant-jython-task#comments</comments>
		<pubDate>Thu, 21 Aug 2008 02:57:51 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[Building software]]></category>
		<category><![CDATA[PAnt]]></category>

		<guid isPermaLink="false">http://myarch.com/ant-jython-task</guid>
		<description><![CDATA[PAnt build tool comes with several Ant tasks to facilitate the use of Jython/Python from Ant. PAnt tasks have a number of advantages over built-in &#60;script language="jython"&#62; way of invoking Jython from Ant: More graceful exception handling. Jython code invoked using "script" generates long error stack that contains full stack trace of the "script" task [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/pant" />PAnt</a> build tool comes with several Ant tasks to facilitate the use of Jython/Python from Ant. </p>

<p>PAnt tasks have a number of advantages over built-in &lt;script language="jython"&gt; way of invoking Jython from Ant:</p>


<ul>
<li>More graceful exception handling. Jython code invoked using "script" generates long error stack that contains full stack trace of the "script" task itself. Sifting through the traces and trying to distinguish Java trace from Python trace is quite painful. PAnt "jython" task produces brief readable python-only error stack. </li>
<li>You can use Ant properties as parameters ("jython" task makes them available in the local namespace of the calling script).</li>
<li>Convenience "import" attribute. </li>
<li>"jythonInit" task allows for setting python.path using Ant path structure.</li>
<li>Jython interpreter is initialized once per Ant project. All scripts invoked from the same Ant project reuse the same built-in namespace. So you can define variables and imports in one call and use them in a subsequent call. </li>
<li>Task name ( the name that prefixes all console output from Ant for a given task) is generated automatically based on the supplied Python code.</li>
<li>"verbose.jython" property triggers verbose output for jython-related tasks only. This is much easier than trying to scan through hundreds of lines of general "ant -v" verbose log.</li>
</ul>



<p>Example:</p>

<p>Ant code:</p>


<pre>
<code>
&lt;jythonInit pythonPathRef=&quot;python.path&quot; /&gt;
&lt;property name=&quot;testProp&quot; value=&quot;testVal&quot; /&gt;

&lt;jython&gt;
print &quot;Property from ant:&quot;, testProp
# define a var that we can use in other scripts
s=&quot;test&quot;
&lt;/jython&gt;

&lt;jython&gt;
print &quot;Var created earlier: &quot;,s
&lt;/jython&gt;

&lt;jython  import=&quot;from testmodule import *&quot; exec=&quot;test(testProp)&quot;  /&gt;
</code>
</pre>



<p>"testmodule" python code:</p>


<pre>
<code>
from pant.pant import project 
def test (prop):
    print &quot;Passed parameter: &quot;,prop
    print &quot;Test property: &quot;, project.properties[&quot;testProp&quot;]
</code>
</pre>



<p>Please refer to <a href="/files/pant/build.xml">this build.xml file</a> for more examples.</p>

<p>The tasks can be used independently of PAnt python code.</p>

<h3>PAnt Ant Tasks Reference</h3>

<h4>Getting Started</h4>
Download PAnt, extract pant.jar and create "taskdef" as described <a href="/pant-get-started">here</a>

<h4>"jythonInit" Task</h4>
The tasks initializes jython interpreter. Because of the overhead, the interpreter is initialized only once even if <code>jythonInit</code> is invoked multiple times. The repeating calls are simply ignored.<br />
<code>jythonInit</code> automatically adds pant.pant module to <a href="http://docs.python.org/using/cmdline.html"><span class="caps">PYTHONPATH</span></a>.

<p><b>Attributes:</b></p>


<ul>
<li>pythonPathRef - <a href="http://wiki.python.org/jython/UserGuide#registry-properties><span class="caps">PYTHONPATH </span>(python.path)</a> to use, given as reference to a <span class="caps">PATH </span>defined elsewhere. Required if "pythonPath" nested element was not provided.</li>
<li>pythonHome - location of python distribution (optional). If provided,<code>jythonInit</code> will set python.home system property and will automatically add ${python.home}/Lib to the python path if ${python.home}/Lib exists.</li>
<li>cacheDir - location of jython <a href="http://www.alexandria.ucsb.edu/middleware/javadoc/edu/ucsb/adl/middleware/Global.html">cachedir</a> used for caching packages (optional). Defaults to ${java.io.tmpdir}/jython_cache (note-- this is different from default <a href="http://www.jython.org/archive/22/userfaq.html#why-do-i-get-the-error-can-t-create-package-cache-dir-cachedir-packages">jython behavior</a>). </li>
</ul>



<p><b>Nested elements:</b></p>

<p>pythonPath - python.path to use defined using <a href="http://ant.apache.org/manual/using.html#path">Ant path-like structure</a>. Required if "pythonPathRef" attribute was not provided.</p>

<p><b>Special properties:</b></p>

<p>log.python.path - if set to "true", <code>jythonInit</code> will print python path to Ant log. Default: false.</p>


<h4>"jython" Task</h4>
Invokes python code.<br />
Note: by default, <code>jython</code> does not print python stack trace in case of an exception. To see the trace, run Ant in verbose mode using "-v" or use "-Dverbose.jython=true" property.

<p><b>Attributes:</b></p>


<ul>
<li>exec - Python code snippet to execute. Typically, this is a function from a module available from python.path. This has to be a single line, e.g., <code>mod.fun()</code> although you could combine multiple statements separated by ";". Required if "execfile" was not provided.</li>
<li>import - a convenience attribute for providing "import" statement. Its only purpose is to make the task invocation more readable. Alternatively, you can have "import" as part of the"exec",e.g., <code>exec=&quot;import mod;mod.fun()&quot;</code>. Optional.</li>
<li>execfile - path to a python script file. Required if "exec" was not provided.</li>
</ul>



<p><b>Nested elements:</b></p>

<p>Inline text with python code.</p>

<p><b>Special properties:</b></p>

<p>verbose.jython - if set to "true", <code>jython</code> will print additional information about executing python code to Ant log. Default: false.</p>


<h4>pimport Task</h4>

<p>Creates Ant targets from a python module. Functions that will be used as targets have to be marked using "@target" decorator as described <a href="/pant2-targets">here</a>.<br />
Python module name is used as Ant project name. Target overriding works the same way with <a href="http://ant.apache.org/manual/Tasks/import.html">Ant import task</a>. In other words, targets defined using <code>pimport</code> will override targets previously defined using "import" or "pimport" tasks. </p>

<p><b>Attributes:</b><br />
module - python module to create targets from. The module has to be available from python.path specified using <code>jythonInit</code>.</p>]]></content:encoded>
			<wfw:commentRss>http://myarch.com/ant-jython-task/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Jython Ant Wrapper Examples</title>
		<link>http://myarch.com/jython-ant-wrapper-examples</link>
		<comments>http://myarch.com/jython-ant-wrapper-examples#comments</comments>
		<pubDate>Tue, 08 Apr 2008 03:12:50 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[Building software]]></category>
		<category><![CDATA[PAnt]]></category>

		<guid isPermaLink="false">http://myarch.com/jython-ant-wrapper-examples</guid>
		<description><![CDATA[Somebody asked me about examples for PAnt Jython wrapper. Here are some. I'll be updating this page with more examples in the future. Following is a simple echo task. Note that pant.py has to be on your "python.path". You can set it by adding it to your ANT_OPTS environment variable (ANT_OPTS=-Dpython.path=python_path). &#60;script language="jython"&#62; from pant [...]]]></description>
			<content:encoded><![CDATA[
<p>
Somebody asked me about examples for <a href="/ant-scripts-without-xml">PAnt Jython wrapper</a>. Here are some. I'll be updating this page with more examples in the future.
</p>
<p>
Following is a simple echo task. Note that pant.py has to be on your "python.path". You can set it by adding it
to your ANT_OPTS environment variable (ANT_OPTS=-Dpython.path=<i>python_path</i>). 
</p>
<pre>
<code>

        &lt;script language="jython"&gt;
from pant import *
pant=PAnt(project)
pant.execTask(name="echo", message="foo")
        &lt;/script&gt;
</code>
</pre>

<p>
Following is a copy task example. Note the use of "nested" function to denore nested elements. "expandproperties" is assigned
an empty dictionary since it does not have any attributes.
</p>
<pre>
<code>

pant = PAnt( project )
pant.copy(todir="${test.prop}", fileset=nested(dir=".", include=nested(name="*.xml")), 
          filterchain=nested(expandproperties={}) ) 
</code>
</pre>
<p>
Following is an example of Exec task. Multiple "env" elements 
are distinguished by adding the suffix "_<i>number</i>". The suffix can in fact be anything, PAnt, 
simply ignores the substring starting with underbar. 
This example also demonstrates how you can mix and match python variables and Ant properties
in the same piece of code. 
</p>
<pre>
<code>
shellFile="myshell.sh"
commandLine="options"
pant.exec(dir="${bin.dir}", executable=shellFile,  failonerror="true", resultproperty="result.code",
          env_1=nested(key="key1", value='${val1}'),
          env_2=nested(key="key2", value='${val2}'),
          env_3=nested(key="key3", value='${val3}'),
          arg=nested(line=commandLine) )
</code>
</pre>
<p>
<br />
<b>Update:</b>
<br/>
<a href="/ant-jython-task">MyArch Jython Task</a> provides tighter integration of Ant and Jython. You may want to use it together with PAnt.
</p>

<p>
<b>Please refer to our official <a href="/pant">PAnt project page</a> for more information and to download PAnt</b>
</p>]]></content:encoded>
			<wfw:commentRss>http://myarch.com/jython-ant-wrapper-examples/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

