• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!--
2* © 2016 and later: Unicode, Inc. and others.
3* License & terms of use: http://www.unicode.org/copyright.html
4*******************************************************************************
5* Copyright (C) 1997-2016, International Business Machines Corporation and    *
6* others. All Rights Reserved.                                                *
7*******************************************************************************
8-->
9<project name="icu4j" default="jar" basedir="."
10    xmlns:ivy="antlib:org.apache.ivy.ant"
11    xmlns:jacoco="antlib:org.jacoco.ant">
12
13    <property file="build-local.properties"/>
14    <property file="build.properties"/>
15
16    <property name="shared.dir" value="main/shared"/>
17    <import file="${shared.dir}/build/common-targets.xml"/>
18
19    <property environment="env"/>
20
21    <!-- icu4j binaries -->
22    <property name="icu4j.jar.file" value="icu4j.jar"/>
23    <property name="icu4jtests.jar.file" value="icu4jtests.jar"/>
24    <property name="icu4j-charset.jar.file" value="icu4j-charset.jar"/>
25    <property name="icu4j-localespi.jar.file" value="icu4j-localespi.jar"/>
26
27    <property name="icu4jdemos.jar.file" value="icu4jdemos.jar"/>
28
29    <!-- icu4j API doc jar file -->
30    <property name="icu4jdocs.jar.file" value="icu4j-docs.jar"/>
31
32    <!-- icu4j src jar files -->
33    <property name="icu4j-src.jar.file" value="icu4j-src.jar"/>
34    <property name="icu4j-charset-src.jar.file" value="icu4j-charset-src.jar"/>
35    <property name="icu4j-localespi-src.jar.file" value="icu4j-localespi-src.jar"/>
36
37    <!-- icu4j source package archive files -->
38    <property name="icu4jsrc.zip.file" value="icu4j.zip"/>
39    <property name="icu4jsrc.tgz.file" value="icu4j.tgz"/>
40
41    <!-- icu4j versioned release files -->
42    <property name="icu4j.jar.versioned.file" value="icu4j-${release.file.ver}.jar"/>
43    <property name="icu4j-charset.jar.versioned.file" value="icu4j-charset-${release.file.ver}.jar"/>
44    <property name="icu4j-localespi.jar.versioned.file" value="icu4j-localespi-${release.file.ver}.jar"/>
45
46    <property name="icu4j-src.jar.versioned.file" value="icu4j-${release.file.ver}-src.jar"/>
47    <property name="icu4j-charset-src.jar.versioned.file" value="icu4j-charset-${release.file.ver}-src.jar"/>
48    <property name="icu4j-localespi-src.jar.versioned.file" value="icu4j-localespi-${release.file.ver}-src.jar"/>
49
50    <property name="icu4jdocs.jar.versioned.file" value="icu4j-${release.file.ver}-docs.jar"/>
51
52    <!-- <property name="icu4jsrc.zip.versioned.file" value="icu4j-${release.file.ver}.zip"/> -->
53    <property name="icu4jsrc.tgz.versioned.file" value="icu4j-${release.file.ver}.tgz"/>
54
55    <!-- API doc -->
56    <property name="icu4j.api.doc.title" value="ICU4J ${api.doc.version} API Specification"/>
57    <property name="icu4j.api.doc.window.title" value="ICU4J ${api.doc.version}"/>
58    <property name="icu4j.api.doc.header" value="ICU4J ${api.doc.version}"/>
59
60    <property name="icu4j.api.doc.jdk.link" value="https://docs.oracle.com/javase/8/docs/api/"/>
61    <property name="icu4j.api.doc.copyright.footer" value="&lt;font size=-1&gt;Copyright &#x00A9; 2016 Unicode, Inc. and others.&lt;/font&gt;"/>
62
63    <!-- API docs for maven repo -->
64    <property name="icu4jdocs.main.jar.versioned.file" value="icu4j-${release.file.ver}-docs.jar"/>
65    <property name="icu4j.main.api.doc.title" value="ICU4J (com.ibm.icu:icu4j) ${api.doc.version} API Specification"/>
66    <property name="icu4j.main.api.doc.window.title" value="ICU4J (com.ibm.icu:icu4j) ${api.doc.version}"/>
67    <property name="icu4j.main.api.doc.header" value="ICU4J (com.ibm.icu:icu4j) ${api.doc.version}"/>
68
69    <property name="icu4jdocs.charset.jar.versioned.file" value="icu4j-charset-${release.file.ver}-docs.jar"/>
70    <property name="icu4j.charset.api.doc.title" value="ICU4J Charset (com.ibm.icu:icu4j-charset) ${api.doc.version} API Specification"/>
71    <property name="icu4j.charset.api.doc.window.title" value="ICU4J Charset (com.ibm.icu:icu4j-charset) ${api.doc.version}"/>
72    <property name="icu4j.charset.api.doc.header" value="ICU4J Charset (com.ibm.icu:icu4j-charset) ${api.doc.version}"/>
73
74    <property name="icu4jdocs.localespi.jar.versioned.file" value="icu4j-localespi-${release.file.ver}-docs.jar"/>
75    <property name="icu4j.locspi.api.doc.title" value="ICU4J Locale SPI Provider (com.ibm.icu:icu4j-localespi) ${api.doc.version} API Specification"/>
76    <property name="icu4j.locspi.api.doc.window.title" value="ICU4J Locale SPI Provider (com.ibm.icu:icu4j-localespi) ${api.doc.version}"/>
77    <property name="icu4j.locspi.api.doc.header" value="ICU4J Locale SPI Provider (com.ibm.icu:icu4j-localespi) ${api.doc.version}"/>
78
79
80    <!-- directories -->
81    <property name="release.dir" value="release"/>
82    <property name="doc.dir" value="doc"/>
83    <property name="maven.doc.base.dir" value="${out.dir}/mavendoc"/>
84    <property name="cldr.util.out.dir" value="${out.dir}/cldr_util"/>
85    <property name="cldr.release.dir" value="release_cldr"/>
86    <property name="external-jars" value="lib"/>
87
88    <!-- Java version check -->
89    <condition property="is.java7">
90        <matches string="${java.version}" pattern="1\.7\.\d.*"/>
91    </condition>
92
93    <condition property="is.java8">
94        <matches string="${java.version}" pattern="1\.8\.\d.*"/>
95    </condition>
96
97    <condition property="is.java9">
98        <matches string="${java.version}" pattern="9((-.|\.\d).*)?"/>
99    </condition>
100
101    <condition property="is.java10">
102        <matches string="${java.version}" pattern="10((-.|\.\d).*)?"/>
103    </condition>
104
105    <condition property="is.java11">
106        <matches string="${java.version}" pattern="11((-.|\.\d).*)?"/>
107    </condition>
108
109    <condition property="is.java12">
110        <matches string="${java.version}" pattern="12((-.|\.\d).*)?"/>
111    </condition>
112
113    <condition property="is.java8.plus">
114        <or>
115            <isset property="is.java8"/>
116            <isset property="is.java9"/>
117            <isset property="is.java10"/>
118            <isset property="is.java11"/>
119            <isset property="is.java12"/>
120        </or>
121    </condition>
122
123    <condition property="is.java7.plus">
124        <or>
125            <isset property="is.java7"/>
126            <isset property="is.java8.plus"/>
127        </or>
128    </condition>
129
130    <fail message="The JDK version is too old or unknown.">
131        <condition>
132            <not>
133                <isset property="is.java7.plus"/>
134            </not>
135        </condition>
136    </fail>
137
138
139    <!-- Build environment info -->
140    <property name="env.COMPUTERNAME" value="${env.HOSTNAME}"/>
141    <target name="info" description="Display the build environment information">
142        <echo message="----- Build Environment Information -------------------"/>
143        <echo message="Java Home:    ${java.home}"/>
144        <echo message="Java Version: ${java.version}"/>
145        <echo message="Ant Home:     ${ant.home}"/>
146        <echo message="Ant Version:  ${ant.version}"/>
147        <echo message="OS:           ${os.name}"/>
148        <echo message="OS Version:   ${os.version}"/>
149        <echo message="OS Arch:      ${os.arch}"/>
150        <echo message="Host:         ${env.COMPUTERNAME}"/>
151        <echo message="-------------------------------------------------------"/>
152    </target>
153
154    <target name="clean" description="Clean up build outputs">
155        <ant dir="${icu4j.core.dir}" target="clean" inheritAll="false"/>
156        <ant dir="${icu4j.collate.dir}" target="clean" inheritAll="false"/>
157        <ant dir="${icu4j.charset.dir}" target="clean" inheritAll="false"/>
158        <ant dir="${icu4j.currdata.dir}" target="clean" inheritAll="false"/>
159        <ant dir="${icu4j.langdata.dir}" target="clean" inheritAll="false"/>
160        <ant dir="${icu4j.localespi.dir}" target="clean" inheritAll="false"/>
161        <ant dir="${icu4j.regiondata.dir}" target="clean" inheritAll="false"/>
162        <ant dir="${icu4j.translit.dir}" target="clean" inheritAll="false"/>
163        <ant dir="${icu4j.test-framework.dir}" target="clean" inheritAll="false"/>
164        <ant dir="${icu4j.core-tests.dir}" target="clean" inheritAll="false"/>
165        <ant dir="${icu4j.collate-tests.dir}" target="clean" inheritAll="false"/>
166        <ant dir="${icu4j.charset-tests.dir}" target="clean" inheritAll="false"/>
167        <ant dir="${icu4j.localespi-tests.dir}" target="clean" inheritAll="false"/>
168        <ant dir="${icu4j.packaging-tests.dir}" target="clean" inheritAll="false"/>
169        <ant dir="${icu4j.translit-tests.dir}" target="clean" inheritAll="false"/>
170        <ant dir="${icu4j.build-tools.dir}" target="clean" inheritAll="false"/>
171        <ant dir="${icu4j.tools.dir}" target="clean" inheritAll="false"/>
172        <ant dir="${icu4j.demos.dir}" target="clean" inheritAll="false"/>
173        <ant dir="${icu4j.samples.dir}" target="clean" inheritAll="false"/>
174        <ant dir="${icu4j.perf-tests.dir}" target="clean" inheritAll="false"/>
175
176        <!-- delete all .jar files root directory -->
177        <delete>
178            <fileset dir="." includes="icu4j*.jar"/>
179        </delete>
180
181        <delete dir="${release.dir}"/>
182        <delete dir="${doc.dir}"/>
183        <delete dir="${out.dir}"/>
184        <delete dir="${module.dir}"/>
185        <delete dir="${cldr.release.dir}"/>
186    </target>
187
188    <target name="ivy-clean">
189        <ivy:cleancache/>
190    </target>
191
192    <!-- Ivy Targets -->
193    <property name="ivy.install.version" value="2.5.0" />
194    <condition property="ivy.home" value="${env.IVY_HOME}">
195        <isset property="env.IVY_HOME" />
196    </condition>
197    <property name="ivy.home" value="${user.home}/.ant" />
198    <property name="ivy.jar.dir" value="${ivy.home}/lib" />
199    <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" />
200
201    <target name="download-ivy" unless="offline">
202        <mkdir dir="${ivy.jar.dir}"/>
203        <!-- download Ivy from web site so that it can be used even without any special installation -->
204        <get src="https://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
205             dest="${ivy.jar.file}" usetimestamp="true"/>
206    </target>
207
208    <target name="init-ivy" depends="download-ivy">
209      <!-- try to load ivy here from ivy home, in case the user has not already dropped
210              it into ant's lib dir (note that the latter copy will always take precedence).
211              We will not fail as long as local lib dir exists (it may be empty) and
212              ivy is in at least one of ant's lib dir or the local lib dir. -->
213        <path id="ivy.lib.path">
214            <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
215        </path>
216        <taskdef resource="org/apache/ivy/ant/antlib.xml"
217                 uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
218    </target>
219
220    <target name="test-init-junit-dependency" depends="init-ivy">
221        <ivy:retrieve/>
222    </target>
223
224    <target name="init" depends="test-init-junit-dependency"
225            description="Initialize the environment for build and test. May require internet access."/>
226
227    <target name="_classifytests">
228        <condition property="testaction.run">
229            <isset property="testclass"/>
230       </condition>
231       <condition property="testaction.class">
232            <and>
233                <isset property="testclass"/>
234                <not><isset property="testnames"/></not>
235            </and>
236        </condition>
237        <condition property="testaction.tests">
238            <and>
239                <isset property="testclass"/>
240                <isset property="testnames"/>
241            </and>
242        </condition>
243        <condition property="testaction.error">
244            <and>
245                <not><isset property="testclass"/></not>
246                <isset property="testnames"/>
247            </and>
248        </condition>
249        <condition property="testaction.all">
250            <and>
251                <not><isset property="testclass"/></not>
252                <not><isset property="testnames"/></not>
253            </and>
254        </condition>
255    </target>
256
257    <target name="checkTest" depends="_classifytests, tests, runallTests, noTests" if="testaction.run" description="Run only the specified tests of the specified test class or, if no arguments are given, the standard ICU4J test suite.">
258        <sequential>
259            <delete dir="${junit.out.dir}/checkTest"/>
260            <mkdir dir="${junit.out.dir}/checkTest"/>
261
262            <junit printsummary="yes" fork="yes">
263                <jvmarg value="-ea"/>
264                <jvmarg value="-Djava.awt.headless=true"/>
265                <jvmarg value="-DICU.exhaustive=10"/>
266                <classpath>
267                    <path refid="junit.jars"/>
268                    <path refid="junit.icu.jars"/>
269                </classpath>
270                <test name="${testclass}" todir="${junit.out.dir}/checkTest" outfile="checkTest" methods="${testnames}" if="testaction.tests">
271                    <formatter type="xml"/>
272                </test>
273                <test name="${testclass}" todir="${junit.out.dir}/checkTest" outfile="checkTest" if="testaction.class">
274                    <formatter type="xml"/>
275                </test>
276            </junit>
277
278            <junitreport todir="${junit.out.dir}/checkTest">
279                <fileset dir="${junit.out.dir}/checkTest">
280                    <include name="checkTest.xml"/>
281                </fileset>
282                <report format="frames" todir="${junit.out.dir}/checkTest/html"/>
283            </junitreport>
284
285            <fail message="test failed: @{testdir}" if="@{failure-status}" />
286        </sequential>
287    </target>
288
289     <target name="runallTests" if="testaction.all">
290        <antcall target="allTests"/>
291     </target>
292
293    <target name="allTests" depends="check"/>
294
295    <target name="noTests" if="testaction.error">
296        <echo>Execute JUnit testing using -Dtestclass='class-name' -Dtestnames='test-name1>, test-name2, ...'</echo>
297    </target>
298
299    <!-- Junit Targets -->
300    <macrodef name="icu-junit">
301        <attribute name="test-name"/>
302        <attribute name="jvm-options" default=""/>
303        <attribute name="classpath" default="junit.icu.jars"/>
304        <attribute name="failure-status" default="ignore"/>
305        <element name="junit-fileset"/>
306        <element name="junit-parameters" optional="true"/>
307        <sequential>
308        <echo message="@{jvm-options}"/>
309            <!--set the property - if it was set before it won't override-->
310            <property name="user-jvm-options" value=""/>
311            <property name="internal-jvm-options" value=""/>
312            <delete dir="${junit.out.dir}/@{test-name}"/>
313            <mkdir  dir="${junit.out.dir}/@{test-name}"/>
314
315            <junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="no"
316                failureproperty="@{failure-status}" tempdir="${junit.out.dir}">
317                <jvmarg value="-Xss4m"/>
318                <jvmarg value="-ea"/>
319                <jvmarg value="-Djava.awt.headless=true"/>
320                <jvmarg line="${user-jvm-options}"/>
321                <jvmarg line="@{jvm-options}"/>
322                <jvmarg line="${internal-jvm-options}"/>
323                <junit-parameters/>
324                <classpath>
325                    <path refid="junit.jars"/>
326                    <path refid="@{classpath}"/>
327                </classpath>
328                <formatter type="plain"/>
329                <formatter type="xml"/>
330
331                <batchtest todir="${junit.out.dir}/@{test-name}">
332                    <junit-fileset/>
333                </batchtest>
334            </junit>
335
336            <junitreport tofile="@{test-name}-TestSuite.xml" todir="${junit.out.dir}/@{test-name}">
337                <fileset dir="${junit.out.dir}/@{test-name}">
338                    <include name="*.xml"/>
339                </fileset>
340                <report format="frames" todir="${junit.out.dir}/@{test-name}/html"/>
341            </junitreport>
342
343            <fail message="test failed: @{test-name}" if="@{failure-status}" />
344
345        </sequential>
346    </macrodef>
347
348    <property name="junit.out.dir" value="${out.dir}/junit-results"/>
349    <property name="junit.core.jar" value="${external-jars}/junit-4.12.jar"/>
350    <property name="junit.hamcrest.jar" value="${external-jars}/hamcrest-core-1.3.jar"/>
351    <property name="junit.junitparams.jar" value="${external-jars}/JUnitParams-1.0.5.jar"/>
352    <path id="junit.jars">
353        <pathelement path="${junit.core.jar}"/>
354        <pathelement path="${junit.hamcrest.jar}"/>
355        <pathelement path="${junit.junitparams.jar}"/>
356    </path>
357
358    <path id="junit.icu.jars">
359        <pathelement location="${icu4j.core.jar}"/>
360        <pathelement location="${icu4j.collate.jar}"/>
361        <pathelement location="${icu4j.charset.jar}"/>
362        <pathelement location="${icu4j.currdata.jar}"/>
363        <pathelement location="${icu4j.langdata.jar}"/>
364        <pathelement location="${icu4j.regiondata.jar}"/>
365        <pathelement location="${icu4j.translit.jar}"/>
366        <pathelement location="${icu4j.test-framework.jar}"/>
367        <pathelement location="${icu4j.tools.jar}"/>
368        <pathelement location="${icu4j.core-tests.jar}"/>
369        <pathelement location="${icu4j.collate-tests.jar}"/>
370        <pathelement location="${icu4j.charset-tests.jar}"/>
371        <pathelement location="${icu4j.translit-tests.jar}"/>
372        <pathelement location="${icu4j.localespi-tests.jar}"/>
373        <pathelement location="${icu4j.packaging-tests.jar}"/>
374        <pathelement location="${icu4j.regiondata.jar}"/>
375    </path>
376
377    <path id="junit.icu.release.jars">
378        <pathelement location="${icu4j.jar.file}"/>
379        <pathelement location="${icu4j.charset.jar}"/>
380        <pathelement location="${icu4jtests.jar.file}"/>
381    </path>
382
383    <path id="junit.icu.localespi-tests.jars">
384        <pathelement location="${icu4j.test-framework.jar}"/>
385        <pathelement location="${icu4j.localespi-tests.jar}"/>
386    </path>
387
388    <!--Class names that will be included/excluded as tests-->
389    <patternset id="test-classes-patternset">
390        <include name="**/*Test*"/>
391        <exclude name="**/*Fmwk*"/>
392        <exclude name="**/*TestUtility*"/>
393        <exclude name="**/*TestHelper*"/>
394        <exclude name="**/*TestCase*"/>
395        <exclude name="**/*TestData*"/>
396        <exclude name="**/*TestSample*"/>
397        <exclude name="**/*$*.class"/>
398        <exclude name="**/data/**"/>
399        <exclude name="com/ibm/icu/dev/test/*"/>
400    </patternset>
401
402    <!--Class names that will be included/excluded as tests for time zone check-->
403    <patternset id="timeZoneCheck-patternset">
404        <include name="**/TimeZoneFormatTest*"/>
405        <exclude name="**/*$*.class"/>
406    </patternset>
407
408    <!--Class names that will be included/excluded as tests for packaging check-->
409    <patternset id="packagingCheck-patternset">
410        <include name="**/TestLocaleNamePackaging*"/>
411        <exclude name="**/*$*.class"/>
412    </patternset>
413
414    <!--Class names that will be included/excluded as tests for locale SPI check-->
415    <patternset id="localespiCheck-patternset">
416        <include name="**/*Test*"/>
417        <exclude name="com/ibm/icu/dev/test/localespi/TestUtil.*"/>
418        <exclude name="**/*$*.class"/>
419    </patternset>
420
421    <!-- meta build targets -->
422    <target name="all" depends="info, main, tests, build-tools, tools, demos, samples, perf-tests, jar, docs" description="Build all primary targets"/>
423    <target name="main" depends="info, core, collate, charset, currdata, langdata, regiondata, translit, localespi" description="Build ICU4J runtime library classes"/>
424    <target name="tests" depends="info, core-tests, charset-tests, collate-tests, packaging-tests, translit-tests, localespi-tests" description="Build ICU4J test classes"/>
425
426    <target name="secure" depends="icu4jJar" description="(Deprecated)Build ICU4J API and test classes for running the ICU4J test suite with Java security manager enabled"/>
427
428    <!-- Check to see if JVM_OPTIONS enviroment variable is set. This can be use to set the heap size. -->
429    <property name="env.JVM_OPTIONS" value=""/>
430    <property name="jvm_options" value="${env.JVM_OPTIONS}"/>
431
432    <target name="_check">
433    	<parallel>
434	        <antcall target="_charsetCheck"/>
435    	    <antcall target="_collateCheck"/>
436        	<antcall target="_coreCheck"/>
437        	<antcall target="_translitCheck"/>
438        </parallel>
439    </target>
440
441    <target name="exhaustiveCheck" description="Run the standard ICU4J test suite in exhaustive mode">
442        <antcall target="check">
443            <param name="internal-jvm-options" value="-DICU.exhaustive=10"/>
444        </antcall>
445        <fail message="test failed" if="icu-junit-failure" />
446    </target>
447
448    <target name="check" depends="main, tests" description="Run the standard ICU4J test suite">
449        <antcall target="_check"/>
450        <fail message="test failed" if="icu-junit-failure" />
451    </target>
452
453    <target name="runTest" description="Run the standard ICU4J test suite without calling any other build targets">
454        <antcall target="_check"/>
455        <fail message="test failed" if="icu-junit-failure" />
456    </target>
457
458    <target name="releaseJarCheck" depends="jar, icu4jtestsJar" description="Run the ICU4J test suite with ICU4J release jar files">
459        <icu-junit test-name="releaseJarCheck"
460            classpath="junit.icu.release.jars"
461            failure-status="icu-junit-failure">
462            <junit-fileset>
463                <zipfileset src="${icu4jtests.jar.file}">
464                    <patternset refid="test-classes-patternset"/>
465                </zipfileset>
466            </junit-fileset>
467        </icu-junit>
468        <fail message="test failed - icu4j/icu4j-charset" if="icu-junit-failure" />
469
470        <property name="test.java.ext.dir" value="${out.dir}/localespi-ext"/>
471        <delete dir="${test.java.ext.dir}"/>
472        <mkdir dir="${test.java.ext.dir}"/>
473        <copy file="${icu4j-localespi.jar.file}" todir="${test.java.ext.dir}"/>
474        <copy file="${icu4j.jar.file}" todir="${test.java.ext.dir}"/>
475
476        <icu-junit test-name="releaseJarCheck-localespi"
477            classpath="junit.icu.localespi-tests.jars"
478            jvm-options="-Djava.ext.dirs=${test.java.ext.dir}${path.separator}${java.ext.dirs}"
479            failure-status="icu-junit-failure">
480            <junit-fileset>
481                <fileset dir="${icu4j.localespi-tests.dir}/${bin.dir}">
482                    <patternset refid="localespiCheck-patternset"/>
483                </fileset>
484            </junit-fileset>
485        </icu-junit>
486        <fail message="test failed - icu4j-localespi" if="icu-junit-failure" />
487    </target>
488
489    <target name="timeZoneCheck" depends="main, tests" description="Run the complete test for TimeZoneRoundTripAll">
490        <icu-junit test-name="timeZoneCheck"
491            jvm-options="-DTimeZoneRoundTripAll=true"
492            failure-status="icu-junit-failure">
493            <junit-fileset>
494                <fileset dir="${icu4j.core-tests.dir}/${bin.dir}">
495                    <patternset refid="timeZoneCheck-patternset"/>
496                </fileset>
497            </junit-fileset>
498        </icu-junit>
499        <fail message="test failed" if="icu-junit-failure" />
500    </target>
501
502    <target name="jdktzCheck" description="Run the standard ICU4J test suite with JDK TimeZone">
503        <antcall target="check">
504            <param name="internal-jvm-options" value="-Dcom.ibm.icu.util.TimeZone.DefaultTimeZoneType=JDK"/>
505        </antcall>
506    </target>
507
508    <path id="junit.icu.jars.PackagingCheckNoLangData">
509        <pathelement location="${icu4j.core.jar}"/>
510        <pathelement location="${icu4j.charset.jar}"/>
511        <pathelement location="${icu4j.test-framework.jar}"/>
512        <pathelement location="${icu4j.packaging-tests.jar}"/>
513        <pathelement location="${icu4j.regiondata.jar}"/>
514    </path>
515
516    <path id="junit.icu.jars.PackagingCheckNoRegionData">
517        <pathelement location="${icu4j.core.jar}"/>
518        <pathelement location="${icu4j.charset.jar}"/>
519        <pathelement location="${icu4j.test-framework.jar}"/>
520        <pathelement location="${icu4j.packaging-tests.jar}"/>
521        <pathelement location="${icu4j.langdata.jar}"/>
522    </path>
523
524    <path id="junit.icu.jars.PackagingCheckNoLangNorRegionData">
525        <pathelement location="${icu4j.core.jar}"/>
526        <pathelement location="${icu4j.charset.jar}"/>
527        <pathelement location="${icu4j.test-framework.jar}"/>
528        <pathelement location="${icu4j.packaging-tests.jar}"/>
529    </path>
530
531    <target name="_packagingCheckNoLangData">
532        <!-- region data but no language data -->
533        <icu-junit test-name="packaging-NoLangData"
534            classpath="junit.icu.jars.PackagingCheckNoLangData"
535            failure-status="icu-junit-failure">
536            <junit-fileset>
537                <fileset dir="${icu4j.packaging-tests.dir}/${bin.dir}">
538                    <patternset refid="packagingCheck-patternset"/>
539                </fileset>
540            </junit-fileset>
541        </icu-junit>
542    </target>
543
544    <target name="_packagingCheckNoRegionData">
545        <!-- language data but no region data -->
546        <icu-junit test-name="packaging-NoRegionData"
547            classpath="junit.icu.jars.PackagingCheckNoRegionData"
548            failure-status="icu-junit-failure">
549            <junit-fileset>
550                <fileset dir="${icu4j.packaging-tests.dir}/${bin.dir}">
551                    <patternset refid="packagingCheck-patternset"/>
552                </fileset>
553            </junit-fileset>
554        </icu-junit>
555    </target>
556
557    <target name="_packagingCheckNoLangNorRegionData">
558        <!-- neither region nor language data -->
559        <icu-junit test-name="packaging-NoLangNorRegionData"
560            classpath="junit.icu.jars.PackagingCheckNoLangNorRegionData"
561            failure-status="icu-junit-failure">
562            <junit-fileset>
563                <fileset dir="${icu4j.packaging-tests.dir}/${bin.dir}">
564                    <patternset refid="packagingCheck-patternset"/>
565                </fileset>
566            </junit-fileset>
567        </icu-junit>
568    </target>
569
570    <target name="packagingCheck" depends="info, core, langdata, regiondata, packaging-tests" description="Run packaging tests">
571        <antcall target="_packagingCheckNoLangData"/>
572        <antcall target="_packagingCheckNoRegionData"/>
573        <antcall target="_packagingCheckNoLangNorRegionData"/>
574        <fail message="test failed" if="icu-junit-failure" />
575    </target>
576
577    <target name="_coreCheck">
578        <icu-junit test-name="core" failure-status="icu-junit-failure">
579            <junit-fileset>
580                <fileset dir="${icu4j.core-tests.dir}/${bin.dir}">
581                    <patternset refid="test-classes-patternset"/>
582                </fileset>
583            </junit-fileset>
584        </icu-junit>
585    </target>
586
587    <target name="coreCheck" depends="info, core, currdata, langdata, regiondata, core-tests" description="Run only the core tests">
588        <antcall target="_coreCheck"/>
589        <fail message="test failed" if="icu-junit-failure" />
590    </target>
591
592    <target name="_charsetCheck">
593        <icu-junit test-name="charset" failure-status="icu-junit-failure">
594            <junit-fileset>
595                <fileset dir="${icu4j.charset-tests.dir}/${bin.dir}">
596                    <patternset refid="test-classes-patternset"/>
597                </fileset>
598            </junit-fileset>
599        </icu-junit>
600    </target>
601
602    <target name="charsetCheck" depends="info, core, charset, currdata, langdata, regiondata, core-tests, charset-tests" description="Run only the charset tests">
603        <antcall target="_charsetCheck"/>
604        <fail message="test failed" if="icu-junit-failure" />
605    </target>
606
607    <target name="_collateCheck">
608        <icu-junit test-name="collate" failure-status="icu-junit-failure">
609            <junit-fileset>
610                <fileset dir="${icu4j.collate-tests.dir}/${bin.dir}">
611                    <patternset refid="test-classes-patternset"/>
612                </fileset>
613            </junit-fileset>
614        </icu-junit>
615    </target>
616
617    <target name="collateCheck" depends="info, core, collate, currdata, langdata, regiondata, core-tests, collate-tests" description="Run only the collation tests">
618        <antcall target="_collateCheck"/>
619        <fail message="test failed" if="icu-junit-failure" />
620    </target>
621
622    <target name="_translitCheck">
623        <icu-junit test-name="translit" failure-status="icu-junit-failure">
624            <junit-fileset>
625                <fileset dir="${icu4j.translit-tests.dir}/${bin.dir}">
626                    <patternset refid="test-classes-patternset"/>
627                </fileset>
628            </junit-fileset>
629        </icu-junit>
630    </target>
631
632    <target name="translitCheck" depends="info, core, translit, translit-tests" description="Run the ICU4J Translit test suite">
633        <antcall target="_translitCheck"/>
634        <fail message="test failed" if="icu-junit-failure" />
635    </target>
636
637    <target name="_localespiCheck">
638        <icu-junit test-name="localespi"
639            classpath="junit.icu.localespi-tests.jars"
640            jvm-options="-Djava.ext.dirs=${icu4j.core.dir}/${jar.dir}${path.separator}${icu4j.localespi.dir}/${jar.dir}${path.separator}${icu4j.collate.dir}/${jar.dir}${path.separator}${icu4j.currdata.dir}/${jar.dir}${path.separator}${icu4j.langdata.dir}/${jar.dir}${path.separator}${icu4j.regiondata.dir}/${jar.dir}${path.separator}${java.ext.dirs}"
641            failure-status="icu-junit-failure">
642            <junit-fileset>
643                <fileset dir="${icu4j.localespi-tests.dir}/${bin.dir}">
644                    <patternset refid="localespiCheck-patternset"/>
645                </fileset>
646            </junit-fileset>
647        </icu-junit>
648    </target>
649
650    <target name="localespiCheck" depends="info, localespi, localespi-tests" description="Run the ICU4J Locale SPI test suite">
651        <antcall target="_localespiCheck"/>
652        <fail message="test failed" if="icu-junit-failure" />
653    </target>
654
655    <target name="secureCheck" depends="jar, icu4jtestsJar" description="Run the ICU4J test suite with Java security manager enabled">
656        <icu-junit test-name="secureCheck"
657            classpath="junit.icu.release.jars"
658            jvm-options="-Djava.security.manager -Djava.security.policy=${user.dir}/${shared.dir}/data/security.policy"
659            failure-status="icu-junit-failure">
660            <junit-fileset>
661                <zipfileset src="${icu4jtests.jar.file}">
662                    <patternset refid="test-classes-patternset"/>
663                </zipfileset>
664            </junit-fileset>
665        </icu-junit>
666        <fail message="test failed" if="icu-junit-failure" />
667    </target>
668
669    <!-- jar targets -->
670    <target name="jar" depends="icu4jJar, charset, localespi" description="Build ICU4J runtime library jar files">
671        <copy file="${icu4j.charset.jar}" tofile="${icu4j-charset.jar.file}"/>
672        <copy file="${icu4j.localespi.jar}" tofile="${icu4j-localespi.jar.file}" failonerror="false"/>
673    </target>
674
675    <target name="icu4jJar" depends="info, core, collate, currdata, langdata, regiondata, translit" description="Build ICU4J all-in-one core jar">
676        <mkdir dir="${out.dir}"/>
677
678        <!-- manifest -->
679        <copy file="manifest.stub" todir="${out.dir}">
680            <filterset>
681                <filter token="SPECVERSION" value="${jar.spec.version}"/>
682                <filter token="IMPLVERSION" value="${jar.impl.version}"/>
683                <filter token="COPYRIGHT" value="${jar.copyright.info}"/>
684                <filter token="EXECENV" value="${jar.exec.env}"/>
685            </filterset>
686        </copy>
687
688        <!-- jar -->
689        <jar jarfile="${icu4j.jar.file}"
690                compress="true"
691                manifest="${out.dir}/manifest.stub">
692            <fileset dir="${icu4j.core.dir}/${bin.dir}" includes="**/*"/>
693            <fileset dir="${icu4j.collate.dir}/${bin.dir}" includes="**/*"/>
694            <fileset dir="${icu4j.currdata.dir}/${bin.dir}" includes="**/*"/>
695            <fileset dir="${icu4j.langdata.dir}/${bin.dir}" includes="**/*"/>
696            <fileset dir="${icu4j.regiondata.dir}/${bin.dir}" includes="**/*"/>
697            <fileset dir="${icu4j.translit.dir}/${bin.dir}" includes="**/*"/>
698            <fileset dir="${shared.dir}/licenses">
699                <include name="LICENSE"/>
700            </fileset>
701        </jar>
702    </target>
703
704    <target name="icu4jSrcJar" description="Build icu4j-src.jar">
705        <jar jarfile="${icu4j-src.jar.file}"
706                compress="true">
707            <fileset dir="${icu4j.core.dir}/${src.dir}" includes="**/*.java"/>
708            <fileset dir="${icu4j.collate.dir}/${src.dir}" includes="**/*.java"/>
709            <fileset dir="${icu4j.currdata.dir}/${src.dir}" includes="**/*.java"/>
710            <fileset dir="${icu4j.langdata.dir}/${src.dir}" includes="**/*.java"/>
711            <fileset dir="${icu4j.regiondata.dir}/${src.dir}" includes="**/*.java"/>
712            <fileset dir="${icu4j.translit.dir}/${src.dir}" includes="**/*.java"/>
713            <fileset dir="${shared.dir}/licenses">
714                <include name="LICENSE"/>
715            </fileset>
716        </jar>
717    </target>
718
719    <target name="icu4jtestsJar" depends="info, tests, tools" description="Build ICU4J all-in-one test jar">
720        <jar jarfile="${icu4jtests.jar.file}"
721                compress="true">
722            <fileset dir="${icu4j.test-framework.dir}/${bin.dir}" includes="**/*"/>
723            <fileset dir="${icu4j.core-tests.dir}/${bin.dir}" includes="**/*"/>
724            <fileset dir="${icu4j.collate-tests.dir}/${bin.dir}" includes="**/*"/>
725            <fileset dir="${icu4j.translit-tests.dir}/${bin.dir}" includes="**/*"/>
726            <fileset dir="${icu4j.charset-tests.dir}/${bin.dir}" includes="**/*"/>
727            <fileset dir="${icu4j.tools.dir}/${bin.dir}" includes="com/ibm/icu/dev/tool/locale/**"/>
728        </jar>
729    </target>
730
731    <target name="jarDemos" depends="icu4jJar, demos" description="Build ICU4J demo jar file">
732        <copy file="${icu4j.demos.jar}" tofile="${icu4jdemos.jar.file}"/>
733    </target>
734
735
736    <!-- release targets -->
737    <target name="_check_config_for_release" depends="_checkJCite">
738        <condition property="release.build.config.ok">
739            <and>
740                <isset property="is.java8"/>
741                <isset property="java7.bootclasspath"/>
742                <isset property="jcite.libs"/>
743            </and>
744        </condition>
745    </target>
746
747    <target name="_verify_config_for_release" depends="_check_config_for_release" unless="release.build.config.ok">
748        <condition property="disp.is.java8" value="${java.version}" else="${java.version} - Must be 1.8!">
749            <isset property="is.java8"/>
750        </condition>
751        <condition property="disp.java7.bootclasspath" value="${java7.bootclasspath}" else="Not Defined!">
752            <isset property="java7.bootclasspath"/>
753        </condition>
754        <condition property="disp.jcite.libs" value="${jcite.libs}" else="Not Defined!">
755            <isset property="jcite.libs"/>
756        </condition>
757
758        <echo message="################################################################"/>
759        <echo message="[WARNING] Insufficient Build Configuration for ICU4J Release"/>
760        <echo message="JDK 8 Tools:                    ${disp.is.java8}"/>
761        <echo message="JRE 7 System Library Path:      ${disp.java7.bootclasspath}"/>
762        <echo message="JCite Library Path:             ${disp.jcite.libs}"/>
763        <echo message="################################################################"/>
764    </target>
765
766    <target name="_final_release_check" depends="_verify_config_for_release">
767        <fail message="Insufficient Build Configuration for ICU4J Release" unless="release.build.config.ok"/>
768
769        <fail message="Maven Ant Tasks are required to publish libraries. Set maven-ant-tasks.jar property. Maven Ant Tasks URL: http://maven.apache.org/ant-tasks/" unless="maven-ant-tasks.jar"/>
770        <condition property="no_maven-ant-tasks">
771            <available file="${maven-ant-tasks.jar}"/>
772        </condition>
773        <fail message="Maven Ant Tasks not found at ${maven-ant-tasks.jar}" unless="no_maven-ant-tasks"/>
774    </target>
775
776    <!--
777        The ant target releaseFinal is used for ICU official release.
778        This target builds ICU4J library jars, source jars and API document jars.
779        Also, this target publishes ICU4J artifacts to OSSRH staging repository.
780
781        Prerequisites
782
783        1) Apache Maven Ant tasks - http://maven.apache.org/ant-tasks
784
785        Note: Apache Maven Ant tasks was already deprecated. You can still
786        download the latest version from Maven Central
787        http://central.maven.org/maven2/org/apache/maven/maven-ant-tasks/2.1.3/maven-ant-tasks-2.1.3.jar
788
789        TODO: Because mavne-ant-tasks was already deprecated and no longer maintained,
790        we should look for alternative solution.
791
792        2) GnuPG
793
794        3) Put build-local.properties to specify followings
795
796            maven-ant-tasks.jar = [location of maven ant tasks jar file]
797            gpg.user = ICU Project
798
799        4) Maven configuration file ~/.m2/settings.xml
800            <settings>
801                <servers>
802                    <server>
803                        <id>icu4j-releases</id>
804                        <username>[oss.sonatype.org Nexus account ID]</username>
805                        <password>[oss.sonatype.org Nexus account password]</password>
806                    </server>
807                    <server>
808                        <id>icu4j-snapshots</id>
809                        <username>[oss.sonatype.org Nexus account ID]</username>
810                        <password>[oss.sonatype.org Nexus account password]</password>
811                    </server>
812                </servers>
813            </settings>
814    -->
815    <target name="releaseFinal" depends="info, _final_release_check, releaseVer, docsMaven"
816        description="Build all ICU4J release files for distribution and upload them to the OSSRH staging repository">
817
818        <property name="maven.pom.dir" value="maven"/>
819        <property name="maven.icu4j.release.dir" value="${release.dir}/maven/icu4j"/>
820        <property name="maven.charset.release.dir" value="${release.dir}/maven/icu4j-charset"/>
821        <property name="maven.localespi.release.dir" value="${release.dir}/maven/icu4j-localespi"/>
822
823        <property name="maven.icu4j.jar.file" value="icu4j-${maven.pom.ver}.jar"/>
824        <property name="maven.icu4j.src.jar.file" value="icu4j-${maven.pom.ver}-sources.jar"/>
825        <property name="maven.icu4j.doc.jar.file" value="icu4j-${maven.pom.ver}-javadoc.jar"/>
826
827        <property name="maven.charset.jar.file" value="icu4j-charset-${maven.pom.ver}.jar"/>
828        <property name="maven.charset.src.jar.file" value="icu4j-charset-${maven.pom.ver}-sources.jar"/>
829        <property name="maven.charset.doc.jar.file" value="icu4j-charset-${maven.pom.ver}-javadoc.jar"/>
830
831        <property name="maven.localespi.jar.file" value="icu4j-localespi-${maven.pom.ver}.jar"/>
832        <property name="maven.localespi.src.jar.file" value="icu4j-localespi-${maven.pom.ver}-sources.jar"/>
833        <property name="maven.localespi.doc.jar.file" value="icu4j-localespi-${maven.pom.ver}-javadoc.jar"/>
834
835
836        <delete dir="${release.dir}/maven"/>
837        <mkdir dir="${maven.icu4j.release.dir}"/>
838        <mkdir dir="${maven.charset.release.dir}"/>
839        <mkdir dir="${maven.localespi.release.dir}"/>
840
841
842        <!-- copy pom.xml with version -->
843        <copy file="${maven.pom.dir}/icu4j/pom.xml" todir="${maven.icu4j.release.dir}">
844            <filterset>
845                <filter token="POMVERSION" value="${maven.pom.ver}"/>
846            </filterset>
847        </copy>
848        <copy file="${maven.pom.dir}/icu4j-charset/pom.xml" todir="${maven.charset.release.dir}">
849            <filterset>
850                <filter token="POMVERSION" value="${maven.pom.ver}"/>
851            </filterset>
852        </copy>
853        <copy file="${maven.pom.dir}/icu4j-localespi/pom.xml" todir="${maven.localespi.release.dir}">
854            <filterset>
855                <filter token="POMVERSION" value="${maven.pom.ver}"/>
856            </filterset>
857        </copy>
858
859        <!-- copy ICU release binaries and source archive to the maven release directory -->
860        <copy file="${release.dir}/${icu4j.jar.versioned.file}"
861            tofile="${maven.icu4j.release.dir}/${maven.icu4j.jar.file}"/>
862        <copy file="${release.dir}/${icu4j-charset.jar.versioned.file}"
863            tofile="${maven.charset.release.dir}/${maven.charset.jar.file}"/>
864        <copy file="${release.dir}/${icu4j-localespi.jar.versioned.file}"
865            tofile="${maven.localespi.release.dir}/${maven.localespi.jar.file}"/>
866
867        <copy file="${release.dir}/${icu4j-src.jar.versioned.file}"
868            tofile="${maven.icu4j.release.dir}/${maven.icu4j.src.jar.file}"/>
869        <copy file="${release.dir}/${icu4j-charset-src.jar.versioned.file}"
870            tofile="${maven.charset.release.dir}/${maven.charset.src.jar.file}"/>
871        <copy file="${release.dir}/${icu4j-localespi-src.jar.versioned.file}"
872            tofile="${maven.localespi.release.dir}/${maven.localespi.src.jar.file}"/>
873
874        <!-- javadoc jar for maven release -->
875        <jar jarfile="${maven.icu4j.release.dir}/${maven.icu4j.doc.jar.file}"
876            compress="true"
877            basedir="${maven.doc.base.dir}/icu4j"/>
878        <jar jarfile="${maven.charset.release.dir}/${maven.charset.doc.jar.file}"
879            compress="true"
880            basedir="${maven.doc.base.dir}/charset"/>
881        <jar jarfile="${maven.localespi.release.dir}/${maven.localespi.doc.jar.file}"
882            compress="true"
883            basedir="${maven.doc.base.dir}/localespi"/>
884
885        <!-- sign release files-->
886        <macrodef name="gpg">
887            <attribute name="file"/>
888            <sequential>
889                <delete file="@{file}.asc" failonerror="false"/>
890                <exec executable="gpg">
891                    <arg value="-u"/>
892                    <arg value="${gpg.user}"/>
893                    <arg value="-ab"/>
894                    <arg value="-o"/>
895                    <arg value="@{file}.asc"/>
896                    <arg value="@{file}"/>
897                </exec>
898            </sequential>
899        </macrodef>
900
901        <gpg file="${maven.icu4j.release.dir}/pom.xml"/>
902        <gpg file="${maven.icu4j.release.dir}/${maven.icu4j.jar.file}"/>
903        <gpg file="${maven.icu4j.release.dir}/${maven.icu4j.src.jar.file}"/>
904        <gpg file="${maven.icu4j.release.dir}/${maven.icu4j.doc.jar.file}"/>
905
906        <gpg file="${maven.charset.release.dir}/pom.xml"/>
907        <gpg file="${maven.charset.release.dir}/${maven.charset.jar.file}"/>
908        <gpg file="${maven.charset.release.dir}/${maven.charset.src.jar.file}"/>
909        <gpg file="${maven.charset.release.dir}/${maven.charset.doc.jar.file}"/>
910
911        <gpg file="${maven.localespi.release.dir}/pom.xml"/>
912        <gpg file="${maven.localespi.release.dir}/${maven.localespi.jar.file}"/>
913        <gpg file="${maven.localespi.release.dir}/${maven.localespi.src.jar.file}"/>
914        <gpg file="${maven.localespi.release.dir}/${maven.localespi.doc.jar.file}"/>
915
916        <!-- deploy ICU4J artifacts to the OSSRH staging repository -->
917        <path id="maven-ant-tasks.classpath" path="${maven-ant-tasks.jar}"/>
918        <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant"
919            classpathref="maven-ant-tasks.classpath"/>
920
921        <deploy xmlns="urn:maven-artifact-ant" file="${maven.icu4j.release.dir}/${maven.icu4j.jar.file}">
922            <pom file="${maven.icu4j.release.dir}/pom.xml"/>
923            <attach file="${maven.icu4j.release.dir}/pom.xml.asc" type="pom.asc"/>
924            <attach file="${maven.icu4j.release.dir}/${maven.icu4j.jar.file}.asc" type="jar.asc"/>
925            <attach file="${maven.icu4j.release.dir}/${maven.icu4j.src.jar.file}" classifier="sources"/>
926            <attach file="${maven.icu4j.release.dir}/${maven.icu4j.src.jar.file}.asc" classifier="sources" type="jar.asc"/>
927            <attach file="${maven.icu4j.release.dir}/${maven.icu4j.doc.jar.file}" classifier="javadoc"/>
928            <attach file="${maven.icu4j.release.dir}/${maven.icu4j.doc.jar.file}.asc" classifier="javadoc" type="jar.asc"/>
929        </deploy>
930
931        <deploy xmlns="urn:maven-artifact-ant" file="${maven.charset.release.dir}/${maven.charset.jar.file}">
932            <pom file="${maven.charset.release.dir}/pom.xml"/>
933            <attach file="${maven.charset.release.dir}/pom.xml.asc" type="pom.asc"/>
934            <attach file="${maven.charset.release.dir}/${maven.charset.jar.file}.asc" type="jar.asc"/>
935            <attach file="${maven.charset.release.dir}/${maven.charset.src.jar.file}" classifier="sources"/>
936            <attach file="${maven.charset.release.dir}/${maven.charset.src.jar.file}.asc" classifier="sources" type="jar.asc"/>
937            <attach file="${maven.charset.release.dir}/${maven.charset.doc.jar.file}" classifier="javadoc"/>
938            <attach file="${maven.charset.release.dir}/${maven.charset.doc.jar.file}.asc" classifier="javadoc" type="jar.asc"/>
939        </deploy>
940
941        <deploy xmlns="urn:maven-artifact-ant" file="${maven.localespi.release.dir}/${maven.localespi.jar.file}">
942            <pom file="${maven.localespi.release.dir}/pom.xml"/>
943            <attach file="${maven.localespi.release.dir}/pom.xml.asc" type="pom.asc"/>
944            <attach file="${maven.localespi.release.dir}/${maven.localespi.jar.file}.asc" type="jar.asc"/>
945            <attach file="${maven.localespi.release.dir}/${maven.localespi.src.jar.file}" classifier="sources"/>
946            <attach file="${maven.localespi.release.dir}/${maven.localespi.src.jar.file}.asc" classifier="sources" type="jar.asc"/>
947            <attach file="${maven.localespi.release.dir}/${maven.localespi.doc.jar.file}" classifier="javadoc"/>
948            <attach file="${maven.localespi.release.dir}/${maven.localespi.doc.jar.file}.asc" classifier="javadoc" type="jar.asc"/>
949        </deploy>
950    </target>
951
952    <target name="releaseVer" depends="info, releaseBinaries, releaseJarCheck, releaseSrcJars, releaseDocs, releaseSourceArchiveTgz"
953            description="Build all ICU4J release files for distribution with versioned file names">
954        <!-- binaries -->
955        <move file="${release.dir}/${icu4j.jar.file}" tofile="${release.dir}/${icu4j.jar.versioned.file}"/>
956        <move file="${release.dir}/${icu4j-charset.jar.file}" tofile="${release.dir}/${icu4j-charset.jar.versioned.file}"/>
957        <move file="${release.dir}/${icu4j-localespi.jar.file}" tofile="${release.dir}/${icu4j-localespi.jar.versioned.file}"/>
958
959        <!-- source jars -->
960        <move file="${release.dir}/${icu4j-src.jar.file}" tofile="${release.dir}/${icu4j-src.jar.versioned.file}"/>
961        <move file="${release.dir}/${icu4j-charset-src.jar.file}" tofile="${release.dir}/${icu4j-charset-src.jar.versioned.file}"/>
962        <move file="${release.dir}/${icu4j-localespi-src.jar.file}" tofile="${release.dir}/${icu4j-localespi-src.jar.versioned.file}"/>
963
964        <!-- docs -->
965        <move file="${release.dir}/${icu4jdocs.jar.file}" tofile="${release.dir}/${icu4jdocs.jar.versioned.file}"/>
966
967        <!-- package archive -->
968        <move file="${release.dir}/${icu4jsrc.tgz.file}" tofile="${release.dir}/${icu4jsrc.tgz.versioned.file}"/>
969
970        <!-- md5 checksum file -->
971        <mkdir dir="${out.dir}/checksum"/>
972        <delete dir="${out.dir}/checksum" includes="**/*"/>
973
974        <checksum todir="${out.dir}/checksum" format="MD5SUM">
975            <fileset dir="${release.dir}">
976                <include name="*.jar"/>
977                <include name="*.tgz"/>
978            </fileset>
979        </checksum>
980
981        <concat destfile="${release.dir}/icu4j-${release.file.ver}.md5">
982            <fileset dir="${out.dir}/checksum" includes="*"/>
983            <filterchain>
984                <fixcrlf eol="lf"/>
985            </filterchain>
986        </concat>
987
988        <antcall target="_verify_config_for_release"/>
989    </target>
990
991    <target name="release" depends="info, releaseBinaries, releaseSrcJars, releaseDocs, releaseSourceArchiveTgz" description="Build all ICU4J release files for distribution">
992        <mkdir dir="${out.dir}/checksum"/>
993        <delete dir="${out.dir}/checksum" includes="**/*"/>
994
995        <checksum todir="${out.dir}/checksum" format="MD5SUM">
996            <fileset dir="${release.dir}">
997                <include name="*.jar"/>
998                <include name="*.tgz"/>
999            </fileset>
1000        </checksum>
1001
1002        <concat destfile="${release.dir}/icu4j.md5">
1003            <fileset dir="${out.dir}/checksum" includes="*"/>
1004            <filterchain>
1005                <fixcrlf eol="lf"/>
1006            </filterchain>
1007        </concat>
1008
1009        <antcall target="_verify_config_for_release"/>
1010    </target>
1011
1012    <target name="releaseBinaries" depends="icu4jJar, charset, localespi" description="Build ICU4J binary files for distribution">
1013        <mkdir dir="${release.dir}"/>
1014        <copy file="${icu4j.jar.file}" tofile="${release.dir}/${icu4j.jar.file}"/>
1015        <copy file="${icu4j.charset.jar}" tofile="${release.dir}/${icu4j-charset.jar.file}"/>
1016        <copy file="${icu4j.localespi.jar}" tofile="${release.dir}/${icu4j-localespi.jar.file}"/>
1017    </target>
1018
1019    <target name="releaseSrcJars" depends="icu4jSrcJar" description="Build ICU4J src jar files for distribution">
1020        <mkdir dir="${release.dir}"/>
1021
1022        <!-- icu4j src-jar -->
1023        <copy file="${icu4j-src.jar.file}" tofile="${release.dir}/${icu4j-src.jar.file}"/>
1024
1025        <!-- charset/localespi src-jar -->
1026        <ant dir="${icu4j.charset.dir}" target="src-jar" inheritAll="false"/>
1027        <ant dir="${icu4j.localespi.dir}" target="src-jar" inheritAll="false"/>
1028
1029        <copy file="${icu4j.charset.dir}/${out.dir}/lib/${icu4j-charset-src.jar.file}" tofile="${release.dir}/${icu4j-charset-src.jar.file}"/>
1030        <copy file="${icu4j.localespi.dir}/${out.dir}/lib/${icu4j-localespi-src.jar.file}" tofile="${release.dir}/${icu4j-localespi-src.jar.file}"/>
1031    </target>
1032
1033
1034    <target name="releaseDocs" depends="docs" description="Build ICU4J API reference doc jar file for distribution">
1035        <mkdir dir="${release.dir}"/>
1036        <jar jarfile="${release.dir}/${icu4jdocs.jar.file}" compress="true" basedir="${doc.dir}"/>
1037    </target>
1038
1039    <property name="src.release.wrk.dir" value="${out.dir}/tmpsrc"/>
1040
1041    <target name="releaseSourceArchiveZip" description="Build ICU4J source release archive (.zip)">
1042        <delete dir="${src.release.wrk.dir}"/>
1043        <delete file="${icu4jsrc.zip.file}"/>
1044
1045        <mkdir dir="${src.release.wrk.dir}"/>
1046
1047        <fixcrlf srcdir="."
1048                destdir="${src.release.wrk.dir}"
1049                encoding="UTF-8"
1050                eol="crlf">
1051            <include name="demos/**/*"/>
1052            <include name="main/**/*"/>
1053            <include name="perf-tests/**/*"/>
1054            <include name="samples/**/*"/>
1055            <include name="tools/**/*"/>
1056            <include name="*.html"/>
1057            <include name="*.xml"/>
1058            <include name="*.properties"/>
1059            <include name="*.css"/>
1060            <include name="*.stub"/>
1061            <exclude name="**/out/**/*"/>
1062            <exclude name="**/*.jar"/>
1063            <exclude name="**/build-local.properties"/>
1064            <exclude name="main/tests/core/src/com/ibm/icu/dev/test/serializable/data/**/*.dat"/>
1065            <exclude name="main/tests/core/src/com/ibm/icu/dev/test/util/Trie2Test.*.tri2"/>
1066            <exclude name="tools/build/icu4j*.api*.gz"/>
1067        </fixcrlf>
1068
1069        <mkdir dir="${release.dir}"/>
1070        <zip destfile="${release.dir}/${icu4jsrc.zip.file}">
1071            <fileset dir="${src.release.wrk.dir}" includes="**/*"/>
1072            <fileset dir="${basedir}">
1073                <include name="main/shared/data/*.jar"/>
1074                <include name="main/tests/core/src/com/ibm/icu/dev/test/serializable/data/**/*.dat"/>
1075                <include name="main/tests/core/src/com/ibm/icu/dev/test/util/Trie2Test.*.tri2"/>
1076                <include name="tools/build/icu4j*.api*.gz"/>
1077            </fileset>
1078        </zip>
1079
1080        <delete dir="${src.release.wrk.dir}"/>
1081    </target>
1082
1083    <target name="releaseSourceArchiveTgz" description="Build ICU4J source release archive (.tgz)">
1084        <delete dir="${src.release.wrk.dir}"/>
1085        <delete file="${icu4jsrc.tgz.file}"/>
1086
1087        <mkdir dir="${src.release.wrk.dir}"/>
1088
1089        <fixcrlf srcdir="."
1090                destdir="${src.release.wrk.dir}"
1091                encoding="UTF-8"
1092                eol="lf">
1093            <include name="demos/**/*"/>
1094            <include name="main/**/*"/>
1095            <include name="maven/**/*"/>
1096            <include name="perf-tests/**/*"/>
1097            <include name="samples/**/*"/>
1098            <include name="tools/**/*"/>
1099            <include name="*.html"/>
1100            <include name="*.xml"/>
1101            <include name="*.properties"/>
1102            <include name="*.css"/>
1103            <include name="*.stub"/>
1104            <exclude name="**/out/**/*"/>
1105            <exclude name="**/*.jar"/>
1106            <exclude name="**/build-local.properties"/>
1107            <exclude name="main/tests/core/src/com/ibm/icu/dev/test/serializable/data/**/*.dat"/>
1108            <exclude name="main/tests/core/src/com/ibm/icu/dev/test/util/Trie2Test.*.tri2"/>
1109            <exclude name="tools/build/icu4j*.api*.gz"/>
1110        </fixcrlf>
1111
1112        <property name="icu4jsrc.tar" value="${out.dir}/icu4jsrc.tar"/>
1113
1114        <tar destfile="${icu4jsrc.tar}" longfile="gnu">
1115            <fileset dir="${src.release.wrk.dir}" includes="**/*"/>
1116            <fileset dir="${basedir}">
1117                <include name="main/shared/data/*.jar"/>
1118                <include name="main/tests/core/src/com/ibm/icu/dev/test/serializable/data/**/*.dat"/>
1119                <include name="main/tests/core/src/com/ibm/icu/dev/test/util/Trie2Test.*.tri2"/>
1120                <include name="tools/build/icu4j*.api*.gz"/>
1121            </fileset>
1122        </tar>
1123
1124        <mkdir dir="${release.dir}"/>
1125        <gzip destfile="${release.dir}/${icu4jsrc.tgz.file}" src="${icu4jsrc.tar}"/>
1126
1127        <delete dir="${src.release.wrk.dir}"/>
1128        <delete file="${icu4jsrc.tar}"/>
1129    </target>
1130
1131    <!-- findbugs targets -->
1132
1133    <target name="findbugs" description="Run FindBugs on all library sub projects.">
1134        <property name="findbugs.out.dir" value="${out.dir}/findbugs"/>
1135        <mkdir dir="${findbugs.out.dir}"/>
1136
1137        <ant dir="${icu4j.core.dir}" inheritAll="false" target="findbugs"/>
1138        <copy file="${icu4j.core.dir}/${out.dir}/fb-core.html" todir="${findbugs.out.dir}"/>
1139
1140        <ant dir="${icu4j.collate.dir}" inheritAll="false" target="findbugs"/>
1141        <copy file="${icu4j.collate.dir}/${out.dir}/fb-collate.html" todir="${findbugs.out.dir}"/>
1142
1143        <ant dir="${icu4j.currdata.dir}" inheritAll="false" target="findbugs"/>
1144        <copy file="${icu4j.currdata.dir}/${out.dir}/fb-currdata.html" todir="${findbugs.out.dir}"/>
1145
1146        <ant dir="${icu4j.langdata.dir}" inheritAll="false" target="findbugs"/>
1147        <copy file="${icu4j.langdata.dir}/${out.dir}/fb-langdata.html" todir="${findbugs.out.dir}"/>
1148
1149        <ant dir="${icu4j.regiondata.dir}" inheritAll="false" target="findbugs"/>
1150        <copy file="${icu4j.regiondata.dir}/${out.dir}/fb-regiondata.html" todir="${findbugs.out.dir}"/>
1151
1152        <ant dir="${icu4j.translit.dir}" inheritAll="false" target="findbugs"/>
1153        <copy file="${icu4j.translit.dir}/${out.dir}/fb-translit.html" todir="${findbugs.out.dir}"/>
1154
1155
1156        <ant dir="${icu4j.charset.dir}" inheritAll="false" target="findbugs"/>
1157        <copy file="${icu4j.charset.dir}/${out.dir}/fb-charset.html" todir="${findbugs.out.dir}"/>
1158
1159        <ant dir="${icu4j.localespi.dir}" inheritAll="false" target="findbugs"/>
1160        <copy file="${icu4j.localespi.dir}/${out.dir}/fb-localespi.html" todir="${findbugs.out.dir}"/>
1161    </target>
1162
1163    <!-- compile targets -->
1164    <target name="core" description="Build core classes">
1165        <ant dir="${icu4j.core.dir}" inheritAll="false"/>
1166    </target>
1167
1168    <target name="collate" depends="core" description="Build collation classes">
1169        <ant dir="${icu4j.collate.dir}" inheritAll="false"/>
1170    </target>
1171
1172    <target name="charset" depends="core" description="Build charset classes">
1173        <ant dir="${icu4j.charset.dir}" inheritAll="false"/>
1174    </target>
1175
1176    <target name="currdata" depends="core" description="Build currency data classes">
1177        <ant dir="${icu4j.currdata.dir}" inheritAll="false"/>
1178    </target>
1179
1180    <target name="langdata" depends="core" description="Build language data classes">
1181        <ant dir="${icu4j.langdata.dir}" inheritAll="false"/>
1182    </target>
1183
1184    <target name="localespi" depends="core, collate, currdata, langdata, regiondata" description="Build Locale SPI classes">
1185        <ant dir="${icu4j.localespi.dir}" inheritAll="false"/>
1186    </target>
1187
1188    <target name="regiondata" depends="core" description="Build region data classes">
1189        <ant dir="${icu4j.regiondata.dir}" inheritAll="false"/>
1190    </target>
1191
1192    <target name="translit" depends="core" description="Build translit classes">
1193        <ant dir="${icu4j.translit.dir}" inheritAll="false"/>
1194    </target>
1195
1196    <target name="test-framework" depends="core, init" description="Build test framework classes">
1197        <ant dir="${icu4j.test-framework.dir}" inheritAll="false">
1198            <reference refid="junit.jars"/>
1199        </ant>
1200    </target>
1201
1202    <target name="core-tests" depends="core, test-framework, tools" description="Build core tests">
1203        <ant dir="${icu4j.core-tests.dir}" inheritAll="false">
1204            <reference refid="junit.jars"/>
1205        </ant>
1206    </target>
1207
1208    <target name="collate-tests" depends="collate, test-framework" description="Build core tests">
1209        <ant dir="${icu4j.collate-tests.dir}" inheritAll="false">
1210            <reference refid="junit.jars"/>
1211        </ant>
1212    </target>
1213
1214    <target name="charset-tests" depends="charset, test-framework" description="Build charset tests">
1215        <ant dir="${icu4j.charset-tests.dir}" inheritAll="false">
1216            <reference refid="junit.jars"/>
1217        </ant>
1218    </target>
1219
1220    <target name="localespi-tests" depends="localespi, test-framework" description="Build Locale SPI tests">
1221        <ant dir="${icu4j.localespi-tests.dir}" inheritAll="false">
1222            <reference refid="junit.jars"/>
1223        </ant>
1224    </target>
1225
1226    <target name="packaging-tests" depends="test-framework" description="Build packaging tests">
1227        <ant dir="${icu4j.packaging-tests.dir}" inheritAll="false">
1228            <reference refid="junit.jars"/>
1229        </ant>
1230    </target>
1231
1232    <target name="translit-tests" depends="translit, test-framework" description="Build translit tests">
1233        <ant dir="${icu4j.translit-tests.dir}" inheritAll="false">
1234            <reference refid="junit.jars"/>
1235        </ant>
1236    </target>
1237
1238    <target name="demos" depends="core, charset, translit" description="Build demo classes">
1239        <ant dir="${icu4j.demos.dir}" inheritAll="false"/>
1240    </target>
1241
1242    <target name="samples" depends="core, charset, collate, translit" description="Build sample classes">
1243        <ant dir="${icu4j.samples.dir}" inheritAll="false"/>
1244    </target>
1245
1246    <target name="build-tools" description="Build build-tool classes">
1247        <ant dir="${icu4j.build-tools.dir}" inheritAll="false"/>
1248    </target>
1249
1250    <target name="tools" depends="core, collate, translit" description="Build tool classes">
1251        <ant dir="${icu4j.tools.dir}" inheritAll="false"/>
1252    </target>
1253
1254    <target name="perf-tests" depends="core, charset, collate, tools" description="Build performance test classes">
1255        <ant dir="${icu4j.perf-tests.dir}" inheritAll="false"/>
1256    </target>
1257
1258    <!-- doc targets -->
1259    <target name="docs" depends="info, build-tools, _checkJCite, _docsWithJCite, _docsWithoutJCite" description="Build API documents"/>
1260
1261    <target name="docsStrict" description="Build API documents with all doclint check enabled">
1262        <condition property="doclint.option" value="-Xdoclint:all">
1263            <isset property="is.java8.plus"/>
1264        </condition>
1265        <antcall target="docs"/>
1266    </target>
1267
1268    <target name="_checkJCite" if="env.JCITE_DIR">
1269        <fileset dir="${env.JCITE_DIR}" id="jcite.files">
1270            <include name="build/*.jar"/>
1271            <include name="lib/*.jar"/>
1272        </fileset>
1273        <pathconvert property="jcite.libs" refid="jcite.files"/>
1274
1275        <dirset dir="${basedir}" id="jcite.src.dirs">
1276            <include name="samples/src"/>
1277            <include name="demos/src"/>
1278            <include name="main/tests/*/src"/>
1279        </dirset>
1280        <pathconvert property="jcite.addl.src" refid="jcite.src.dirs"/>
1281    </target>
1282
1283    <target name="_docsStyleSheet">
1284        <condition property="docs.style.sheet" value="stylesheet7.css">
1285            <isset property="is.java7"/>
1286        </condition>
1287        <!-- all other cases -->
1288        <property name="docs.style.sheet" value="stylesheet8.css"/>
1289    </target>
1290
1291    <target name="_docsLintOption" unless="doclint.options">
1292        <!-- syntax check is disabled because JCite tag name "@.jcite" is invalidated -->
1293        <condition property="doclint.option" value="-Xdoclint:reference,html" else="">
1294            <isset property="is.java8.plus"/>
1295        </condition>
1296    </target>
1297
1298    <target name="_docsWithJCite" depends="_docsStyleSheet, _docsLintOption" if="jcite.libs">
1299        <echo message="Javadoc lint option:            ${doclint.option}"/>
1300        <echo message="JCite library path:             ${jcite.libs}"/>
1301        <echo message="JCite additional source path:   ${jcite.addl.src}"/>
1302        <echo message="Custom stylesheet:              ${docs.style.sheet}"/>
1303        <javadoc
1304                destdir="${doc.dir}"
1305                nodeprecatedlist="true"
1306                windowtitle="${icu4j.api.doc.window.title}"
1307                doctitle="${icu4j.api.doc.title}"
1308                header="${icu4j.api.doc.header}"
1309                encoding="${java.src.encoding}"
1310                docencoding="UTF-8"
1311                charset="UTF-8"
1312                bottom="${icu4j.api.doc.copyright.footer}"
1313                additionalparam="${doclint.option} -breakiterator -use -tagletpath ${icu4j.build-tools.jar}${path.separator}${jcite.libs} -taglet com.ibm.icu.dev.tool.docs.ICUTaglet -taglet ch.arrenbrecht.jcite.JCiteTaglet -J-Djcitesourcepath=${jcite.addl.src} -J-Dfile.encoding=UTF-8"
1314                link="${icu4j.api.doc.jdk.link}"
1315                source="1.7"
1316                stylesheetfile="${docs.style.sheet}"
1317                failonerror="true">
1318            <packageset dir="${icu4j.core.dir}/src">
1319                <include name="com/ibm/icu/lang/**"/>
1320                <include name="com/ibm/icu/math/**"/>
1321                <include name="com/ibm/icu/number/**"/>
1322                <include name="com/ibm/icu/text/**"/>
1323                <include name="com/ibm/icu/util/**"/>
1324            </packageset>
1325            <packageset dir="${icu4j.collate.dir}/src">
1326                <include name="com/ibm/icu/text/**"/>
1327            </packageset>
1328            <packageset dir="${icu4j.translit.dir}/src">
1329                <include name="com/ibm/icu/text/**"/>
1330            </packageset>
1331            <packageset dir="${icu4j.charset.dir}/src">
1332                <include name="com/ibm/icu/charset/**"/>
1333            </packageset>
1334        </javadoc>
1335    </target>
1336
1337    <target name="_docsWithoutJCite" depends="_docsStyleSheet, _docsLintOption" unless="jcite.libs">
1338        <echo message="Javadoc lint option:            ${doclint.option}"/>
1339        <javadoc
1340                destdir="${doc.dir}"
1341                nodeprecatedlist="true"
1342                windowtitle="${icu4j.api.doc.window.title}"
1343                doctitle="${icu4j.api.doc.title}"
1344                header="${icu4j.api.doc.header}"
1345                encoding="${java.src.encoding}"
1346                docencoding="UTF-8"
1347                charset="UTF-8"
1348                bottom="${icu4j.api.doc.copyright.footer}"
1349                additionalparam="${doclint.option} -breakiterator -use -tagletpath ${icu4j.build-tools.jar} -taglet com.ibm.icu.dev.tool.docs.ICUTaglet"
1350                link="${icu4j.api.doc.jdk.link}"
1351                source="1.7"
1352                failonerror="true">
1353            <packageset dir="${icu4j.core.dir}/src">
1354                <include name="com/ibm/icu/lang/**"/>
1355                <include name="com/ibm/icu/math/**"/>
1356                <include name="com/ibm/icu/number/**"/>
1357                <include name="com/ibm/icu/text/**"/>
1358                <include name="com/ibm/icu/util/**"/>
1359            </packageset>
1360            <packageset dir="${icu4j.collate.dir}/src">
1361                <include name="com/ibm/icu/text/**"/>
1362            </packageset>
1363            <packageset dir="${icu4j.translit.dir}/src">
1364                <include name="com/ibm/icu/text/**"/>
1365            </packageset>
1366            <packageset dir="${icu4j.charset.dir}/src">
1367                <include name="com/ibm/icu/charset/**"/>
1368            </packageset>
1369        </javadoc>
1370    </target>
1371
1372    <!-- Component document targets, only used for Maven repository releases -->
1373    <target name="docsMaven" depends="info, build-tools, _checkJCite, _docsStyleSheet, _docsLintOption, _mavenIcu4jDoc, _mavenCharsetDoc, _mavenLocalespiDoc"
1374        description="Build API docs for each ICU4J maven artifact"/>
1375
1376    <target name="_mavenIcu4jDoc">
1377        <fail message="JCite must be configured." unless="jcite.libs"/>
1378        <delete dir="${maven.doc.base.dir}/icu4j"/>
1379
1380        <echo message="Javadoc lint option:            ${doclint.option}"/>
1381        <echo message="JCite library path:             ${jcite.libs}"/>
1382        <echo message="JCite additional source path:   ${jcite.addl.src}"/>
1383        <echo message="Custom stylesheet:              ${docs.style.sheet}"/>
1384        <javadoc
1385                destdir="${maven.doc.base.dir}/icu4j"
1386                nodeprecatedlist="true"
1387                windowtitle="${icu4j.main.api.doc.window.title}"
1388                doctitle="${icu4j.main.api.doc.title}"
1389                header="${icu4j.main.api.doc.header}"
1390                encoding="${java.src.encoding}"
1391                docencoding="UTF-8"
1392                charset="UTF-8"
1393                bottom="${icu4j.api.doc.copyright.footer}"
1394                additionalparam="${doclint.option} -breakiterator -use -tagletpath ${icu4j.build-tools.jar}${path.separator}${jcite.libs} -taglet com.ibm.icu.dev.tool.docs.ICUTaglet -taglet ch.arrenbrecht.jcite.JCiteTaglet -J-Djcitesourcepath=${jcite.addl.src} -J-Dfile.encoding=UTF-8"
1395                link="${icu4j.api.doc.jdk.link}"
1396                source="1.7"
1397                stylesheetfile="${docs.style.sheet}"
1398                failonerror="true">
1399            <packageset dir="${icu4j.core.dir}/src">
1400                <include name="com/ibm/icu/lang/**"/>
1401                <include name="com/ibm/icu/math/**"/>
1402                <include name="com/ibm/icu/number/**"/>
1403                <include name="com/ibm/icu/text/**"/>
1404                <include name="com/ibm/icu/util/**"/>
1405            </packageset>
1406            <packageset dir="${icu4j.collate.dir}/src">
1407                <include name="com/ibm/icu/text/**"/>
1408            </packageset>
1409            <packageset dir="${icu4j.translit.dir}/src">
1410                <include name="com/ibm/icu/text/**"/>
1411            </packageset>
1412        </javadoc>
1413    </target>
1414
1415    <target name="_mavenCharsetDoc">
1416        <fail message="JCite must be configured." unless="jcite.libs"/>
1417        <delete dir="${maven.doc.base.dir}/charset"/>
1418
1419        <echo message="Javadoc lint option:            ${doclint.option}"/>
1420        <echo message="JCite library path:             ${jcite.libs}"/>
1421        <echo message="JCite additional source path:   ${jcite.addl.src}"/>
1422        <echo message="Custom stylesheet:              ${docs.style.sheet}"/>
1423        <javadoc
1424                destdir="${maven.doc.base.dir}/charset"
1425                nodeprecatedlist="true"
1426                windowtitle="${icu4j.charset.api.doc.window.title}"
1427                doctitle="${icu4j.charset.api.doc.title}"
1428                header="${icu4j.charset.api.doc.header}"
1429                encoding="${java.src.encoding}"
1430                docencoding="UTF-8"
1431                charset="UTF-8"
1432                bottom="${icu4j.api.doc.copyright.footer}"
1433                additionalparam="${doclint.option} -breakiterator -use -tagletpath ${icu4j.build-tools.jar}${path.separator}${jcite.libs} -taglet com.ibm.icu.dev.tool.docs.ICUTaglet -taglet ch.arrenbrecht.jcite.JCiteTaglet -J-Djcitesourcepath=${jcite.addl.src} -J-Dfile.encoding=UTF-8"
1434                link="${icu4j.api.doc.jdk.link}"
1435                source="1.7"
1436                stylesheetfile="${docs.style.sheet}"
1437                failonerror="true"
1438                classpath="${icu4j.jar.file}">
1439            <packageset dir="${icu4j.charset.dir}/src">
1440                <include name="com/ibm/icu/charset/**"/>
1441            </packageset>
1442        </javadoc>
1443    </target>
1444
1445    <target name="_mavenLocalespiDoc">
1446        <delete dir="${maven.doc.base.dir}/localespi"/>
1447
1448        <echo message="Javadoc lint option:            ${doclint.option}"/>
1449        <echo message="Custom stylesheet:              ${docs.style.sheet}"/>
1450        <javadoc
1451                destdir="${maven.doc.base.dir}/localespi"
1452                nodeprecatedlist="true"
1453                windowtitle="${icu4j.localespi.api.doc.window.title}"
1454                doctitle="${icu4j.localespi.api.doc.title}"
1455                header="${icu4j.localespi.api.doc.header}"
1456                encoding="${java.src.encoding}"
1457                docencoding="UTF-8"
1458                charset="UTF-8"
1459                bottom="${icu4j.api.doc.copyright.footer}"
1460                additionalparam="${doclint.option} -breakiterator -use"
1461                link="${icu4j.api.doc.jdk.link}"
1462                source="1.7"
1463                failonerror="true"
1464                classpath="${icu4j.jar.file}">
1465            <packageset dir="${icu4j.localespi.dir}/src">
1466                <include name="com/ibm/icu/impl/javaspi"/>
1467            </packageset>
1468        </javadoc>
1469
1470    </target>
1471
1472
1473    <!-- JaCoCo code coverage target -->
1474    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" onerror="ignore">
1475        <classpath path="${env.JACOCO_DIR}/lib/jacocoant.jar"/>
1476    </taskdef>
1477
1478    <target name="coverageJaCoCo" depends="build-tools, jar, tests" description="Run the ICU4J unit tests and generate code coverage report">
1479        <property name="jacoco.out.dir" value="${out.dir}/jacoco"/>
1480        <property name="jacoco.exec.data.file" value="${jacoco.out.dir}/jacoco.exec"/>
1481        <property name="jacoco.report.html.zip" value="${jacoco.out.dir}/report_html.zip"/>
1482        <property name="jacoco.report.xml" value="${jacoco.out.dir}/report.xml"/>
1483        <property name="jacoco.report.csv" value="${jacoco.out.dir}/report.csv"/>
1484        <property name="jacoco.exclusion.txt" value="coverage-exclusion.txt"/>
1485
1486        <delete dir="${jacoco.out.dir}"/>
1487        <mkdir dir="${jacoco.out.dir}"/>
1488
1489        <!-- core -->
1490        <jacoco:coverage destfile="${jacoco.exec.data.file}">
1491            <junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="no">
1492                <jvmarg value="-ea"/>
1493                <jvmarg value="-Djava.awt.headless=true"/>
1494                <classpath>
1495                    <path refid="junit.jars"/>
1496                    <path refid="junit.icu.jars"/>
1497                </classpath>
1498
1499                <batchtest todir="${junit.out.dir}/core">
1500                    <fileset dir="${icu4j.core-tests.dir}/${bin.dir}">
1501                        <patternset refid="test-classes-patternset"/>
1502                    </fileset>
1503                </batchtest>
1504            </junit>
1505        </jacoco:coverage>
1506
1507        <!-- charset -->
1508        <jacoco:coverage destfile="${jacoco.exec.data.file}">
1509            <junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="no">
1510                <jvmarg value="-ea"/>
1511                <jvmarg value="-Djava.awt.headless=true"/>
1512                <classpath>
1513                    <path refid="junit.jars"/>
1514                    <path refid="junit.icu.jars"/>
1515                </classpath>
1516
1517                <batchtest todir="${junit.out.dir}/charset">
1518                    <fileset dir="${icu4j.charset-tests.dir}/${bin.dir}">
1519                        <patternset refid="test-classes-patternset"/>
1520                    </fileset>
1521                </batchtest>
1522            </junit>
1523        </jacoco:coverage>
1524
1525        <!-- collate -->
1526        <jacoco:coverage destfile="${jacoco.exec.data.file}">
1527            <junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="no">
1528                <jvmarg value="-ea"/>
1529                <jvmarg value="-Djava.awt.headless=true"/>
1530                <classpath>
1531                    <path refid="junit.jars"/>
1532                    <path refid="junit.icu.jars"/>
1533                </classpath>
1534
1535                <batchtest todir="${junit.out.dir}/collate">
1536                    <fileset dir="${icu4j.collate-tests.dir}/${bin.dir}">
1537                        <patternset refid="test-classes-patternset"/>
1538                    </fileset>
1539                </batchtest>
1540            </junit>
1541        </jacoco:coverage>
1542
1543        <!-- translit -->
1544        <jacoco:coverage destfile="${jacoco.exec.data.file}">
1545            <junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="no">
1546                <jvmarg value="-ea"/>
1547                <jvmarg value="-Djava.awt.headless=true"/>
1548                <classpath>
1549                    <path refid="junit.jars"/>
1550                    <path refid="junit.icu.jars"/>
1551                </classpath>
1552
1553                <batchtest todir="${junit.out.dir}/translit">
1554                    <fileset dir="${icu4j.translit-tests.dir}/${bin.dir}">
1555                        <patternset refid="test-classes-patternset"/>
1556                    </fileset>
1557                </batchtest>
1558            </junit>
1559        </jacoco:coverage>
1560
1561        <jacoco:report>
1562            <executiondata>
1563                <file file="${jacoco.exec.data.file}"/>
1564            </executiondata>
1565
1566            <structure name="ICU4J Project">
1567                <classfiles>
1568                    <fileset dir=".">
1569                        <include name="${icu4j.jar.file}"/>
1570                        <include name="${icu4j-charset.jar.file}"/>
1571                    </fileset>
1572                </classfiles>
1573                <sourcefiles encoding="UTF-8">
1574                    <fileset dir="${icu4j.core.dir}/src"/>
1575                    <fileset dir="${icu4j.collate.dir}/src"/>
1576                    <fileset dir="${icu4j.currdata.dir}/src"/>
1577                    <fileset dir="${icu4j.langdata.dir}/src"/>
1578                    <fileset dir="${icu4j.regiondata.dir}/src"/>
1579                    <fileset dir="${icu4j.translit.dir}/src"/>
1580
1581                    <fileset dir="${icu4j.charset.dir}/src"/>
1582                </sourcefiles>
1583            </structure>
1584
1585            <html destfile="${jacoco.report.html.zip}"/>
1586            <xml destfile="${jacoco.report.xml}"/>
1587            <csv destfile="${jacoco.report.csv}"/>
1588        </jacoco:report>
1589
1590        <java classname="com.ibm.icu.dev.tool.coverage.JacocoReportCheck" failonerror="true">
1591            <arg line="${jacoco.report.xml}  ${jacoco.exclusion.txt}"/>
1592            <classpath>
1593                <pathelement location="${icu4j.build-tools.jar}"/>
1594            </classpath>
1595        </java>
1596
1597    </target>
1598
1599    <!-- Release management targets -->
1600    <target name="checktags" depends="info, build-tools" description="Check API tags before release">
1601        <javadoc source="1.7"
1602                 bootclasspath="${java7.bootclasspath}"
1603                 encoding="${java.src.encoding}">
1604            <packageset dir="${icu4j.core.dir}/src">
1605                <include name="com/ibm/icu/lang/**"/>
1606                <include name="com/ibm/icu/math/**"/>
1607                <include name="com/ibm/icu/number/**"/>
1608                <include name="com/ibm/icu/text/**"/>
1609                <include name="com/ibm/icu/util/**"/>
1610            </packageset>
1611            <packageset dir="${icu4j.collate.dir}/src">
1612                <include name="com/ibm/icu/text/**"/>
1613                <include name="com/ibm/icu/util/**"/>
1614            </packageset>
1615            <packageset dir="${icu4j.charset.dir}/src">
1616                <include name="com/ibm/icu/charset/**"/>
1617            </packageset>
1618            <doclet name="com.ibm.icu.dev.tool.docs.CheckTags" path="${icu4j.build-tools.jar}"/>
1619        </javadoc>
1620    </target>
1621
1622    <target name="gatherapi" depends="info, build-tools" description="Run API database generator tool">
1623        <mkdir dir="${out.dir}"/>
1624        <javadoc source="1.7"
1625                 bootclasspath="${java7.bootclasspath}"
1626                 encoding="${java.src.encoding}">
1627            <packageset dir="${icu4j.core.dir}/src">
1628                <include name="com/ibm/icu/lang/**"/>
1629                <include name="com/ibm/icu/math/**"/>
1630                <include name="com/ibm/icu/number/**"/>
1631                <include name="com/ibm/icu/text/**"/>
1632                <include name="com/ibm/icu/util/**"/>
1633            </packageset>
1634            <packageset dir="${icu4j.collate.dir}/src">
1635                <include name="com/ibm/icu/text/**"/>
1636                <include name="com/ibm/icu/util/**"/>
1637            </packageset>
1638            <packageset dir="${icu4j.charset.dir}/src">
1639                <include name="com/ibm/icu/charset/**"/>
1640            </packageset>
1641            <packageset dir="${icu4j.translit.dir}/src">
1642                <include name="com/ibm/icu/text/**"/>
1643            </packageset>
1644            <doclet name="com.ibm.icu.dev.tool.docs.GatherAPIData" path="${icu4j.build-tools.jar}">
1645                <param name="-name" value="ICU4J ${icu4j.impl.version}"/>
1646                <param name="-output" value="${out.dir}/icu4j${api.report.version}.api3"/>
1647                <param name="-internal"/>
1648                <param name="-version"/>
1649                <param name="-gzip"/>
1650            </doclet>
1651        </javadoc>
1652    </target>
1653
1654    <target name="apireport" depends="info, gatherapi" description="Run API report generator tool">
1655        <java classname="com.ibm.icu.dev.tool.docs.ReportAPI"
1656                classpath="${icu4j.build-tools.jar}"
1657                failonerror="true">
1658            <arg value="-old:" />
1659            <arg value="${icu4j.build-tools.dir}/icu4j${api.report.prev.version}.api3.gz" />
1660            <arg value="-new:" />
1661            <arg value="${out.dir}/icu4j${api.report.version}.api3.gz" />
1662            <arg value="-html" />
1663            <arg value="-out:" />
1664            <arg value="${out.dir}/icu4j_compare_${api.report.prev.version}_${api.report.version}.html" />
1665        </java>
1666    </target>
1667
1668    <target name="gatherapiOld" depends="info, build-tools" description="Run API database generator tool (Pre Java 5 style)">
1669        <mkdir dir="${out.dir}"/>
1670        <javadoc source="1.7"
1671                 bootclasspath="${java7.bootclasspath}"
1672                 encoding="${java.src.encoding}">
1673            <packageset dir="${icu4j.core.dir}/src">
1674                <include name="com/ibm/icu/lang/**"/>
1675                <include name="com/ibm/icu/math/**"/>
1676                <include name="com/ibm/icu/number/**"/>
1677                <include name="com/ibm/icu/text/**"/>
1678                <include name="com/ibm/icu/util/**"/>
1679            </packageset>
1680            <packageset dir="${icu4j.collate.dir}/src">
1681                <include name="com/ibm/icu/text/**"/>
1682                <include name="com/ibm/icu/util/**"/>
1683            </packageset>
1684            <packageset dir="${icu4j.charset.dir}/src">
1685                <include name="com/ibm/icu/charset/**"/>
1686            </packageset>
1687            <packageset dir="${icu4j.translit.dir}/src">
1688                <include name="com/ibm/icu/text/**"/>
1689            </packageset>
1690            <doclet name="com.ibm.icu.dev.tool.docs.GatherAPIDataOld" path="${icu4j.build-tools.jar}">
1691                <param name="-name" value="ICU4J ${icu4j.impl.version}"/>
1692                <param name="-output" value="${out.dir}/icu4j${api.report.version}.api"/>
1693                <param name="-internal"/>
1694                <param name="-gzip"/>
1695            </doclet>
1696        </javadoc>
1697    </target>
1698
1699    <target name="apireportOld" depends="info, gatherapiOld" description="Run API report generator tool (Pre Java 5 Style)">
1700        <java classname="com.ibm.icu.dev.tool.docs.ReportAPI"
1701                classpath="${icu4j.build-tools.jar}"
1702                failonerror="true">
1703            <arg value="-old:" />
1704            <arg value="${icu4j.build-tools.dir}/icu4j${api.report.prev.version}.api.gz" />
1705            <arg value="-new:" />
1706            <arg value="${out.dir}/icu4j${api.report.version}.api.gz" />
1707            <arg value="-html" />
1708            <arg value="-internal" />
1709            <arg value="-out:" />
1710            <arg value="${out.dir}/icu4j_compare_${api.report.prev.version}_${api.report.version}.html" />
1711        </java>
1712    </target>
1713
1714    <target name="checkDeprecated" depends="info, build-tools, gatherapi, main"
1715        description="Check consistency between javadoc @deprecated and @Deprecated annotation">
1716        <java classname="com.ibm.icu.dev.tool.docs.DeprecatedAPIChecker"
1717                failonerror="true">
1718            <arg value="${out.dir}/icu4j${api.report.version}.api3.gz" />
1719            <classpath>
1720                <pathelement location="${icu4j.build-tools.jar}"/>
1721                <pathelement location="${icu4j.core.jar}"/>
1722                <pathelement location="${icu4j.collate.jar}"/>
1723                <pathelement location="${icu4j.charset.jar}"/>
1724                <pathelement location="${icu4j.currdata.jar}"/>
1725                <pathelement location="${icu4j.langdata.jar}"/>
1726                <pathelement location="${icu4j.regiondata.jar}"/>
1727                <pathelement location="${icu4j.translit.jar}"/>
1728            </classpath>
1729        </java>
1730    </target>
1731
1732    <target name="checkAPIStatusConsistency" depends="info, build-tools, gatherapi"
1733        description="Check consistency between API class status and methods overriding java.lang.Object">
1734        <!--
1735            If you need classes excluded from this check, define followig property in build-local.properties.
1736            e.g. checkAPIStatusConsistency.skip.classes=com.ibm.icu.text.Normalizer;com.ibm.icu.util.ULocale
1737        -->
1738        <property name="checkAPIStatusConsistency.skip.classes" value=""/>
1739        <java classname="com.ibm.icu.dev.tool.docs.APIStatusConsistencyChecker"
1740                failonerror="true">
1741            <arg value="${out.dir}/icu4j${api.report.version}.api3.gz" />
1742            <arg value="${checkAPIStatusConsistency.skip.classes}" />
1743            <classpath>
1744                <pathelement location="${icu4j.build-tools.jar}"/>
1745                <pathelement location="${icu4j.core.jar}"/>
1746                <pathelement location="${icu4j.collate.jar}"/>
1747                <pathelement location="${icu4j.charset.jar}"/>
1748                <pathelement location="${icu4j.currdata.jar}"/>
1749                <pathelement location="${icu4j.langdata.jar}"/>
1750                <pathelement location="${icu4j.regiondata.jar}"/>
1751                <pathelement location="${icu4j.translit.jar}"/>
1752            </classpath>
1753        </java>
1754    </target>
1755
1756    <target name="checkAPIStatus" depends="checkAPIStatusConsistency, checkDeprecated"/>
1757
1758    <target name="draftAPIs" depends="info, gatherapi" description="Run API collector tool and generate draft API report in html">
1759        <java classname="com.ibm.icu.dev.tool.docs.CollectAPI"
1760                classpath="${icu4j.build-tools.jar}"
1761                failonerror="true">
1762            <arg value="-f"/>
1763            <arg value="Draft"/>
1764            <arg value="-o"/>
1765            <arg value="${out.dir}/draftAPIs.html"/>
1766            <arg value="${out.dir}/icu4j${api.report.version}.api3.gz" />
1767        </java>
1768    </target>
1769
1770    <target name="draftAPIsTSV" depends="info, gatherapi" description="Run API collector tool and generate draft API report in TSV">
1771        <java classname="com.ibm.icu.dev.tool.docs.CollectAPI"
1772                classpath="${icu4j.build-tools.jar}"
1773                failonerror="true">
1774            <arg value="-f"/>
1775            <arg value="Draft"/>
1776            <arg value="-o"/>
1777            <arg value="${out.dir}/draftAPIs.tsv"/>
1778            <arg value="-t"/>
1779            <arg value="${out.dir}/icu4j${api.report.version}.api3.gz" />
1780        </java>
1781    </target>
1782
1783    <target name="serialTestData" depends="main, tests">
1784        <property name="serial.test.data.dir" value="${out.dir}/serialTestData"/>
1785        <delete dir="${serial.test.data.dir}"/>
1786        <mkdir dir="${serial.test.data.dir}"/>
1787        <java classname="com.ibm.icu.dev.test.serializable.SerializableWriter" fork="yes" failonerror="true">
1788            <arg line="${serial.test.data.dir}"/>
1789            <classpath>
1790                <pathelement location="${icu4j.core.jar}"/>
1791                <pathelement location="${icu4j.collate.jar}"/>
1792                <pathelement location="${icu4j.charset.jar}"/>
1793                <pathelement location="${icu4j.currdata.jar}"/>
1794                <pathelement location="${icu4j.langdata.jar}"/>
1795                <pathelement location="${icu4j.regiondata.jar}"/>
1796                <pathelement location="${icu4j.translit.jar}"/>
1797                <pathelement location="${icu4j.test-framework.jar}"/>
1798                <pathelement location="${icu4j.core-tests.jar}"/>
1799            </classpath>
1800        </java>
1801        <echo message="Note: The serialization compatibility test data files were"/>
1802        <echo message="created in ${serial.test.data.dir}. Once you confirm"/>
1803        <echo message="the test runs clean, you should copy the data file directory to"/>
1804        <echo message="main/tests/core/src/com/ibm/icu/dev/test/serializable/data."/>
1805    </target>
1806
1807    <!-- Special packaging targets -->
1808    <target name="translitIMEJar" depends="info" description="Build transliterator IME 'icutransime.jar' jar file">
1809        <property name="translit.ime.out.dir" value="${out.dir}/translit_ime"/>
1810
1811        <mkdir dir="${translit.ime.out.dir}/bin"/>
1812        <javac destdir="${translit.ime.out.dir}/bin"
1813                source="${javac.source}"
1814                target="${javac.target}"
1815                encoding="${java.src.encoding}"
1816                debug="on" deprecation="off">
1817            <src path="${icu4j.core.dir}/src"/>
1818            <src path="${icu4j.translit.dir}/src"/>
1819            <src path="${icu4j.tools.dir}/src"/>
1820            <include name="com/ibm/icu/dev/tool/ime/translit/*.java"/>
1821        </javac>
1822
1823        <copy file="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/translit/Transliterator.properties"
1824                todir="${translit.ime.out.dir}/bin/com/ibm/icu/dev/tool/ime/translit"/>
1825
1826        <mkdir dir="${translit.ime.out.dir}/lib"/>
1827        <jar jarfile="${translit.ime.out.dir}/lib/icutransime.jar"
1828                compress="true"
1829                basedir="${translit.ime.out.dir}/bin"
1830                includes="com/ibm/icu/dev/tool/ime/translit/**/*"
1831                manifest="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/translit/manifest.stub">
1832            <metainf dir="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/translit" includes="services/*" />
1833        </jar>
1834    </target>
1835
1836    <target name="indicIMEJar" depends="info" description="Build indic IME 'icuindicime.jar' jar file">
1837        <property name="indic.ime.out.dir" value="${out.dir}/indic_ime"/>
1838
1839        <mkdir dir="${indic.ime.out.dir}/bin"/>
1840        <javac destdir="${indic.ime.out.dir}/bin"
1841                source="${javac.source}"
1842                target="${javac.target}"
1843                encoding="${java.src.encoding}"
1844                debug="on" deprecation="off">
1845            <src path="${icu4j.core.dir}/src"/>
1846            <src path="${icu4j.tools.dir}/src"/>
1847            <include name="com/ibm/icu/dev/tool/ime/indic/*.java"/>
1848        </javac>
1849
1850        <copy file="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/indic/DisplayNames.properties"
1851                todir="${indic.ime.out.dir}/bin/com/ibm/icu/dev/tool/ime/indic"/>
1852
1853        <mkdir dir="${indic.ime.out.dir}/lib"/>
1854        <jar jarfile="${indic.ime.out.dir}/lib/icuindicime.jar"
1855                compress="true"
1856                basedir="${indic.ime.out.dir}/bin"
1857                includes="com/ibm/icu/dev/tool/ime/indic/**/*"
1858                manifest="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/indic/manifest.stub">
1859            <metainf dir="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/indic" includes="services/*" />
1860        </jar>
1861    </target>
1862
1863    <target name="cldrUtil" depends="icu4jJar" description="Build Utilities for CLDR tooling">
1864        <mkdir dir="${cldr.util.out.dir}/bin"/>
1865        <javac destdir="${cldr.util.out.dir}/bin"
1866                source="${javac.source}"
1867                target="${javac.target}"
1868                encoding="${java.src.encoding}"
1869                debug="on" deprecation="off"
1870                classpath="${icu4j.jar.file}">
1871
1872            <src path="${icu4j.tools.dir}/src"/>
1873            <src path="${icu4j.test-framework.dir}/src"/>
1874
1875            <include name="com/ibm/icu/dev/util/CollectionUtilities.java" />
1876            <include name="com/ibm/icu/dev/util/ElapsedTimer.java" />
1877            <include name="com/ibm/icu/dev/util/UnicodeMap.java" />
1878            <include name="com/ibm/icu/dev/util/UnicodeMapIterator.java" />
1879            <include name="com/ibm/icu/dev/tool/UOption.java" />
1880        </javac>
1881
1882        <mkdir dir="${cldr.util.out.dir}/lib"/>
1883        <jar jarfile="${cldr.util.out.dir}/lib/utilities.jar"
1884                compress="true"
1885                basedir="${cldr.util.out.dir}/bin">
1886            <include name="com/ibm/icu/dev/util/*.class"/>
1887            <include name="com/ibm/icu/dev/tool/UOption*.class"/>
1888        </jar>
1889    </target>
1890
1891    <target name="releaseCLDR" depends="icu4jJar,icu4jSrcJar,cldrUtil" description="Build release files for CLDR tooling">
1892        <mkdir dir="${cldr.release.dir}"/>
1893        <!-- icu4j.jar -->
1894        <copy file="${icu4j.jar.file}" todir="${cldr.release.dir}"/>
1895        <!-- icu4j-src.jar -->
1896        <copy file="${icu4j-src.jar.file}" todir="${cldr.release.dir}"/>
1897        <!-- utilities.jar -->
1898        <copy file="${cldr.util.out.dir}/lib/utilities.jar" todir="${cldr.release.dir}"/>
1899        <!-- utilities-src.jar -->
1900        <jar jarfile="${cldr.release.dir}/utilities-src.jar" compress="true">
1901            <fileset dir="${icu4j.test-framework.dir}/${src.dir}">
1902                <include name="com/ibm/icu/dev/util/CollectionUtilities.java" />
1903                <include name="com/ibm/icu/dev/util/ElapsedTimer.java" />
1904                <include name="com/ibm/icu/dev/util/UnicodeMap.java" />
1905                <include name="com/ibm/icu/dev/util/UnicodeMapIterator.java" />
1906            </fileset>
1907            <fileset dir="${icu4j.tools.dir}/${src.dir}" includes="com/ibm/icu/dev/tool/UOption.java"/>
1908       </jar>
1909    </target>
1910
1911    <target name="xliff" description="Build xliff converter tool">
1912        <property name="xliff.out.dir" value="${out.dir}/xliff"/>
1913
1914        <mkdir dir="${xliff.out.dir}/bin"/>
1915        <javac destdir="${xliff.out.dir}/bin"
1916                source="1.3"
1917                target="1.3"
1918                encoding="${java.src.encoding}"
1919                debug="on" deprecation="off">
1920            <src path="${icu4j.tools.dir}/src"/>
1921            <include name="com/ibm/icu/dev/tool/localeconverter/CalculateCRC32.java"/>
1922            <include name="com/ibm/icu/dev/tool/localeconverter/XLIFF2ICUConverter.java"/>
1923            <include name="com/ibm/icu/dev/tool/UOption.java"/>
1924       </javac>
1925
1926        <mkdir dir="${xliff.out.dir}/lib"/>
1927
1928        <jar jarfile="${xliff.out.dir}/lib/xliff-src.jar"
1929                compress="true"
1930                basedir="${icu4j.tools.dir}/src">
1931            <include name="com/ibm/icu/dev/tool/localeconverter/CalculateCRC32.java"/>
1932            <include name="com/ibm/icu/dev/tool/localeconverter/XLIFF2ICUConverter.java"/>
1933            <include name="com/ibm/icu/dev/tool/UOption.java"/>
1934        </jar>
1935
1936        <jar jarfile="${xliff.out.dir}/lib/xliff.jar"
1937                compress="true"
1938                basedir="${xliff.out.dir}/bin"
1939                manifest="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/localeconverter/manifest.stub"/>
1940    </target>
1941</project>
1942