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