build.xml 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998
  1. <?xml version="1.0"?>
  2. <project name="Hadoop" default="compile">
  3. <!-- Load all the default properties, and any the user wants -->
  4. <!-- to contribute (without having to type -D or edit this file -->
  5. <property file="${user.home}/build.properties" />
  6. <property file="${basedir}/build.properties" />
  7. <property name="Name" value="Hadoop"/>
  8. <property name="name" value="hadoop"/>
  9. <property name="version" value="0.15.5-dev"/>
  10. <property name="final.name" value="${name}-${version}"/>
  11. <property name="year" value="2006"/>
  12. <property name="libhdfs.version" value="1"/>
  13. <property name="src.dir" value="${basedir}/src/java"/>
  14. <property name="native.src.dir" value="${basedir}/src/native"/>
  15. <property name="examples.dir" value="${basedir}/src/examples"/>
  16. <property name="anttasks.dir" value="${basedir}/src/ant"/>
  17. <property name="lib.dir" value="${basedir}/lib"/>
  18. <property name="conf.dir" value="${basedir}/conf"/>
  19. <property name="docs.dir" value="${basedir}/docs"/>
  20. <property name="contrib.dir" value="${basedir}/src/contrib"/>
  21. <property name="docs.src" value="${basedir}/src/docs"/>
  22. <property name="c++.src" value="${basedir}/src/c++"/>
  23. <property name="c++.utils.src" value="${c++.src}/utils"/>
  24. <property name="c++.pipes.src" value="${c++.src}/pipes"/>
  25. <property name="c++.examples.pipes.src" value="${examples.dir}/pipes"/>
  26. <property name="libhdfs.src" value="${c++.src}/libhdfs"/>
  27. <property name="build.dir" value="${basedir}/build"/>
  28. <property name="build.classes" value="${build.dir}/classes"/>
  29. <property name="build.src" value="${build.dir}/src"/>
  30. <property name="build.webapps" value="${build.dir}/webapps"/>
  31. <property name="build.examples" value="${build.dir}/examples"/>
  32. <property name="build.anttasks" value="${build.dir}/ant"/>
  33. <property name="build.libhdfs" value="${build.dir}/libhdfs"/>
  34. <!-- convert spaces to _ so that mac os doesn't break things -->
  35. <exec executable="sed" inputstring="${os.name}"
  36. outputproperty="nonspace.os">
  37. <arg value="s/ /_/g"/>
  38. </exec>
  39. <property name="build.platform"
  40. value="${nonspace.os}-${os.arch}-${sun.arch.data.model}"/>
  41. <property name="build.native" value="${build.dir}/native/${build.platform}"/>
  42. <property name="build.c++" value="${build.dir}/c++-build/${build.platform}"/>
  43. <property name="build.c++.utils" value="${build.c++}/utils"/>
  44. <property name="build.c++.pipes" value="${build.c++}/pipes"/>
  45. <property name="build.c++.examples.pipes"
  46. value="${build.c++}/examples/pipes"/>
  47. <property name="build.docs" value="${build.dir}/docs"/>
  48. <property name="build.javadoc" value="${build.docs}/api"/>
  49. <property name="build.encoding" value="ISO-8859-1"/>
  50. <property name="install.c++" value="${build.dir}/c++/${build.platform}"/>
  51. <property name="install.c++.examples"
  52. value="${build.dir}/c++-examples/${build.platform}"/>
  53. <property name="test.src.dir" value="${basedir}/src/test"/>
  54. <property name="test.build.dir" value="${build.dir}/test"/>
  55. <property name="test.generated.dir" value="${test.build.dir}/src"/>
  56. <property name="test.build.data" value="${test.build.dir}/data"/>
  57. <property name="test.cache.data" value="${test.build.dir}/cache"/>
  58. <property name="test.log.dir" value="${test.build.dir}/logs"/>
  59. <property name="test.build.classes" value="${test.build.dir}/classes"/>
  60. <property name="test.build.testjar" value="${test.build.dir}/testjar"/>
  61. <property name="test.build.javadoc" value="${test.build.dir}/docs/api"/>
  62. <property name="test.include" value="Test*"/>
  63. <property name="test.classpath.id" value="test.classpath"/>
  64. <property name="test.output" value="no"/>
  65. <property name="test.timeout" value="900000"/>
  66. <property name="test.junit.output.format" value="plain"/>
  67. <property name="libhdfs.test.conf.dir" value="${libhdfs.src}/tests/conf"/>
  68. <property name="libhdfs.test.dir" value="${test.build.dir}/libhdfs"/>
  69. <property name="web.src.dir" value="${basedir}/src/web"/>
  70. <property name="src.webapps" value="${basedir}/src/webapps"/>
  71. <property name="javadoc.link.java"
  72. value="http://java.sun.com/j2se/1.5/docs/api/"/>
  73. <property name="javadoc.packages" value="org.apache.hadoop.*"/>
  74. <property name="dist.dir" value="${build.dir}/${final.name}"/>
  75. <property name="javac.debug" value="on"/>
  76. <property name="javac.optimize" value="on"/>
  77. <property name="javac.deprecation" value="off"/>
  78. <property name="javac.version" value="1.5"/>
  79. <property name="javac.args" value=""/>
  80. <property name="javac.args.warnings" value="-Xlint:unchecked"/>
  81. <property name="clover.db.dir" location="${build.dir}/test/clover/db"/>
  82. <property name="clover.report.dir" location="${build.dir}/test/clover/reports"/>
  83. <available property="clover.present" classname="com.cenqua.clover.tasks.CloverReportTask" />
  84. <!-- check if clover reports should be generated -->
  85. <condition property="clover.enabled">
  86. <and>
  87. <isset property="run.clover"/>
  88. <isset property="clover.present"/>
  89. </and>
  90. </condition>
  91. <!-- the normal classpath -->
  92. <path id="classpath">
  93. <pathelement location="${build.classes}"/>
  94. <fileset dir="${lib.dir}">
  95. <include name="**/*.jar" />
  96. <exclude name="**/excluded/" />
  97. </fileset>
  98. <pathelement location="${conf.dir}"/>
  99. </path>
  100. <!-- the unit test classpath: uses test.src.dir for configuration -->
  101. <path id="test.classpath">
  102. <pathelement location="${test.build.classes}" />
  103. <pathelement location="${test.src.dir}"/>
  104. <pathelement location="${build.dir}"/>
  105. <pathelement location="${build.examples}"/>
  106. <path refid="classpath"/>
  107. </path>
  108. <!-- the cluster test classpath: uses conf.dir for configuration -->
  109. <path id="test.cluster.classpath">
  110. <path refid="classpath"/>
  111. <pathelement location="${test.build.classes}" />
  112. <pathelement location="${test.src.dir}"/>
  113. <pathelement location="${build.dir}"/>
  114. </path>
  115. <!-- ====================================================== -->
  116. <!-- Stuff needed by all targets -->
  117. <!-- ====================================================== -->
  118. <target name="init">
  119. <mkdir dir="${build.dir}"/>
  120. <mkdir dir="${build.classes}"/>
  121. <mkdir dir="${build.src}"/>
  122. <mkdir dir="${build.webapps}/task/WEB-INF"/>
  123. <mkdir dir="${build.webapps}/job/WEB-INF"/>
  124. <mkdir dir="${build.webapps}/dfs/WEB-INF"/>
  125. <mkdir dir="${build.webapps}/datanode/WEB-INF"/>
  126. <mkdir dir="${build.examples}"/>
  127. <mkdir dir="${build.anttasks}"/>
  128. <mkdir dir="${build.dir}/c++"/>
  129. <mkdir dir="${test.build.dir}"/>
  130. <mkdir dir="${test.build.classes}"/>
  131. <mkdir dir="${test.build.testjar}"/>
  132. <touch datetime="01/25/1971 2:00 pm">
  133. <fileset dir="${conf.dir}" includes="**/*.template"/>
  134. <fileset dir="${contrib.dir}" includes="**/*.template"/>
  135. </touch>
  136. <!-- copy all of the jsp and static files -->
  137. <copy todir="${build.webapps}">
  138. <fileset dir="${src.webapps}">
  139. <exclude name="**/*.jsp" />
  140. </fileset>
  141. </copy>
  142. <copy todir="${conf.dir}" verbose="true">
  143. <fileset dir="${conf.dir}" includes="**/*.template"/>
  144. <mapper type="glob" from="*.template" to="*"/>
  145. </copy>
  146. <copy todir="${contrib.dir}" verbose="true">
  147. <fileset dir="${contrib.dir}" includes="**/*.template"/>
  148. <mapper type="glob" from="*.template" to="*"/>
  149. </copy>
  150. <exec executable="sh">
  151. <arg line="src/saveVersion.sh ${version}"/>
  152. </exec>
  153. </target>
  154. <!-- ====================================================== -->
  155. <!-- Compile the Java files -->
  156. <!-- ====================================================== -->
  157. <taskdef classname="org.apache.jasper.JspC" name="jsp-compile" >
  158. <classpath refid="test.classpath"/>
  159. </taskdef>
  160. <target name="record-parser" depends="init" if="javacc.home">
  161. <javacc
  162. target="${src.dir}/org/apache/hadoop/record/compiler/generated/rcc.jj"
  163. outputdirectory="${src.dir}/org/apache/hadoop/record/compiler/generated"
  164. javacchome="${javacc.home}"
  165. />
  166. </target>
  167. <target name="compile-rcc-compiler" depends="init, record-parser">
  168. <javac
  169. encoding="${build.encoding}"
  170. srcdir="${src.dir}"
  171. includes="org/apache/hadoop/record/compiler/**/*.java"
  172. destdir="${build.classes}"
  173. debug="${javac.debug}"
  174. optimize="${javac.optimize}"
  175. target="${javac.version}"
  176. source="${javac.version}"
  177. deprecation="${javac.deprecation}">
  178. <compilerarg line="${javac.args}"/>
  179. <classpath refid="classpath"/>
  180. </javac>
  181. <taskdef name="recordcc" classname="org.apache.hadoop.record.compiler.ant.RccTask">
  182. <classpath refid="classpath" />
  183. </taskdef>
  184. </target>
  185. <target name="compile-core-classes" depends="init, compile-rcc-compiler">
  186. <jsp-compile
  187. uriroot="${src.webapps}/task"
  188. outputdir="${build.src}"
  189. package="org.apache.hadoop.mapred"
  190. webxml="${build.webapps}/task/WEB-INF/web.xml">
  191. </jsp-compile>
  192. <jsp-compile
  193. uriroot="${src.webapps}/job"
  194. outputdir="${build.src}"
  195. package="org.apache.hadoop.mapred"
  196. webxml="${build.webapps}/job/WEB-INF/web.xml">
  197. </jsp-compile>
  198. <jsp-compile
  199. uriroot="${src.webapps}/dfs"
  200. outputdir="${build.src}"
  201. package="org.apache.hadoop.dfs"
  202. webxml="${build.webapps}/dfs/WEB-INF/web.xml">
  203. </jsp-compile>
  204. <jsp-compile
  205. uriroot="${src.webapps}/datanode"
  206. outputdir="${build.src}"
  207. package="org.apache.hadoop.dfs"
  208. webxml="${build.webapps}/datanode/WEB-INF/web.xml">
  209. </jsp-compile>
  210. <!-- Compile Java files (excluding JSPs) checking warnings -->
  211. <javac
  212. encoding="${build.encoding}"
  213. srcdir="${src.dir};${build.src}"
  214. includes="org/apache/hadoop/**/*.java"
  215. destdir="${build.classes}"
  216. debug="${javac.debug}"
  217. optimize="${javac.optimize}"
  218. target="${javac.version}"
  219. source="${javac.version}"
  220. deprecation="${javac.deprecation}">
  221. <compilerarg line="${javac.args} ${javac.args.warnings}" />
  222. <classpath refid="classpath"/>
  223. </javac>
  224. <copy todir="${build.classes}">
  225. <fileset
  226. dir="${src.dir}"
  227. includes="**/*.properties"
  228. />
  229. </copy>
  230. </target>
  231. <target name="compile-core-native" depends="compile-core-classes"
  232. if="compile.native">
  233. <mkdir dir="${build.native}/lib"/>
  234. <mkdir dir="${build.native}/src/org/apache/hadoop/io/compress/zlib"/>
  235. <mkdir dir="${build.native}/src/org/apache/hadoop/io/compress/lzo"/>
  236. <javah
  237. classpath="${build.classes}"
  238. destdir="${build.native}/src/org/apache/hadoop/io/compress/zlib"
  239. force="yes"
  240. verbose="yes"
  241. >
  242. <class name="org.apache.hadoop.io.compress.zlib.ZlibCompressor" />
  243. <class name="org.apache.hadoop.io.compress.zlib.ZlibDecompressor" />
  244. </javah>
  245. <javah
  246. classpath="${build.classes}"
  247. destdir="${build.native}/src/org/apache/hadoop/io/compress/lzo"
  248. force="yes"
  249. verbose="yes"
  250. >
  251. <class name="org.apache.hadoop.io.compress.lzo.LzoCompressor" />
  252. <class name="org.apache.hadoop.io.compress.lzo.LzoDecompressor" />
  253. </javah>
  254. <exec dir="${build.native}" executable="sh" failonerror="true">
  255. <env key="OS_NAME" value="${os.name}"/>
  256. <env key="OS_ARCH" value="${os.arch}"/>
  257. <env key="JVM_DATA_MODEL" value="${sun.arch.data.model}"/>
  258. <env key="HADOOP_NATIVE_SRCDIR" value="${native.src.dir}"/>
  259. <arg line="${native.src.dir}/configure"/>
  260. </exec>
  261. <exec dir="${build.native}" executable="make" failonerror="true">
  262. <env key="OS_NAME" value="${os.name}"/>
  263. <env key="OS_ARCH" value="${os.arch}"/>
  264. <env key="JVM_DATA_MODEL" value="${sun.arch.data.model}"/>
  265. <env key="HADOOP_NATIVE_SRCDIR" value="${native.src.dir}"/>
  266. </exec>
  267. <exec dir="${build.native}" executable="sh" failonerror="true">
  268. <arg line="${build.native}/libtool --mode=install cp ${build.native}/lib/libhadoop.la ${build.native}/lib"/>
  269. </exec>
  270. </target>
  271. <target name="compile-core"
  272. depends="clover,compile-core-classes,compile-core-native,compile-c++">
  273. </target>
  274. <target name="compile-contrib" depends="compile-core">
  275. <subant target="deploy">
  276. <property name="version" value="${version}"/>
  277. <fileset file="${contrib.dir}/build.xml"/>
  278. </subant>
  279. </target>
  280. <target name="compile" depends="compile-core, compile-contrib, compile-ant-tasks">
  281. </target>
  282. <target name="compile-examples"
  283. depends="compile-core,compile-c++-examples">
  284. <javac
  285. encoding="${build.encoding}"
  286. srcdir="${examples.dir}"
  287. includes="org/apache/hadoop/**/*.java"
  288. destdir="${build.examples}"
  289. debug="${javac.debug}"
  290. optimize="${javac.optimize}"
  291. target="${javac.version}"
  292. source="${javac.version}"
  293. deprecation="${javac.deprecation}">
  294. <compilerarg line="${javac.args} ${javac.args.warnings}" />
  295. <classpath refid="classpath"/>
  296. </javac>
  297. </target>
  298. <!-- ================================================================== -->
  299. <!-- Make hadoop.jar -->
  300. <!-- ================================================================== -->
  301. <!-- -->
  302. <!-- ================================================================== -->
  303. <target name="jar" depends="compile-core">
  304. <tar compression="gzip" destfile="${build.classes}/bin.tgz">
  305. <tarfileset dir="bin" mode="755"/>
  306. </tar>
  307. <jar jarfile="${build.dir}/${final.name}-core.jar"
  308. basedir="${build.classes}">
  309. <manifest>
  310. <section name="org/apache/hadoop">
  311. <attribute name="Implementation-Title" value="Hadoop"/>
  312. <attribute name="Implementation-Version" value="${version}"/>
  313. <attribute name="Implementation-Vendor" value="Apache"/>
  314. </section>
  315. </manifest>
  316. <fileset file="${conf.dir}/hadoop-default.xml"/>
  317. <fileset file="${conf.dir}/commons-logging.properties"/>
  318. <fileset file="${conf.dir}/log4j.properties"/>
  319. <fileset file="${conf.dir}/hadoop-metrics.properties"/>
  320. <zipfileset dir="${build.webapps}" prefix="webapps"/>
  321. </jar>
  322. </target>
  323. <!-- ================================================================== -->
  324. <!-- Make the Hadoop examples jar. -->
  325. <!-- ================================================================== -->
  326. <!-- -->
  327. <!-- ================================================================== -->
  328. <target name="examples" depends="jar, compile-examples">
  329. <jar jarfile="${build.dir}/${final.name}-examples.jar"
  330. basedir="${build.examples}">
  331. <manifest>
  332. <attribute name="Main-Class"
  333. value="org/apache/hadoop/examples/ExampleDriver"/>
  334. </manifest>
  335. </jar>
  336. </target>
  337. <!-- ================================================================== -->
  338. <!-- Make the Hadoop metrics jar. (for use outside Hadoop) -->
  339. <!-- ================================================================== -->
  340. <!-- -->
  341. <!-- ================================================================== -->
  342. <target name="metrics.jar" depends="compile-core">
  343. <jar jarfile="${build.dir}/hadoop-metrics-${version}.jar"
  344. basedir="${build.classes}">
  345. <include name="**/metrics/**" />
  346. <exclude name="**/package.html" />
  347. </jar>
  348. </target>
  349. <target name="generate-test-records" depends="compile-rcc-compiler">
  350. <recordcc destdir="${test.generated.dir}">
  351. <fileset dir="${test.src.dir}"
  352. includes="**/*.jr" />
  353. </recordcc>
  354. </target>
  355. <!-- ================================================================== -->
  356. <!-- Compile test code -->
  357. <!-- ================================================================== -->
  358. <target name="compile-core-test" depends="compile-examples, generate-test-records">
  359. <javac
  360. encoding="${build.encoding}"
  361. srcdir="${test.generated.dir}"
  362. includes="org/apache/hadoop/**/*.java"
  363. destdir="${test.build.classes}"
  364. debug="${javac.debug}"
  365. optimize="${javac.optimize}"
  366. target="${javac.version}"
  367. source="${javac.version}"
  368. deprecation="${javac.deprecation}">
  369. <compilerarg line="${javac.args}" />
  370. <classpath refid="test.classpath"/>
  371. </javac>
  372. <javac
  373. encoding="${build.encoding}"
  374. srcdir="${test.src.dir}"
  375. includes="org/apache/hadoop/**/*.java"
  376. destdir="${test.build.classes}"
  377. debug="${javac.debug}"
  378. optimize="${javac.optimize}"
  379. target="${javac.version}"
  380. source="${javac.version}"
  381. deprecation="${javac.deprecation}">
  382. <compilerarg line="${javac.args} ${javac.args.warnings}" />
  383. <classpath refid="test.classpath"/>
  384. </javac>
  385. <javac
  386. encoding="${build.encoding}"
  387. srcdir="${test.src.dir}/testjar"
  388. includes="*.java"
  389. destdir="${test.build.testjar}"
  390. debug="${javac.debug}"
  391. optimize="${javac.optimize}"
  392. target="${javac.version}"
  393. source="${javac.version}"
  394. deprecation="${javac.deprecation}">
  395. <compilerarg line="${javac.args} ${javac.args.warnings}" />
  396. <classpath refid="test.classpath"/>
  397. </javac>
  398. <delete file="${test.build.testjar}/testjob.jar"/>
  399. <jar jarfile="${test.build.testjar}/testjob.jar"
  400. basedir="${test.build.testjar}">
  401. </jar>
  402. <jar jarfile="${build.dir}/${final.name}-test.jar"
  403. basedir="${test.build.classes}">
  404. <manifest>
  405. <attribute name="Main-Class"
  406. value="org/apache/hadoop/test/AllTestDriver"/>
  407. </manifest>
  408. </jar>
  409. <delete dir="${test.cache.data}"/>
  410. <mkdir dir="${test.cache.data}"/>
  411. <copy file="${test.src.dir}/org/apache/hadoop/mapred/test.txt" todir="${test.cache.data}"/>
  412. <copy file="${test.src.dir}/org/apache/hadoop/mapred/test.jar" todir="${test.cache.data}"/>
  413. <copy file="${test.src.dir}/org/apache/hadoop/mapred/test.zip" todir="${test.cache.data}"/>
  414. <copy file="${test.src.dir}/org/apache/hadoop/dfs/hadoop-12-dfs-dir.tgz" todir="${test.cache.data}"/>
  415. <copy file="${test.src.dir}/org/apache/hadoop/dfs/hadoop-12-dfs-dir.txt" todir="${test.cache.data}"/>
  416. </target>
  417. <!-- ================================================================== -->
  418. <!-- Run unit tests -->
  419. <!-- ================================================================== -->
  420. <target name="test-core" depends="compile-core-test">
  421. <delete dir="${test.build.data}"/>
  422. <mkdir dir="${test.build.data}"/>
  423. <delete dir="${test.log.dir}"/>
  424. <mkdir dir="${test.log.dir}"/>
  425. <junit showoutput="${test.output}" printsummary="yes" haltonfailure="no"
  426. fork="yes" maxmemory="256m" dir="${basedir}" timeout="${test.timeout}"
  427. errorProperty="tests.failed" failureProperty="tests.failed">
  428. <sysproperty key="test.build.data" value="${test.build.data}"/>
  429. <sysproperty key="test.cache.data" value="${test.cache.data}"/>
  430. <sysproperty key="hadoop.log.dir" value="${test.log.dir}"/>
  431. <sysproperty key="test.src.dir" value="${test.src.dir}"/>
  432. <sysproperty key="java.library.path"
  433. value="${build.native}/lib:${lib.dir}/native/${build.platform}"/>
  434. <sysproperty key="install.c++.examples" value="${install.c++.examples}"/>
  435. <!-- set compile.c++ in the child jvm only if it is set -->
  436. <syspropertyset dynamic="no">
  437. <propertyref name="compile.c++"/>
  438. </syspropertyset>
  439. <classpath refid="${test.classpath.id}"/>
  440. <formatter type="${test.junit.output.format}" />
  441. <batchtest todir="${test.build.dir}" unless="testcase">
  442. <fileset dir="${test.src.dir}"
  443. includes="**/${test.include}.java"
  444. excludes="**/${test.exclude}.java" />
  445. </batchtest>
  446. <batchtest todir="${test.build.dir}" if="testcase">
  447. <fileset dir="${test.src.dir}" includes="**/${testcase}.java"/>
  448. </batchtest>
  449. </junit>
  450. <fail if="tests.failed">Tests failed!</fail>
  451. </target>
  452. <target name="test-contrib" depends="compile-core, compile-core-test">
  453. <subant target="test">
  454. <property name="version" value="${version}"/>
  455. <fileset file="${contrib.dir}/build.xml"/>
  456. </subant>
  457. </target>
  458. <target name="test" depends="test-core, test-contrib">
  459. </target>
  460. <!-- Run all unit tests, not just Test*, and use non-test configuration. -->
  461. <target name="test-cluster">
  462. <antcall target="test">
  463. <param name="test.include" value="*"/>
  464. <param name="test.classpath.id" value="test.cluster.classpath"/>
  465. </antcall>
  466. </target>
  467. <target name="nightly" depends="test, tar">
  468. </target>
  469. <!-- ================================================================== -->
  470. <!-- Run optional third-party tool targets -->
  471. <!-- ================================================================== -->
  472. <target name="checkstyle" depends="check-for-checkstyle" if="checkstyle.present">
  473. <taskdef resource="checkstyletask.properties">
  474. <classpath>
  475. <fileset dir="${lib.dir}">
  476. <include name="excluded/checkstyle-all-*.jar"/>
  477. </fileset>
  478. </classpath>
  479. </taskdef>
  480. <mkdir dir="${test.build.dir}"/>
  481. <checkstyle config="${test.src.dir}/checkstyle.xml"
  482. failOnViolation="false">
  483. <fileset dir="${src.dir}" includes="**/*.java" excludes="**/generated/**"/>
  484. <formatter type="xml" toFile="${test.build.dir}/checkstyle-errors.xml"/>
  485. </checkstyle>
  486. <xslt style="${test.src.dir}/checkstyle-noframes-sorted.xsl"
  487. in="${test.build.dir}/checkstyle-errors.xml"
  488. out="${test.build.dir}/checkstyle-errors.html"/>
  489. </target>
  490. <target name="check-for-checkstyle">
  491. <available property="checkstyle.present" resource="checkstyletask.properties">
  492. <classpath>
  493. <fileset dir="${lib.dir}">
  494. <include name="excluded/checkstyle-all-*.jar"/>
  495. </fileset>
  496. </classpath>
  497. </available>
  498. </target>
  499. <property name="findbugs.home" value=""/>
  500. <target name="findbugs" depends="check-for-findbugs, tar" if="findbugs.present">
  501. <property name="findbugs.out.dir" value="${test.build.dir}/findbugs"/>
  502. <property name="findbugs.exclude.file" value="${test.src.dir}/findbugsExcludeFile.xml"/>
  503. <property name="findbugs.report.htmlfile" value="${findbugs.out.dir}/hadoop-findbugs-report.html"/>
  504. <property name="findbugs.report.xmlfile" value="${findbugs.out.dir}/hadoop-findbugs-report.xml"/>
  505. <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
  506. classpath="${findbugs.home}/lib/findbugs-ant.jar" />
  507. <mkdir dir="${findbugs.out.dir}"/>
  508. <findbugs home="${findbugs.home}" output="xml:withMessages"
  509. outputFile="${findbugs.report.xmlfile}" effort="max"
  510. excludeFilter="${findbugs.exclude.file}" jvmargs="-Xmx512M">
  511. <auxClasspath>
  512. <fileset dir="${lib.dir}">
  513. <include name="**/*.jar"/>
  514. </fileset>
  515. </auxClasspath>
  516. <sourcePath path="${src.dir}" />
  517. <sourcePath path="${examples.dir}" />
  518. <sourcePath path="${basedir}/src/contrib/streaming/src/java" />
  519. <class location="${basedir}/build/hadoop-${version}-core.jar" />
  520. <class location="${basedir}/build/hadoop-${version}-examples.jar" />
  521. <class location="${basedir}/build/hadoop-${version}-streaming.jar" />
  522. </findbugs>
  523. <xslt style="${findbugs.home}/src/xsl/default.xsl"
  524. in="${findbugs.report.xmlfile}"
  525. out="${findbugs.report.htmlfile}"/>
  526. </target>
  527. <target name="check-for-findbugs">
  528. <available property="findbugs.present"
  529. file="${findbugs.home}/lib/findbugs.jar" />
  530. </target>
  531. <!-- ================================================================== -->
  532. <!-- Documentation -->
  533. <!-- ================================================================== -->
  534. <target name="docs" description="Generate documentation">
  535. <exec dir="${docs.src}" executable="forrest" failonerror="true" />
  536. <copy todir="${docs.dir}">
  537. <fileset dir="${docs.src}/build/site/" />
  538. </copy>
  539. <style basedir="${conf.dir}" destdir="${docs.dir}"
  540. includes="hadoop-default.xml" style="conf/configuration.xsl"/>
  541. </target>
  542. <target name="javadoc" description="Generate javadoc">
  543. <mkdir dir="${build.javadoc}"/>
  544. <javadoc
  545. overview="${src.dir}/overview.html"
  546. packagenames="org.apache.hadoop.*"
  547. destdir="${build.javadoc}"
  548. author="true"
  549. version="true"
  550. use="true"
  551. windowtitle="${Name} ${version} API"
  552. doctitle="${Name} ${version} API"
  553. bottom="Copyright &amp;copy; ${year} The Apache Software Foundation"
  554. >
  555. <packageset dir="${src.dir}"/>
  556. <packageset dir="${examples.dir}"/>
  557. <packageset dir="src/contrib/streaming/src/java"/>
  558. <packageset dir="src/contrib/data_join/src/java"/>
  559. <packageset dir="src/contrib/hbase/src/java"/>
  560. <link href="${javadoc.link.java}"/>
  561. <classpath >
  562. <path refid="classpath" />
  563. <fileset dir="src/contrib/">
  564. <include name="*/lib/*.jar" />
  565. </fileset>
  566. <pathelement path="${java.class.path}"/>
  567. </classpath>
  568. <group title="Core" packages="org.apache.*"/>
  569. <group title="Examples" packages="org.apache.hadoop.examples*"/>
  570. <group title="contrib: Streaming" packages="org.apache.hadoop.streaming*"/>
  571. <group title="contrib: DataJoin" packages="org.apache.hadoop.contrib.utils.join*"/>
  572. <group title="contrib: HBase" packages="org.apache.hadoop.hbase*"/>
  573. </javadoc>
  574. </target>
  575. <!-- ================================================================== -->
  576. <!-- D I S T R I B U T I O N -->
  577. <!-- ================================================================== -->
  578. <!-- -->
  579. <!-- ================================================================== -->
  580. <target name="package" depends="jar, javadoc, examples, compile-core-test, deploy-contrib, ant-tasks">
  581. <mkdir dir="${dist.dir}"/>
  582. <mkdir dir="${dist.dir}/lib"/>
  583. <mkdir dir="${dist.dir}/contrib"/>
  584. <mkdir dir="${dist.dir}/bin"/>
  585. <mkdir dir="${dist.dir}/docs"/>
  586. <mkdir dir="${dist.dir}/docs/api"/>
  587. <copy todir="${dist.dir}/lib" includeEmptyDirs="false">
  588. <fileset dir="lib">
  589. <exclude name="**/native/**"/>
  590. </fileset>
  591. </copy>
  592. <exec dir="${dist.dir}" executable="sh" failonerror="true">
  593. <env key="BASE_NATIVE_LIB_DIR" value="${lib.dir}/native"/>
  594. <env key="BUILD_NATIVE_DIR" value="${build.dir}/native"/>
  595. <env key="DIST_LIB_DIR" value="${dist.dir}/lib/native"/>
  596. <arg line="${native.src.dir}/packageNativeHadoop.sh"/>
  597. </exec>
  598. <copy todir="${dist.dir}/contrib" includeEmptyDirs="false" flatten="true">
  599. <fileset dir="build/contrib">
  600. <include name="*/*.jar"/>
  601. </fileset>
  602. </copy>
  603. <copy todir="${dist.dir}/webapps">
  604. <fileset dir="${build.webapps}"/>
  605. </copy>
  606. <copy file="${build.dir}/${final.name}-core.jar" todir="${dist.dir}"/>
  607. <copy file="${build.dir}/${final.name}-examples.jar" todir="${dist.dir}"/>
  608. <copy file="${build.dir}/${final.name}-test.jar" todir="${dist.dir}"/>
  609. <copy todir="${dist.dir}/bin">
  610. <fileset dir="bin"/>
  611. </copy>
  612. <copy todir="${dist.dir}/conf">
  613. <fileset dir="${conf.dir}" excludes="**/*.template"/>
  614. </copy>
  615. <copy todir="${dist.dir}/docs">
  616. <fileset dir="${docs.dir}" />
  617. <fileset dir="${build.docs}"/>
  618. </copy>
  619. <copy todir="${dist.dir}">
  620. <fileset dir=".">
  621. <include name="*.txt" />
  622. </fileset>
  623. </copy>
  624. <copy todir="${dist.dir}/src" includeEmptyDirs="true">
  625. <fileset dir="src" excludes="**/*.template"/>
  626. </copy>
  627. <copy todir="${dist.dir}/c++" includeEmptyDirs="false">
  628. <fileset dir="${build.dir}/c++"/>
  629. </copy>
  630. <copy todir="${dist.dir}/" file="build.xml"/>
  631. <chmod perm="ugo+x" type="file">
  632. <fileset dir="${dist.dir}/bin"/>
  633. <fileset dir="${dist.dir}/src/contrib/">
  634. <include name="*/bin/*" />
  635. </fileset>
  636. <fileset dir="${dist.dir}/src/contrib/ec2/bin/image"/>
  637. </chmod>
  638. </target>
  639. <!-- ================================================================== -->
  640. <!-- Make release tarball -->
  641. <!-- ================================================================== -->
  642. <target name="tar" depends="package">
  643. <tar compression="gzip" longfile="gnu"
  644. destfile="${build.dir}/${final.name}.tar.gz">
  645. <tarfileset dir="${build.dir}" mode="664">
  646. <exclude name="${final.name}/bin/*" />
  647. <exclude name="${final.name}/src/contrib/ec2/bin/*" />
  648. <exclude name="${final.name}/src/contrib/ec2/bin/image/*" />
  649. <include name="${final.name}/**" />
  650. </tarfileset>
  651. <tarfileset dir="${build.dir}" mode="755">
  652. <include name="${final.name}/bin/*" />
  653. <include name="${final.name}/src/contrib/ec2/bin/*" />
  654. <include name="${final.name}/src/contrib/ec2/bin/image/*" />
  655. </tarfileset>
  656. </tar>
  657. </target>
  658. <!-- ================================================================== -->
  659. <!-- Clean. Delete the build files, and their directories -->
  660. <!-- ================================================================== -->
  661. <target name="clean" depends="clean-contrib">
  662. <delete dir="${build.dir}"/>
  663. <delete dir="${docs.src}/build"/>
  664. </target>
  665. <!-- ================================================================== -->
  666. <!-- Contrib targets. For now, they must be called explicitely -->
  667. <!-- Using subant instead of ant as a workaround for 30569 -->
  668. <!-- ================================================================== -->
  669. <target name="deploy-contrib" depends="compile-core">
  670. <subant target="deploy">
  671. <property name="version" value="${version}"/>
  672. <fileset file="src/contrib/build.xml"/>
  673. </subant>
  674. </target>
  675. <target name="clean-contrib">
  676. <subant target="clean">
  677. <fileset file="src/contrib/build.xml"/>
  678. </subant>
  679. </target>
  680. <!-- ================================================================== -->
  681. <!-- libhdfs targets. -->
  682. <!-- ================================================================== -->
  683. <target name="compile-libhdfs" depends="init">
  684. <mkdir dir="${build.libhdfs}"/>
  685. <exec dir="${libhdfs.src}" executable="make">
  686. <env key="OS_NAME" value="${os.name}"/>
  687. <env key="OS_ARCH" value="${os.arch}"/>
  688. <env key="SHLIB_VERSION" value="${libhdfs.version}"/>
  689. <env key="LIBHDFS_BUILD_DIR" value="${build.libhdfs}"/>
  690. </exec>
  691. </target>
  692. <target name="test-libhdfs" depends="compile-libhdfs, compile-core">
  693. <delete dir="${libhdfs.test.dir}"/>
  694. <mkdir dir="${libhdfs.test.dir}"/>
  695. <mkdir dir="${libhdfs.test.dir}/logs"/>
  696. <mkdir dir="${libhdfs.test.dir}/dfs/name"/>
  697. <exec dir="${libhdfs.src}" executable="make" failonerror="true">
  698. <env key="OS_NAME" value="${os.name}"/>
  699. <env key="OS_ARCH" value="${os.arch}"/>
  700. <env key="SHLIB_VERSION" value="${libhdfs.version}"/>
  701. <env key="LIBHDFS_BUILD_DIR" value="${build.libhdfs}"/>
  702. <env key="HADOOP_HOME" value="${basedir}"/>
  703. <env key="HADOOP_CONF_DIR" value="${libhdfs.test.conf.dir}"/>
  704. <env key="HADOOP_LOG_DIR" value="${libhdfs.test.dir}/logs"/>
  705. <arg value="test"/>
  706. </exec>
  707. </target>
  708. <target name="clean-libhdfs">
  709. <exec dir="${libhdfs.src}" executable="make">
  710. <env key="LIBHDFS_BUILD_DIR" value="${build.libhdfs}"/>
  711. <arg value="clean"/>
  712. </exec>
  713. </target>
  714. <target name="doc-libhdfs" depends="compile-libhdfs">
  715. <exec dir="${libhdfs.src}" executable="make">
  716. <arg value="doc"/>
  717. </exec>
  718. </target>
  719. <target name="package-libhdfs" depends="compile-libhdfs, doc-libhdfs, package">
  720. <mkdir dir="${dist.dir}/libhdfs"/>
  721. <copy todir="${dist.dir}/libhdfs">
  722. <fileset dir="${build.libhdfs}"
  723. casesensitive="yes"
  724. followsymlinks="false">
  725. <exclude name="**/tests/**"/>
  726. <exclude name="*.so"/>
  727. <exclude name="*.o"/>
  728. </fileset>
  729. </copy>
  730. <chmod perm="ugo+x" type="file">
  731. <fileset dir="${dist.dir}/libhdfs"/>
  732. </chmod>
  733. <exec dir="${dist.dir}/libhdfs" executable="ln">
  734. <arg line="-sf libhdfs.so.${libhdfs.version} libhdfs.so"/>
  735. </exec>
  736. </target>
  737. <target name="create-c++-configure" depends="init" if="compile.c++">
  738. <exec executable="autoreconf" dir="${c++.utils.src}" searchpath="yes"
  739. failonerror="yes">
  740. <arg value="-if"/>
  741. </exec>
  742. <exec executable="autoreconf" dir="${c++.pipes.src}" searchpath="yes"
  743. failonerror="yes">
  744. <arg value="-if"/>
  745. </exec>
  746. <exec executable="autoreconf" dir="${c++.examples.pipes.src}"
  747. searchpath="yes" failonerror="yes">
  748. <arg value="-if"/>
  749. </exec>
  750. </target>
  751. <target name="check-c++-makefiles" depends="init" if="compile.c++">
  752. <condition property="need.c++.utils.makefile">
  753. <not> <available file="${build.c++.utils}/Makefile"/> </not>
  754. </condition>
  755. <condition property="need.c++.pipes.makefile">
  756. <not> <available file="${build.c++.pipes}/Makefile"/> </not>
  757. </condition>
  758. <condition property="need.c++.examples.pipes.makefile">
  759. <not> <available file="${build.c++.examples.pipes}/Makefile"/> </not>
  760. </condition>
  761. </target>
  762. <target name="create-c++-utils-makefile" depends="check-c++-makefiles"
  763. if="need.c++.utils.makefile">
  764. <mkdir dir="${build.c++.utils}"/>
  765. <exec executable="${c++.utils.src}/configure" dir="${build.c++.utils}"
  766. failonerror="yes">
  767. <arg value="--prefix=${install.c++}"/>
  768. </exec>
  769. </target>
  770. <target name="compile-c++-utils" depends="create-c++-utils-makefile"
  771. if="compile.c++">
  772. <exec executable="make" dir="${build.c++.utils}" searchpath="yes"
  773. failonerror="yes">
  774. <arg value="install"/>
  775. </exec>
  776. </target>
  777. <target name="create-c++-pipes-makefile" depends="check-c++-makefiles"
  778. if="need.c++.pipes.makefile">
  779. <mkdir dir="${build.c++.pipes}"/>
  780. <exec executable="${c++.pipes.src}/configure" dir="${build.c++.pipes}"
  781. failonerror="yes">
  782. <arg value="--prefix=${install.c++}"/>
  783. </exec>
  784. </target>
  785. <target name="compile-c++-pipes"
  786. depends="create-c++-pipes-makefile,compile-c++-utils"
  787. if="compile.c++">
  788. <exec executable="make" dir="${build.c++.pipes}" searchpath="yes"
  789. failonerror="yes">
  790. <arg value="install"/>
  791. </exec>
  792. </target>
  793. <target name="compile-c++"
  794. depends="compile-c++-pipes"/>
  795. <target name="create-c++-examples-pipes-makefile"
  796. depends="check-c++-makefiles"
  797. if="need.c++.examples.pipes.makefile">
  798. <mkdir dir="${build.c++.examples.pipes}"/>
  799. <exec executable="${c++.examples.pipes.src}/configure"
  800. dir="${build.c++.examples.pipes}"
  801. failonerror="yes">
  802. <arg value="--prefix=${install.c++.examples}"/>
  803. <arg value="--with-hadoop-utils=${install.c++}"/>
  804. <arg value="--with-hadoop-pipes=${install.c++}"/>
  805. </exec>
  806. </target>
  807. <target name="compile-c++-examples-pipes"
  808. depends="create-c++-examples-pipes-makefile,compile-c++-pipes"
  809. if="compile.c++">
  810. <exec executable="make" dir="${build.c++.examples.pipes}" searchpath="yes"
  811. failonerror="yes">
  812. <arg value="install"/>
  813. </exec>
  814. </target>
  815. <target name="compile-c++-examples"
  816. depends="compile-c++-examples-pipes"/>
  817. <target name="compile-ant-tasks" depends="compile-core">
  818. <javac
  819. encoding="${build.encoding}"
  820. srcdir="${anttasks.dir}"
  821. includes="org/apache/hadoop/ant/**/*.java"
  822. destdir="${build.anttasks}"
  823. debug="${javac.debug}"
  824. optimize="${javac.optimize}"
  825. target="${javac.version}"
  826. source="${javac.version}"
  827. deprecation="${javac.deprecation}">
  828. <compilerarg line="${javac.args}"/>
  829. <classpath refid="classpath"/>
  830. </javac>
  831. </target>
  832. <target name="ant-tasks" depends="jar, compile-ant-tasks">
  833. <copy file="${anttasks.dir}/org/apache/hadoop/ant/antlib.xml"
  834. todir="${build.anttasks}/org/apache/hadoop/ant"/>
  835. <jar destfile="${build.dir}/ant-${final.name}.jar">
  836. <fileset dir="${build.anttasks}"/>
  837. </jar>
  838. </target>
  839. <target name="clover" depends="clover.setup, clover.info" description="Instrument the Unit tests using Clover. Requires a Clover license and clover.jar in the ANT classpath. To use, specify -Drun.clover=true on the command line."/>
  840. <target name="clover.setup" if="clover.enabled">
  841. <taskdef resource="clovertasks"/>
  842. <mkdir dir="${clover.db.dir}"/>
  843. <clover-setup initString="${clover.db.dir}/hadoop_coverage.db">
  844. <fileset dir="src/java"/>
  845. </clover-setup>
  846. </target>
  847. <target name="clover.info" unless="clover.present">
  848. <echo>
  849. Clover not found. Code coverage reports disabled.
  850. </echo>
  851. </target>
  852. <target name="clover.check">
  853. <fail unless="clover.present">
  854. ##################################################################
  855. Clover not found.
  856. Please make sure clover.jar is in ANT_HOME/lib, or made available
  857. to Ant using other mechanisms like -lib or CLASSPATH.
  858. ##################################################################
  859. </fail>
  860. </target>
  861. <target name="generate-clover-reports" depends="clover.check, clover">
  862. <mkdir dir="${clover.report.dir}"/>
  863. <clover-report>
  864. <current outfile="${clover.report.dir}" title="${final.name}">
  865. <format type="html"/>
  866. </current>
  867. </clover-report>
  868. <clover-report>
  869. <current outfile="${clover.report.dir}/clover.xml" title="${final.name}">
  870. <format type="xml"/>
  871. </current>
  872. </clover-report>
  873. </target>
  874. </project>