git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@811376 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -860,6 +860,12 @@ Other changes: | |||||
| task's (compiler) adapter class. | task's (compiler) adapter class. | ||||
| Bugzilla Report 11143. | Bugzilla Report 11143. | ||||
| * <javac>, <rmic>, <javah> and <native2ascii> now provide a nested | |||||
| element to specify the task's (compiler) adapter as an instance of | |||||
| a class that has been defined via typedef/componentdef. This | |||||
| allows more control over the classpath and allows adapters to be | |||||
| defined in Antlibs easily. | |||||
| * A new subclass org.apache.tools.ant.loader.AntClassLoader5 of | * A new subclass org.apache.tools.ant.loader.AntClassLoader5 of | ||||
| AntClassLoader has been added which overrides getResources | AntClassLoader has been added which overrides getResources | ||||
| which became non-final in ClassLoader with Java5+ so | which became non-final in ClassLoader with Java5+ so | ||||
| @@ -59,9 +59,12 @@ for information on how the | |||||
| inclusion/exclusion of files works, and how to write wildcard patterns.</p> | inclusion/exclusion of files works, and how to write wildcard patterns.</p> | ||||
| <p>It is possible to use different compilers. This can be specified by | <p>It is possible to use different compilers. This can be specified by | ||||
| either setting the global <code>build.compiler</code> property, which will | either setting the global <code>build.compiler</code> property, which will | ||||
| affect all <code><javac></code> tasks throughout the build, or by | |||||
| affect all <code><javac></code> tasks throughout the build, by | |||||
| setting the <code>compiler</code> attribute, specific to the current | setting the <code>compiler</code> attribute, specific to the current | ||||
| <code><javac></code> task. | |||||
| <code><javac></code> task or by using a nested element of any | |||||
| <a href="typedef.html">typedef</a>fed or | |||||
| <a href="componentdef.html">componentdef</a>fed type that implements | |||||
| <code>org.apache.tools.ant.taskdefs.compilers.CompilerAdapter</code>. | |||||
| <a name="compilervalues">Valid values for either the | <a name="compilervalues">Valid values for either the | ||||
| <code>build.compiler</code> property or the <code>compiler</code> | <code>build.compiler</code> property or the <code>compiler</code> | ||||
| attribute are:</a></p> | attribute are:</a></p> | ||||
| @@ -516,6 +519,12 @@ used.</p> | |||||
| custom class has been specified. Doesn't have any effect when | custom class has been specified. Doesn't have any effect when | ||||
| using one of the built-in compilers.</p> | using one of the built-in compilers.</p> | ||||
| <h4>Any nested element of a type that implements CompilerAdapter | |||||
| <em>since Ant 1.8.0</em></h4> | |||||
| <p>If a defined type implements the <code>CompilerAdapter</code> | |||||
| interface a nested element of that type can be used as an | |||||
| alternative to the <code>compiler</code> attribute.</p> | |||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <pre> <javac srcdir="${src}" | <pre> <javac srcdir="${src}" | ||||
| @@ -662,6 +671,25 @@ the <tt><compilerarg></tt> element: | |||||
| </javac> </pre> | </javac> </pre> | ||||
| </p> | </p> | ||||
| <p>If you want to use a custom | |||||
| CompilerAdapter <code>org.example.MyAdapter</code> you can either | |||||
| use the compiler attribute:</p> | |||||
| <pre> | |||||
| <javac srcdir="${src.dir}" | |||||
| destdir="${classes.dir}" | |||||
| compiler="org.example.MyAdapter"/> | |||||
| </pre> | |||||
| <p>or a define a type and nest this into the task like in:</p> | |||||
| <pre> | |||||
| <componentdef classname="org.example.MyAdapter" | |||||
| name="myadapter"/> | |||||
| <javac srcdir="${src.dir}" | |||||
| destdir="${classes.dir}"> | |||||
| <myadapter/> | |||||
| </javac> | |||||
| </pre> | |||||
| <p>in which case your compiler adapter can support attributes and | |||||
| nested elements of its own.</p> | |||||
| <h3>Jikes Notes</h3> | <h3>Jikes Notes</h3> | ||||
| @@ -800,27 +828,14 @@ while all others are <code>false</code>.</p> | |||||
| task is run again, the | task is run again, the | ||||
| task will try to compile the package-info java files again. | task will try to compile the package-info java files again. | ||||
| </p> | </p> | ||||
| <p> | |||||
| In <b>Ant 1.7.1</b> the package-info.java will only be compiled if: | |||||
| <ol> | |||||
| <li> | |||||
| If a <code>package-info.class</code> file exists and is older than | |||||
| the <code>package-info.java</code> file. | |||||
| </li> | |||||
| <li> | |||||
| If the directory for the | |||||
| <code>package-info.class</code> file does not exist. | |||||
| </li> | |||||
| <li> | |||||
| If the directory for the | |||||
| <code>package-info.class</code> file exists, and has an older | |||||
| modification time than the | |||||
| the <code>package-info.java</code> file. In this case | |||||
| <javac> will touch the corresponding .class directory | |||||
| on successful compilation. | |||||
| </li> | |||||
| </ol> | |||||
| </p> | |||||
| <p>With Ant 1.7.1 a different kind of logic was introduced that | |||||
| involved the timestamp of the directory that would normally | |||||
| contain the .class file. This logic turned out to lead to Ant not | |||||
| recompiling <code>package-info.java</code> in certain setup.</p> | |||||
| <p>Starting with Ant 1.8.0 Ant will create | |||||
| "empty" <code>package-info.class</code> files if it compiles | |||||
| a <code>package-info.java</code> and | |||||
| no <code>package-info.class</code> file has been created by the | |||||
| compiler itself.</p> | |||||
| </body> | </body> | ||||
| </html> | </html> | ||||
| @@ -48,8 +48,8 @@ supports most attributes of <code><fileset></code> | |||||
| <code><include></code>, <code><exclude></code> and | <code><include></code>, <code><exclude></code> and | ||||
| <code><patternset></code> elements.</p> | <code><patternset></code> elements.</p> | ||||
| <p>It is possible to use different compilers. This can be selected | <p>It is possible to use different compilers. This can be selected | ||||
| with the "build.rmic" property or the <code>compiler</code> | |||||
| attribute. | |||||
| with the "build.rmic" property, the <code>compiler</code> | |||||
| attribute. or a nested element. | |||||
| <a name="compilervalues">Here are the choices</a>:</p> | <a name="compilervalues">Here are the choices</a>:</p> | ||||
| <ul> | <ul> | ||||
| <li>default -the default compiler (kaffe or sun) for the platform. | <li>default -the default compiler (kaffe or sun) for the platform. | ||||
| @@ -311,6 +311,13 @@ used.</p> | |||||
| custom class has been specified. Doesn't have any effect when | custom class has been specified. Doesn't have any effect when | ||||
| using one of the built-in compilers.</p> | using one of the built-in compilers.</p> | ||||
| <h4>Any nested element of a type that implements RmicAdapter | |||||
| <em>since Ant 1.8.0</em></h4> | |||||
| <p>If a defined type implements the <code>RmicAdapter</code> | |||||
| interface a nested element of that type can be used as an | |||||
| alternative to the <code>compiler</code> attribute.</p> | |||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <pre> <rmic classname="com.xyz.FooBar" base="${build}/classes"/></pre> | <pre> <rmic classname="com.xyz.FooBar" base="${build}/classes"/></pre> | ||||
| <p>runs the rmic compiler for the class <code>com.xyz.FooBar</code>. The | <p>runs the rmic compiler for the class <code>com.xyz.FooBar</code>. The | ||||
| @@ -321,7 +328,25 @@ files below <code>${build}/classes</code> whose classname starts with | |||||
| <i>Remote</i>. The compiled files will be stored in the directory | <i>Remote</i>. The compiled files will be stored in the directory | ||||
| <code>${build}/classes</code>.</p> | <code>${build}/classes</code>.</p> | ||||
| <p>If you want to use a custom | |||||
| RmicAdapter <code>org.example.MyAdapter</code> you can either | |||||
| use the compiler attribute:</p> | |||||
| <pre> | |||||
| <rmic classname="com.xyz.FooBar" | |||||
| base="${build}/classes" | |||||
| compiler="org.example.MyAdapter"/> | |||||
| </pre> | |||||
| <p>or a define a type and nest this into the task like in:</p> | |||||
| <pre> | |||||
| <componentdef classname="org.example.MyAdapter" | |||||
| name="myadapter"/> | |||||
| <rmic classname="com.xyz.FooBar" | |||||
| base="${build}/classes"> | |||||
| <myadapter/> | |||||
| </rmic> | |||||
| </pre> | |||||
| <p>in which case your compiler adapter can support attributes and | |||||
| nested elements of its own.</p> | |||||
| </body> | </body> | ||||
| </html> | </html> | ||||
| @@ -34,8 +34,8 @@ whether <a href="http://java.sun.com/j2se/1.3/docs/tooldocs/win32/javah.html">JD | |||||
| systems are used.</p> | systems are used.</p> | ||||
| <p>It is possible to use different compilers. This can be selected | <p>It is possible to use different compilers. This can be selected | ||||
| with the <code>implementation</code> attribute. <a | |||||
| name="implementationvalues">Here are the choices</a>:</p> | |||||
| with the <code>implementation</code> attribute or a nested element. <a | |||||
| name="implementationvalues">Here are the choices of the attribute</a>:</p> | |||||
| <ul> | <ul> | ||||
| <li>default - the default compiler (kaffeh or sun) for the platform.</li> | <li>default - the default compiler (kaffeh or sun) for the platform.</li> | ||||
| <li>sun (the standard compiler of the JDK)</li> | <li>sun (the standard compiler of the JDK)</li> | ||||
| @@ -177,6 +177,13 @@ only if a given compiler implementation will be used.</p> | |||||
| custom class has been specified. Doesn't have any effect when | custom class has been specified. Doesn't have any effect when | ||||
| using one of the built-in compilers.</p> | using one of the built-in compilers.</p> | ||||
| <h4>Any nested element of a type that implements JavahAdapter | |||||
| <em>since Ant 1.8.0</em></h4> | |||||
| <p>If a defined type implements the <code>JavahAdapter</code> | |||||
| interface a nested element of that type can be used as an | |||||
| alternative to the <code>implementation</code> attribute.</p> | |||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <pre> <javah destdir="c" class="org.foo.bar.Wibble"/></pre> | <pre> <javah destdir="c" class="org.foo.bar.Wibble"/></pre> | ||||
| <p>makes a JNI header of the named class, using the JDK1.2 JNI model. Assuming | <p>makes a JNI header of the named class, using the JDK1.2 JNI model. Assuming | ||||
| @@ -210,6 +217,23 @@ is invoked, even if they already exist.</p> | |||||
| writes the corresponding .c stubs. The verbose option will cause Javah to | writes the corresponding .c stubs. The verbose option will cause Javah to | ||||
| describe its progress.</p> | describe its progress.</p> | ||||
| <p>If you want to use a custom | |||||
| JavahAdapter <code>org.example.MyAdapter</code> you can either | |||||
| use the implementation attribute:</p> | |||||
| <pre> | |||||
| <javah destdir="c" class="org.foo.bar.Wibble" | |||||
| implementation="org.example.MyAdapter"/> | |||||
| </pre> | |||||
| <p>or a define a type and nest this into the task like in:</p> | |||||
| <pre> | |||||
| <componentdef classname="org.example.MyAdapter" | |||||
| name="myadapter"/> | |||||
| <javah destdir="c" class="org.foo.bar.Wibble"> | |||||
| <myadapter/> | |||||
| </javah> | |||||
| </pre> | |||||
| <p>in which case your javah adapter can support attributes and | |||||
| nested elements of its own.</p> | |||||
| </body> | </body> | ||||
| @@ -58,8 +58,8 @@ | |||||
| </p> | </p> | ||||
| <p>It is possible to use different converters. This can be selected | <p>It is possible to use different converters. This can be selected | ||||
| with the <code>implementation</code> attribute. | |||||
| <a name="implementationvalues">Here are the choices</a>:</p> | |||||
| with the <code>implementation</code> attribute or a nested element. | |||||
| <a name="implementationvalues">Here are the choices of the attribute</a>:</p> | |||||
| <ul> | <ul> | ||||
| <li>default - the default converter (kaffe or sun) for the platform.</li> | <li>default - the default converter (kaffe or sun) for the platform.</li> | ||||
| <li>sun (the standard converter of the JDK)</li> | <li>sun (the standard converter of the JDK)</li> | ||||
| @@ -190,6 +190,13 @@ only if a given converter implementation will be used.</p> | |||||
| custom class has been specified. Doesn't have any effect when | custom class has been specified. Doesn't have any effect when | ||||
| using one of the built-in converters.</p> | using one of the built-in converters.</p> | ||||
| <h4>Any nested element of a type that implements Native2AsciiAdapter | |||||
| <em>since Ant 1.8.0</em></h4> | |||||
| <p>If a defined type implements the <code>Native2AsciiAdapter</code> | |||||
| interface a nested element of that type can be used as an | |||||
| alternative to the <code>implementation</code> attribute.</p> | |||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <pre> | <pre> | ||||
| @@ -214,6 +221,26 @@ only if a given converter implementation will be used.</p> | |||||
| placing the results in the directory <em>src</em>. | placing the results in the directory <em>src</em>. | ||||
| The names of the files remain the same. | The names of the files remain the same. | ||||
| </p> | </p> | ||||
| <p>If you want to use a custom | |||||
| Native2AsciiAdapter <code>org.example.MyAdapter</code> you can either | |||||
| use the implementation attribute:</p> | |||||
| <pre> | |||||
| <native2ascii encoding="EUCJIS" src="srcdir" dest="srcdir" | |||||
| includes="**/*.eucjis" ext=".java" | |||||
| implementation="org.example.MyAdapter"/> | |||||
| </pre> | |||||
| <p>or a define a type and nest this into the task like in:</p> | |||||
| <pre> | |||||
| <componentdef classname="org.example.MyAdapter" | |||||
| name="myadapter"/> | |||||
| <native2ascii encoding="EUCJIS" src="srcdir" dest="srcdir" | |||||
| includes="**/*.eucjis" ext=".java"> | |||||
| <myadapter/> | |||||
| </native2ascii> | |||||
| </pre> | |||||
| <p>in which case your native2ascii adapter can support attributes and | |||||
| nested elements of its own.</p> | |||||
| </body> | </body> | ||||
| </html> | </html> | ||||
| @@ -127,6 +127,7 @@ public class Javac extends MatchingTask { | |||||
| private String errorProperty; | private String errorProperty; | ||||
| private boolean taskSuccess = true; // assume the best | private boolean taskSuccess = true; // assume the best | ||||
| private boolean includeDestClasses = true; | private boolean includeDestClasses = true; | ||||
| private CompilerAdapter nestedAdapter = null; | |||||
| /** | /** | ||||
| * Javac task for compilation of Java files. | * Javac task for compilation of Java files. | ||||
| @@ -865,6 +866,18 @@ public class Javac extends MatchingTask { | |||||
| return facade.getImplementationClasspath(getProject()); | return facade.getImplementationClasspath(getProject()); | ||||
| } | } | ||||
| /** | |||||
| * Set the compiler adapter explicitly. | |||||
| * @since Ant 1.8.0 | |||||
| */ | |||||
| public void add(CompilerAdapter adapter) { | |||||
| if (nestedAdapter != null) { | |||||
| throw new BuildException("Can't have more than one compiler" | |||||
| + " adapter"); | |||||
| } | |||||
| nestedAdapter = adapter; | |||||
| } | |||||
| /** | /** | ||||
| * Executes the task. | * Executes the task. | ||||
| * @exception BuildException if an error occurs | * @exception BuildException if an error occurs | ||||
| @@ -1073,6 +1086,7 @@ public class Javac extends MatchingTask { | |||||
| } | } | ||||
| CompilerAdapter adapter = | CompilerAdapter adapter = | ||||
| nestedAdapter != null ? nestedAdapter : | |||||
| CompilerAdapterFactory.getCompiler(compilerImpl, this, | CompilerAdapterFactory.getCompiler(compilerImpl, this, | ||||
| createCompilerClasspath()); | createCompilerClasspath()); | ||||
| @@ -128,6 +128,8 @@ public class Rmic extends MatchingTask { | |||||
| private boolean listFiles = false; | private boolean listFiles = false; | ||||
| private RmicAdapter nestedAdapter = null; | |||||
| /** | /** | ||||
| * Constructor for Rmic. | * Constructor for Rmic. | ||||
| */ | */ | ||||
| @@ -560,6 +562,18 @@ public class Rmic extends MatchingTask { | |||||
| public void setListfiles(boolean list) { | public void setListfiles(boolean list) { | ||||
| listFiles = list; | listFiles = list; | ||||
| } | } | ||||
| /** | |||||
| * Set the compiler adapter explicitly. | |||||
| * @since Ant 1.8.0 | |||||
| */ | |||||
| public void add(RmicAdapter adapter) { | |||||
| if (nestedAdapter != null) { | |||||
| throw new BuildException("Can't have more than one rmic adapter"); | |||||
| } | |||||
| nestedAdapter = adapter; | |||||
| } | |||||
| /** | /** | ||||
| * execute by creating an instance of an implementation | * execute by creating an instance of an implementation | ||||
| * class and getting to do the work | * class and getting to do the work | ||||
| @@ -582,8 +596,10 @@ public class Rmic extends MatchingTask { | |||||
| if (verify) { | if (verify) { | ||||
| log("Verify has been turned on.", Project.MSG_VERBOSE); | log("Verify has been turned on.", Project.MSG_VERBOSE); | ||||
| } | } | ||||
| RmicAdapter adapter = RmicAdapterFactory.getRmic(getCompiler(), this, | |||||
| createCompilerClasspath()); | |||||
| RmicAdapter adapter = | |||||
| nestedAdapter != null ? nestedAdapter : | |||||
| RmicAdapterFactory.getRmic(getCompiler(), this, | |||||
| createCompilerClasspath()); | |||||
| // now we need to populate the compiler adapter | // now we need to populate the compiler adapter | ||||
| adapter.setRmic(this); | adapter.setRmic(this); | ||||
| @@ -83,6 +83,7 @@ public class Javah extends Task { | |||||
| //private Path extdirs; | //private Path extdirs; | ||||
| private FacadeTaskHelper facade = null; | private FacadeTaskHelper facade = null; | ||||
| private Vector files = new Vector(); | private Vector files = new Vector(); | ||||
| private JavahAdapter nestedAdapter = null; | |||||
| /** | /** | ||||
| * No arg constructor. | * No arg constructor. | ||||
| @@ -416,6 +417,18 @@ public class Javah extends Task { | |||||
| return facade.getImplementationClasspath(getProject()); | return facade.getImplementationClasspath(getProject()); | ||||
| } | } | ||||
| /** | |||||
| * Set the adapter explicitly. | |||||
| * @since Ant 1.8.0 | |||||
| */ | |||||
| public void add(JavahAdapter adapter) { | |||||
| if (nestedAdapter != null) { | |||||
| throw new BuildException("Can't have more than one javah" | |||||
| + " adapter"); | |||||
| } | |||||
| nestedAdapter = adapter; | |||||
| } | |||||
| /** | /** | ||||
| * Execute the task | * Execute the task | ||||
| * | * | ||||
| @@ -452,6 +465,7 @@ public class Javah extends Task { | |||||
| } | } | ||||
| JavahAdapter ad = | JavahAdapter ad = | ||||
| nestedAdapter != null ? nestedAdapter : | |||||
| JavahAdapterFactory.getAdapter(facade.getImplementation(), | JavahAdapterFactory.getAdapter(facade.getImplementation(), | ||||
| this, | this, | ||||
| createImplementationClasspath()); | createImplementationClasspath()); | ||||
| @@ -48,6 +48,7 @@ public class Native2Ascii extends MatchingTask { | |||||
| private Mapper mapper; | private Mapper mapper; | ||||
| private FacadeTaskHelper facade = null; | private FacadeTaskHelper facade = null; | ||||
| private Native2AsciiAdapter nestedAdapter = null; | |||||
| /** No args constructor */ | /** No args constructor */ | ||||
| public Native2Ascii() { | public Native2Ascii() { | ||||
| @@ -184,6 +185,18 @@ public class Native2Ascii extends MatchingTask { | |||||
| return facade.getImplementationClasspath(getProject()); | return facade.getImplementationClasspath(getProject()); | ||||
| } | } | ||||
| /** | |||||
| * Set the adapter explicitly. | |||||
| * @since Ant 1.8.0 | |||||
| */ | |||||
| public void add(Native2AsciiAdapter adapter) { | |||||
| if (nestedAdapter != null) { | |||||
| throw new BuildException("Can't have more than one native2ascii" | |||||
| + " adapter"); | |||||
| } | |||||
| nestedAdapter = adapter; | |||||
| } | |||||
| /** | /** | ||||
| * Execute the task | * Execute the task | ||||
| * | * | ||||
| @@ -274,6 +287,7 @@ public class Native2Ascii extends MatchingTask { | |||||
| log("converting " + srcName, Project.MSG_VERBOSE); | log("converting " + srcName, Project.MSG_VERBOSE); | ||||
| Native2AsciiAdapter ad = | Native2AsciiAdapter ad = | ||||
| nestedAdapter != null ? nestedAdapter : | |||||
| Native2AsciiAdapterFactory.getAdapter(facade.getImplementation(), | Native2AsciiAdapterFactory.getAdapter(facade.getImplementation(), | ||||
| this, | this, | ||||
| createImplementationClasspath()); | createImplementationClasspath()); | ||||
| @@ -155,4 +155,14 @@ public class Adapter implements CompilerAdapter { | |||||
| </javac> | </javac> | ||||
| <au:assertLogContains text="adapter called"/> | <au:assertLogContains text="adapter called"/> | ||||
| </target> | </target> | ||||
| <target name="testCompilerAsNestedElement" depends="-create-javac-adapter"> | |||||
| <componentdef classname="org.example.Adapter" name="myjavac"> | |||||
| <classpath location="${adapter.dir}"/> | |||||
| </componentdef> | |||||
| <javac srcdir="${input}" destdir="${output}"> | |||||
| <myjavac/> | |||||
| </javac> | |||||
| <au:assertLogContains text="adapter called"/> | |||||
| </target> | |||||
| </project> | </project> | ||||
| @@ -52,4 +52,15 @@ public class Adapter implements JavahAdapter { | |||||
| </javah> | </javah> | ||||
| <au:assertLogContains text="adapter called"/> | <au:assertLogContains text="adapter called"/> | ||||
| </target> | </target> | ||||
| <target name="testImplementationAsNestedElement" | |||||
| depends="-create-javah-adapter"> | |||||
| <componentdef classname="org.example.Adapter" name="myjavac"> | |||||
| <classpath location="${adapter.dir}"/> | |||||
| </componentdef> | |||||
| <javah class="org.example.Adapter" destdir="${output}"> | |||||
| <myjavac/> | |||||
| </javah> | |||||
| <au:assertLogContains text="adapter called"/> | |||||
| </target> | |||||
| </project> | </project> | ||||
| @@ -53,4 +53,15 @@ public class Adapter implements Native2AsciiAdapter { | |||||
| </native2ascii> | </native2ascii> | ||||
| <au:assertLogContains text="adapter called"/> | <au:assertLogContains text="adapter called"/> | ||||
| </target> | </target> | ||||
| <target name="testImplementationAsNestedElement" | |||||
| depends="-create-native2ascii-adapter"> | |||||
| <componentdef classname="org.example.Adapter" name="myjavac"> | |||||
| <classpath location="${adapter.dir}"/> | |||||
| </componentdef> | |||||
| <native2ascii src="${input}" dest="${output}" includes="**/*.java"> | |||||
| <myjavac/> | |||||
| </native2ascii> | |||||
| <au:assertLogContains text="adapter called"/> | |||||
| </target> | |||||
| </project> | </project> | ||||
| @@ -66,4 +66,14 @@ public class Adapter implements RmicAdapter { | |||||
| </rmic> | </rmic> | ||||
| <au:assertLogContains text="adapter called"/> | <au:assertLogContains text="adapter called"/> | ||||
| </target> | </target> | ||||
| <target name="testCompilerAsNestedElement" depends="-create-rmic-adapter"> | |||||
| <componentdef classname="org.example.Adapter" name="myjavac"> | |||||
| <classpath location="${adapter.dir}"/> | |||||
| </componentdef> | |||||
| <rmic base="${adapter.dir}" includes="**/*.class"> | |||||
| <myjavac/> | |||||
| </rmic> | |||||
| <au:assertLogContains text="adapter called"/> | |||||
| </target> | |||||
| </project> | </project> | ||||