diff options
author | wisberg <wisberg> | 2005-05-11 08:40:10 +0000 |
---|---|---|
committer | wisberg <wisberg> | 2005-05-11 08:40:10 +0000 |
commit | e458b498824ab0ecf898503bdc8e682dfc272ce8 (patch) | |
tree | ea0f5056bae2c1c1177ce9874f618ba1efd29548 /lib/ant | |
parent | a30b4b76da6491d53c364a8c805bb2d3d805c16c (diff) | |
download | aspectj-e458b498824ab0ecf898503bdc8e682dfc272ce8.tar.gz aspectj-e458b498824ab0ecf898503bdc8e682dfc272ce8.zip |
Ant 1.6.3 (again? hmm.)
Diffstat (limited to 'lib/ant')
62 files changed, 10080 insertions, 0 deletions
diff --git a/lib/ant/INSTALL b/lib/ant/INSTALL new file mode 100644 index 000000000..83c11675a --- /dev/null +++ b/lib/ant/INSTALL @@ -0,0 +1,2 @@ +For installation instructions see the manual in the docs subdirectory +or online at <http://ant.apache.org/manual/index.html>. diff --git a/lib/ant/KEYS b/lib/ant/KEYS new file mode 100644 index 000000000..2be9dfdac --- /dev/null +++ b/lib/ant/KEYS @@ -0,0 +1,310 @@ +This file contains the PGP keys of various developers. + +Users: pgp < KEYS + gpg --import KEYS +Developers: + pgp -kxa <your name> and append it to this file. + (pgpk -ll <your name> && pgpk -xa <your name>) >> this file. + (gpg --list-sigs <your name> + && gpg --armor --export <your name>) >> this file. + +Type Bits/KeyID Date User ID +pub 1024/FEECAAED 1998/11/11 Stefan Bodewig <bodewig@bost.de> + Stefan Bodewig <bodewig@apache.org> + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.3i + +mQCNAzZJoiMAAAEEAMzhUxTOC20Nprp6K4nLTiARt+EXii/dovNWWcfzZcYXi/lX +r3zpUTTZxlKQpd4RaHjFmGgoOraZE4jCRFARVcFJgYmGUKpcWJZO7YKL36WUizTM ++dyB2ycOtzlty1W5VmRL3FGqo67pKA9F/QHg3NSu9hY1W9xPPK7Kq3f+7KrtAAUR +tCBTdGVmYW4gQm9kZXdpZyA8Ym9kZXdpZ0Bib3N0LmRlPokAlQIFEDZSrGXHcgyK +jiW9zQEBshEEAMlG4qVjKp4/agdJG56M6izx9oaKecFLXHQJrFUy3w2PvZHFYtXc +osXKorX6bPrE8uB57MxbY2WapKeVRodlG0+j39vAf501duK8q2rktfWt9Cl4JjJ4 +DbWhSWfV1ci62u2gCxwYQe22F9Wh+vhOR5NK9RTbSKhupdlFsnrk/i7xiQCVAwUQ +NkmiI67Kq3f+7KrtAQGdxQQAlcFOzSv7G6M4uGbgvw7IGgrhx7rawtIyv9hLXgVC +7ua9xaZV8G0Fl9gh8RnbdcZ4R/aT+KIiAFaslfZ3t6hlC4MTbnAJqvdS/NO98ZkJ +YvnzZSKHflAbd5gyE7IVxBC9/xRlF/Wls5sYNwb6RjoRCaOjxN/y3WCLa3Va101v +zNy0I1N0ZWZhbiBCb2Rld2lnIDxib2Rld2lnQGFwYWNoZS5vcmc+iQCVAwUQOxIo +BK7Kq3f+7KrtAQGn6gP/SBACdHakA4H//otpyESSrk4PmyOaYF0Kyok43Gee2mT+ +m9+jZ3jLcC0oav6iH+otL/lhk9t/JDM8LjD2kAkdWWoIvvuPyCx97gOzojIo0Ve2 +1wuxJTF/VIjwyOtE8FzE7p4tkc6EubVpeZkV9Pq9HFRBCUcyKJDLnF4tbstScLU= +=OBLe +-----END PGP PUBLIC KEY BLOCK----- + + +pub 1024D/51898504 2001-05-29 Conor MacNeill <conor@cortexebusiness.com.au> +sig 3 51898504 2001-05-29 Conor MacNeill <conor@cortexebusiness.com.au> +sig 5F6B8B72 2002-01-11 Stefan Bodewig <bodewig@apache.org> +uid Conor MacNeill <conor@apache.org> +sig 3 51898504 2001-05-29 Conor MacNeill <conor@cortexebusiness.com.au> +sig 5F6B8B72 2002-01-11 Stefan Bodewig <bodewig@apache.org> +sub 1024g/D1ECBA5D 2001-05-29 +sig 51898504 2001-05-29 Conor MacNeill <conor@cortexebusiness.com.au> + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.0 (GNU/Linux) + +mQGiBDsTqygRBACiZckNdclTlQFonLaIKBFGhMy0KKByw0x8XA4iwdbCXuF6xNIc +HIFHajJ74AHchQ4d8xtomBy6b8yvFgWVeaZensvn69BlLeqGdyeJRzfPt6TgRnzZ +2eWhb0HXdG3JwxL/2BabDhHfs4YJOrgB/vhRFQku6oCMRiBPtJj2werD6wCg0/zp +jacYTw6+CR+sVvneCNyySFED/R3j10c4RnR8djgv1jKT8CKPuHYraupI9INEe+I6 +7qWjtJ02GzvMO6TElAtUsf4aysu45GgwkwEBnuG6mYb3Pq0V2c5tJc2A3Tj3DrdR +i3HUNwurbus76I0sPyyENPu12QPeC6mvWLEsxVJ9o0hRKFayGvYUmrwWK9UFLjvp +p9cXBACDHgLn7MAVLqUdYhRrUj/M+GOUpvBikEgoJJrEUmb5X4+++dffMh5HBIO4 +5LA11qEKuM2xnKqOilP7NLYXz1Fe0ocqv0jsHB4SprFTTai7ma31uwuRQvCQXVv1 +yJ5CLqYda64h/UA2kmmR2dfopmvDogYEMz/HU5voozxe7BEI7bQhQ29ub3IgTWFj +TmVpbGwgPGNvbm9yQGFwYWNoZS5vcmc+iFcEExECABcFAjsTqygFCwcKAwQDFQMC +AxYCAQIXgAAKCRCBBGRPUYmFBDgIAKCZztXqKhK6kXOnoGy7opCNmWU0lwCgsPDa +4m+ruW3ch0rfbqtR75S52R+IRgQQEQIABgUCPD6eTgAKCRCiEVrhX2uLcqCcAKCr +1Wylqju9YjBi5Twej9ze69JFBQCeOaMgo6yjnkcV3PnVInLlaMwPr5q0LUNvbm9y +IE1hY05laWxsIDxjb25vckBjb3J0ZXhlYnVzaW5lc3MuY29tLmF1PohXBBMRAgAX +BQI7E6xMBQsHCgMEAxUDAgMWAgECF4AACgkQgQRkT1GJhQTY0ACgmZmKheHzjPJs +5hybpyvnvEiPYqYAn2+ryxdtz8XyOMExGRmHNlhG7svsiEYEEBECAAYFAjw+nlUA +CgkQohFa4V9ri3JYYACg1WN+NCptfKVP1mbrIa+0ajztsiIAnAn+m70iwRRFZCxr +jcULoY5SjyTLuQENBDsTqy0QBACfsCxJ6iCtgX8zjlVtMsMfDqu72x5sYatWKn8c +u+4Oj5mi0x6azZIhwCa+K3ihLVOyG1mCRnzztGTIxWYRhq3TESIVOfgm+NgLGrmA +XUTFyCT+21TExLCpuVZKmUHsWXLxDtfQ1diPeQpiQ8+Fvb/4jLGFjFIrQ2VjtFQn +kumkSwADBgP9H0bF4hdMuVEcSJ9imxSoJshcOOA3Vd2+YiCTZhBygWM49wY5jNos +/DArIjNCE53IlOu/UtHB2jqkSqjF0soGYsUjeCWouiTP9hLuMKPjnqj9ryJPTDKz +nTCZ4TuB5CtzrKTlWLmPCPpFsGqe4KjMeKg/mqGqjPKl97xgStK9N9GIRgQYEQIA +BgUCOxOrLQAKCRCBBGRPUYmFBMM6AJsF3FFyZGEmbt9aGG1W/u0oI9mcLgCfQyJ+ +aalbspazea4J9zgi59SSwOM= +=cBdR +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/5F6B8B72 2001-05-28 Stefan Bodewig <bodewig@apache.org> +sig 3 5F6B8B72 2001-05-28 Stefan Bodewig <bodewig@apache.org> +sig 51898504 2002-01-11 Conor MacNeill <conor@cortexebusiness.com.au> +sig 3 F88341D9 2003-03-17 Lars Eilebrecht <lars@eilebrecht.org> +sig 3 2261D073 2003-03-17 Astrid Keáler (Kess) <kess@kess-net.de> +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik <dirkx@apache.org> +sig 75A67692 2003-03-18 Erik Abele <erik@codefaktor.de> +sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE <pgpCA@ct.heise.de> +sig 3 8103A37E 2003-04-04 Andre Malo <nd@apache.org> +uid Stefan Bodewig <bodewig@bost.de> +sig 3 5F6B8B72 2001-05-28 Stefan Bodewig <bodewig@apache.org> +sig 51898504 2002-01-11 Conor MacNeill <conor@cortexebusiness.com.au> +sig 3 F88341D9 2003-03-17 Lars Eilebrecht <lars@eilebrecht.org> +sig 3 2261D073 2003-03-17 Astrid Keáler (Kess) <kess@kess-net.de> +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik <dirkx@apache.org> +sig 75A67692 2003-03-18 Erik Abele <erik@codefaktor.de> +sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE <pgpCA@ct.heise.de> +sig 3 8103A37E 2003-04-04 Andre Malo <nd@apache.org> +uid Stefan Bodewig <stefan.bodewig@freenet.de> +sig 3 5F6B8B72 2003-03-07 Stefan Bodewig <bodewig@apache.org> +sig 3 F88341D9 2003-03-17 Lars Eilebrecht <lars@eilebrecht.org> +sig 3 2261D073 2003-03-17 Astrid Keáler (Kess) <kess@kess-net.de> +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik <dirkx@apache.org> +sig 75A67692 2003-03-18 Erik Abele <erik@codefaktor.de> +sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE <pgpCA@ct.heise.de> +sig 3 8103A37E 2003-04-04 Andre Malo <nd@apache.org> +sub 1024g/24774157 2001-05-28 +sig 5F6B8B72 2001-05-28 Stefan Bodewig <bodewig@apache.org> + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.0 (GNU/Linux) + +mQGiBDsSIk4RBADSCj6rUjV64tYCGT1DYKYR7GthyWpNdGHSYLbETBcDatAe1dzQ +5NsCgfrlybfyeY+y1lxr3T9bqf6zJWDw/718wff96qmmv1qzexSYtmIrj+h53V82 +EXwWOFuYMJisuxdT940iQzosm3GOv4MJdEg3oI2SgfEyRQQ6vO4Ob5rHDwCg5taZ +nrHOrXx2dIGHxpxRZ0SUl30D/jmtttFjYOQ3LBMriikz5mh2sK3ZnoSRF4o5O0zW +Ve6e2SFXOEjVjImKsH6KCbdQNelrAdgiyOoXClyQKsQ27pncbdWo6bO0E3POJZVm +XaeW7iudHVr63rU5PViXObIQrdQl0D59j5brKj4vdlTyUw8kaHPvbKPDEOwvZq4Y +LJQ5BACA1YilTeXRJqwFsNlpcxCHwlULD4QUVP496prQWf1B7Z6g0KvLGrQsO0Vn +Jcn+fEqukysTJixSXCPebosltd4RalJIupVYkp4w6MJ7biaDAlLuNhDcI/AiXTmV +dXUedVXIaM8I3Ne23gucwbAyc0Hvb+3cSAKRhl/azFQhuHBvlrQjU3RlZmFuIEJv +ZGV3aWcgPGJvZGV3aWdAYXBhY2hlLm9yZz6IWgQTEQIAGgULBwoDBAMVAwIDFgIB +AheAAhkBBQI7EiJPAAoJEKIRWuFfa4tyjzgAn3a+nFeNb3mAZQR4lRcXy3F+8eTh +AJ4iuLt4No6TUB9xNETrm3Y/0TvkU4hGBBARAgAGBQI8PtWPAAoJEIEEZE9RiYUE +nZIAnjOkQx1BfxN9+E7Yiz4MOxqZjSUpAKDQi0Alv/VR61fmR7KHZ11J2g+HSIiZ +BBMBAgAGBQI+dd8MAAoJED6Pt/L4g0HZJ2QD5RzYjJ0fi1Gr6NsjmIiU/lvfvPqj +bNoK2A2flkmLo2lk9jSa1AmF0ETOoCg8hZZHCbxyPZRdsmDJFXrZZWVTdUyZHhHb +Wx53DR3HavmVEEdDZBSkxfXdSu1CNq31sbdcumtd03FI6SV827cPzl1/RGUiOkEL +eK0hZb3IvSd5iEYEExECAAYFAj512sEACgkQ7tHqOSJh0HNFuACfb7quMJZHOk5p +pmTxf4GVS5bh3E4AniLa5788ktdcZCBE5Or+G+yuIGooiD8DBRA+daoa/W+IxiHQ +pxsRAkQFAKDmlWVuQnWfaGK9z8CP4vESTfiXyQCgpnf1yJWDgqWvUHOAvOeaTPDR +cOmIRgQQEQIABgUCPnekEAAKCRAVP6DNdaZ2ki/rAJ9Q0x5m4SE3hMNGUoMgS0MN +mYXDOQCdGa0QW2fZW4B1wSjiUIi6VgY+F7GIRgQQEQIABgUCPsoulgAKCRDb0kX8 +s7KhLBfwAKDV6uwqf9AMBJlr4aE45rWOnlWAeQCgjBYQVHWFjV1cmpT06vE4bMDV +J6+IRgQTEQIABgUCPo3OLAAKCRDKaTl0gQOjfpFKAJ9TY+mKmq0INLC9iqxbEETj +NwOn0gCgspeNEqX1SUjt932Lj3IvXR6fkAi0IFN0ZWZhbiBCb2Rld2lnIDxib2Rl +d2lnQGJvc3QuZGU+iFcEExECABcFAjsSOYEFCwcKAwQDFQMCAxYCAQIXgAAKCRCi +EVrhX2uLcsm6AKDaA//SYJv2pcXwGBC89OSzGvxy3gCg1kx6qu6zJKaWaE1L9oFq +Vc65OUSIRgQQEQIABgUCPD7VlQAKCRCBBGRPUYmFBNCzAJ9tv7tNS6NwaOZQ8cR0 +pGslJGKtuQCgpttMmhhRrUwyVuEXc+dKX7rdQMKImQQTAQIABgUCPnXfDwAKCRA+ +j7fy+INB2Vm6A+IDxiYtMvd/mad+7hRoKXvD5AddB1SwnvQdJe0ewStFBYZxZdNO +LXdkVngCwAJziPGZcQmocEHVMrN+Mxe+3OX0PEZ+3KOOsAUi+fTov2xvf8EWKgX9 +d0li9iEytVA4M0c52a3bPTC0Kki/KAY3m8oNvAmTwWB9dBSooFFDMIhGBBMRAgAG +BQI+ddrHAAoJEO7R6jkiYdBzruYAnAzvTrvDQNvoAoaDQJ+o/ydqMA8ZAJwNEOQD +Hsz+6ynbMPoQmKmUqfEISIg/AwUQPnWqIf1viMYh0KcbEQIkpwCeInf4o3C5Ykh/ +xBodVImrp2Cvcy8AoMn3me5p4Sl2rm2tjVxTJZt2sUr7iEYEEBECAAYFAj53pBoA +CgkQFT+gzXWmdpIpGgCgiTARP6Cf+JKOxUaVFr0L9DC5oUcAoIxF7D5mOVK/AFcp +1cxNk3BLtdq3iEYEEBECAAYFAj7KLjIACgkQ29JF/LOyoSwAbACglNp7V2Pw4U57 +5IuooM677bZf8pwAn2U2TcHj7PYprU+qYRkyJ3pa7FyyiEYEExECAAYFAj6NzjUA +CgkQymk5dIEDo35YPwCeJIU/monN96nP4jJjAuflEXMbemUAoJXq7oVCYuOCqWr/ +T3VW0DM3W+dntCpTdGVmYW4gQm9kZXdpZyA8c3RlZmFuLmJvZGV3aWdAZnJlZW5l +dC5kZT6IXAQTEQIAHAUCPmiBXAIbAwQLBwMCAxUCAwMWAgECHgECF4AACgkQohFa +4V9ri3JPKACfXhFOr4gMMIQwEGvUb6J/X4asuzIAnje2H9T1r/jSVi1NbIEtQfbp +myQXiJkEEwECAAYFAj513w8ACgkQPo+38viDQdmGkgPnUYJfHlDrQ2jYJWuPDve9 +n4pV9OvyIllKyLdfULjsLWXw4Jm+fMQJgWr2GEov1ZYIyS2+rGDZpbz/vxaBVbgq +M8TPdiXzxwU8AFq4k+Em4fKXR58ByLSJjvLLza61spNHJennEUFp3tTpEsr4bNuu +aoRYhtiKzTqNuoC+0x+IRgQTEQIABgUCPnXaxwAKCRDu0eo5ImHQc5lcAJ9FOoAL +4uHMuqHXrrxsEVPJvEJ2/ACggaOR62EziUqcqpdm/1Zy3P4T22iIPwMFED51qjj9 +b4jGIdCnGxECWssAoKnkR63bWGCFDB5YJtfZJ+nQq3TAAKD1bzG/kITQpIHsT2vC +Y1yBmlWbBYhGBBARAgAGBQI+d6QaAAoJEBU/oM11pnaS+9IAn0kFlXAzOhhu4r5f +glMVuw5bTAd0AKCtYRX2ESU/+tsE8vuXWtsMCGeI5YhGBBARAgAGBQI+yi67AAoJ +ENvSRfyzsqEsSccAoKqG39X2y6xoQa56nviF5iCj/oTFAJwLKx9GyKEUbSM9f/IQ +7AsZPhHT54hGBBMRAgAGBQI+jc41AAoJEMppOXSBA6N+xYgAn1HbGamcXTDYSFjn +3U5ik2vQa8nuAKC/uUM01gsdn+71EiAkmrjlH6H9MLkBDQQ7EiJUEAQAzVKWS8Qr +kysydbTJu2/14wIbz2Coi93aAGelwCwXSxf50JpYdY3Lkcvd0FqT8bcEnz43MCSx +8vlKubQtUpx9WMGIb4ixtShLJ4lAa6FJldhychz/dnxSNyz5N8W6sby4dTVxac0r +loxjAOurGanhG7TMtgfDi0cEEoXRyAVoKyMAAwUD/j1pJm4Npq2mlJoE7MK3vAhg +KwYHFflmJusmqvSAtRuFdT15pbMJrA5bAK+lA3SVOOhhWTCItlphSR2qxJCAcBTe +OMqUi5ohFcCkSRNvwmDtH+80B3BehlEsEKNk8Z3moa2ch7Oxnb6XEXH5tGJ5Qvx9 +Qid6ZfBaXx7bc8yKyCb4iEYEGBECAAYFAjsSIlQACgkQohFa4V9ri3INMgCgnc22 +kj8TfjktU6u4SUUqud25ZZcAn0B2b0zPjKjGuiwdKSnkFbNcFS3g +=9dY9 +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024R/697ECEDD 2000-04-06 Henri Gomez <hgomez@slib.fr> +sig 697ECEDD 2000-04-06 Henri Gomez <hgomez@slib.fr> + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.0 (GNU/Linux) + +mQCNAzjsydwAAAEEAMpwFU/ci3/wR3ryCGp9Exr+Rx/hTQ7hWAJcVw8ejlBXlT4T +yITlRUs0HGfRWxME2J55PuXXsIEPZzjfozNtvOyq8WlLlJ7iaiyWxVRoPJ25sSEj +C9etm6wjj4E66ZgzuElZkm1m69uEsCHPPNuz1oQ/g1O+SmIVxIYirlxpfs7dAAUR +tBxIZW5yaSBHb21leiA8aGdvbWV6QHNsaWIuZnI+iQCVAwUQOOzJ3IYirlxpfs7d +AQFQyQQAj0D9G0hEL7SQGaSCkkoXwvamQw42N8+tNm+jfWHWdE4HAiVlhJmI2GyD +sdcXVAcR8R7ILIRB5AY7a3bF+qMk0r+vO6oR878RKKn9AvtaAIOnrh6tr0tiPwf5 +XDUMySxIWJEF3SmJAy9Lq3bAl5GMzZCFHiS0NW2gtWgmr/u1RuM= +=6l+I +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024R/397DCAD5 2002-07-03 Henri Gomez <hgomez@users.sourceforge.net> +sig 397DCAD5 2002-07-03 Henri Gomez <hgomez@users.sourceforge.net> + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.0 (GNU/Linux) + +mQCNAz0i0UUAAAEEALXePN6IHne0W96YRMnR+4EXB6402QY5f8ZLcnSUZUH55Fb1 +qcZGBc3WRKlPiUvwBD+eVYgCpNSXF/H+oV1mawxNJN5XwqBEpfYmY8MRIPcqa61h +bJc3LBSm1qNf05G5Cwxeed+OgVm0r1HBy6DAgDHAqNlkC8DZ/BVgqMA5fcrVAAUR +tCpIZW5yaSBHb21leiA8aGdvbWV6QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD6JAJUD +BRA9ItFFFWCowDl9ytUBASNyA/458T84LUVhqq6Y9fPBAfcFMWY2kehuDWsQEXkO +46XoK+AnFZCkKuyDLqPHchVUO5pK/gZYsDK/xJkfh3u4FTDTsecb9wFmIeyayVIN +SI8o6l8EZzDX/PGwqEwzxHrbQkIgIktNn5ApIoazvdBpbkQfNj1vr2wWoMYPLAWM +8xzecA== +=UmZ8 +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/307A10A5 2002-07-18 Henri Gomez <hgomez@users.sourceforge.net> +sig 3 307A10A5 2002-07-18 Henri Gomez <hgomez@users.sourceforge.net> +sub 2048g/862B8F70 2002-07-18 +sig 307A10A5 2002-07-18 Henri Gomez <hgomez@users.sourceforge.net> + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.0 (GNU/Linux) + +mQGiBD02vbERBAC1v8fR6gjERpaz4UMfdy0hRVWCPSbOdF+Swm/IenjVzErco6zb +MTa13umUNrDPBy/tTWiCCZrOnqi7fgDzWqPEqrXJjKAFVLEWE6MmKylPPEPG1/bm +idkNGERSAZduvhKv777PzvEJJ/8eGe3wy/O8NbgIjCPtr4UklwCZS8cFuwCg8oMO +UdT8qZRtzdxdAyu1m5fUb+MD/3IKJYWXsdtb6iBphCU4f/BoyjVC9EZJ1ywLuiVM +siKbuaDUaXU9nWcbNKv+fx8uZ1NaadpfLokqqhnWcpnSiqw8HNR7SwsF1D33rkXK +O4FSuVss/tIoqGdWFcJyPkP4yP5shxqR335narVw2vDa0+BiWkALbA2qVsSIdZDB +LeFZA/47AMBS0U2BRk2rQT8LmMuFl7mR+wNBM4n7FUGdxsGn3TcYd4pXTNrEQPrV +YNdooKlikgGk4hgFnIFX09Spmimqgq0goFue81rttVdZZ4uep8dTghY6gwmvcOxX +jATbhWStBhdu9B35kzfHc+1QihD5Z94u4uyWIVBIzikcdiY8LbQqSGVucmkgR29t +ZXogPGhnb21lekB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+iFcEExECABcFAj02vbEF +CwcKAwQDFQMCAxYCAQIXgAAKCRAZMdaEMHoQpYijAKCCP68ndU/kTXR9XAKLvibC +3S8+1QCfUFQYte3Jo+MHKaWjsu9JGptRzo+5Ag0EPTa93RAIAKlsRJ5gOGTFsmaR +W9k6MIh4c/MCy7J7HUxT5xTdHROa+3zUh+FAE/JaOx9ZtZtH863DFHA8cP4L+tpi +PjBT6g2E94dwGcuH/OiSSCT4JSBukbGbOuLLdmFXqUl8+4gsL90Xal67FtNLwyLG +1n7geLir0byD+OT7VLA5w+6G0NOpJEveV/FIa2qLgdRZ8vz73ybgMh18hBUrUmro +jncp0rln2VU7VCH1C2aClKm7kK4mGAjIFIzKbguK+kM3b8NDHmXKpT6syyCtIM3h +prkV1TUCAFqLI32aSdlTN79lpeA2zDga9k4/4X/RDHsFpRN2neRFGTNUtuUgYpQQ +E5zWBmMAAwUH/RiGxyeBsad923IwE1+GAjxFl2tqF9xWk0J6yTnSK4nfhYAE9evV +jwDEok9jRl4ILCcXx6YN/d/lWNuSbARKHz/3hLiTouPpwd3SSJ8is2x9PgpJz5JX +cD0y1SkbPLvs3jH3ZmdcxZpuAmJeI/typqFKK5pWP44oXIH+XH/8nWDtmLEBkgKQ +/ATQWenMTmZ6MIJ6aWKWGkO9QS6iYRz3PPPGQ1O8W02CeprM2wBtlb8J1Z3RxNhM +rZcg/1Qi3V3D1HI4zw6tAFmDeBb8J4PaBQzqlhzx2EBTbfwNPhV8AlPvpxHEeGGn +v+O1yhZr33SnyZdINNoNDn+owVMdmkobe9GIRgQYEQIABgUCPTa93QAKCRAZMdaE +MHoQpRsTAJ4qst3MhLm48fBAEnzuzi/BIKr+AgCfYaCB/AvPoncQbHc8BcNGRimR +P9A= +=hQhz +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/EDF62C35 2002-04-10 Magesh Umasankar <umagesh@apache.org> +sig 3 EDF62C35 2002-04-10 Magesh Umasankar <umagesh@apache.org> +sig 3 5F6B8B72 2003-03-07 Stefan Bodewig <bodewig@apache.org> +sub 1024g/B5FFC53F 2002-04-10 +sig EDF62C35 2002-04-10 Magesh Umasankar <umagesh@apache.org> + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.0 (GNU/Linux) + +mQGiBDy0ebgRBADuKIKD8PuJ4wKEV1h2AprwJjxCRx8vn48XNwfLZuvhw8cpArtK +rZwhoGPPUPEEXgtTNerlKq4VwpAwcnvRz7oC/7aWkUbcR2sAyhfe2scohwPgw7Xv ++isWC0NDPdrxvXG/PUOG/cnELunr51ymybBqBxUd2gMhYIxPo67D+YPYLwCgwcZp +yc/6kJa116ESWHrti342GD8D/1srpnRs9CiS1DQF1uZ1wW4vzj4VD61tKsjdWD8D +V573R22iMDLSj4oMB536WxUH7snz8XsAKm/peqJ6G9m0smtmWA1ago5yzQj70WqF +xzWBhHn2I/YfAQ8pb2s9q1lClj8elnCxT65L27ydBAZteejb2VqjtQ6iGy86PUT2 +wRUvBADZmoV1eIZJEM5NnxBv1EtvRYZtIQEzZ8dO2A1LOS7qlVr8IypljNPLGhzX +VHNvVsjC9QMUSWeBsDedvQHQ3hJpIMnTI32XE1V4gX06gfVTZdhf2fLTtwnsHZp0 +oumqshGDVRhNJJdDYLikxWOxOfkNveKEqJFvtuBR+ZqqluQKebQlTWFnZXNoIFVt +YXNhbmthciA8dW1hZ2VzaEBhcGFjaGUub3JnPohXBBMRAgAXBQI8tHm4BQsHCgME +AxUDAgMWAgECF4AACgkQ76Pnee32LDWSRwCfeASWXvpdt7bSFPMtszU/7uPEktsA +n23mYUN5WKJA1ZreW+0CcZ2ESnOviEYEExECAAYFAj5ogYgACgkQohFa4V9ri3IW +YACgsxGig0PL0M86rJsA/IpXjBdg3ysAoJzsoUZ/7s2BxDfzF/FRTVIzS+TMuQEN +BDy0eb8QBACBVb9YDJRp9Irzmq71Jf9FIPw+4g/cWpF3t/Eb7eSzMcOvTAXyNIWz +aaOjHre7lFctHfq8ls/6gR7uqajiAnfQcfTcu7pp+F5KsU0Embt83SFzZ3aoJwET +mB/LqUyrrGDiue3lU+flJO7UmcsRvtk0+BDkyCeB9HgfdpXbBLCyuwADBQP+PNxX +4e1tg3ZJo/xNEnD2Re3HjmQRrr0RYJLUGjgQrAEONSgowx3IW8/JssmNJVjnYm0q +jSKsb8rergCFJhPNZ8Dd/k00pKcrq+IN6j7WTYLqPce87zrGAZUtmDwDSp5mxy5E +xWJJxsgBPk4YBQLzJt21A3BgK/i24Sze2VLbaZuIRgQYEQIABgUCPLR5vwAKCRDv +o+d57fYsNa8xAJ4mLfonZbd64+YY9rfvhIh3Vsl3AACeLPPKtma2K6XCfhTBEDnj +hzSr4vo= +=lBfF +-----END PGP PUBLIC KEY BLOCK----- +pub 1024D/265B4C63 2003-08-18 Antoine Levy-Lambert (Apache Ant Committer) <antoine@apache.org> +sig 3 265B4C63 2003-12-06 Antoine Levy-Lambert (Apache Ant Committer) <antoine@apache.org> +sig 3 5F6B8B72 2003-12-12 Stefan Bodewig <bodewig@apache.org> +uid Antoine Levy-Lambert (Apache Ant Committer) <antoine@antbuild.com> +sig 3 265B4C63 2003-08-18 Antoine Levy-Lambert (Apache Ant Committer) <antoine@apache.org> +sig 3 5F6B8B72 2003-12-12 Stefan Bodewig <bodewig@apache.org> +sub 1024g/A3060393 2003-08-18 +sig 265B4C63 2003-08-18 Antoine Levy-Lambert (Apache Ant Committer) <antoine@apache.org> + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.2 (MingW32) + +mQGiBD9AzmcRBACMqgb7IFvC/nLxw7mUAgHENeZXY3JOQJ8wVBevIbbMEeFvzHE2 +diFydqUXocPexduYr0ahkf033WvWdAiNqDLfVW/HFOsc1TpjbHkqPUHtJ62Ya5tg +nH4UGN9BYZfMbfVDOSz41lYwmfK5HYgpZN/sBQBSKf2qgoFB+LxYaae8YwCgrWlu +fYhf7fkKbbdSf3BGS67ggNkD/0VvkXkw1SEnPaqrkKGkPKomCTb2auGxcYYI3/rP +1m+SGRf0gE1NtocmIEitiR6WvfKUjoMAXSCp5KdnUXmO9rwzkM002KCA7K5CY+e/ +2bLDuiQ3rNiD4mFfG6M+UnmZ+GMFba1p9Cp4PqLNLsCHz67t7hEsscTZQ8mZ9xKM ++GCsA/9P+XFM7JDn9MLhYab9qo1CkceBkthUP6jWGjuAZ00elmBCkpkzNv5aIzss +xih2GpaU/tmcMjw8FGp0dTwzqdpmbZBLjunRnuBTir4m4l5G9rwl4JbfK1PVqk4a +VKkh9W7/yqBcEfNcsfJO9cqaQ+PzcnCoDiD9UHEBYzUhrCKwhLRCQW50b2luZSBM +ZXZ5LUxhbWJlcnQgKEFwYWNoZSBBbnQgQ29tbWl0dGVyKSA8YW50b2luZUBhbnRi +dWlsZC5jb20+iFsEExECABsFAj9AzmcGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQ +hhTWqyZbTGMnOgCeJV2gI+1CIxMR7dcIhXjPkiusreIAn2SGOsPS0o89l0EIVuc9 +J2F03aB+iEYEExECAAYFAj/ZwioACgkQohFa4V9ri3J8CACgiGlh+td0BAnJPq19 +ovEQR2DJ02MAoLP203EF+BLPpykeTcGp8UEWmeGQtEBBbnRvaW5lIExldnktTGFt +YmVydCAoQXBhY2hlIEFudCBDb21taXR0ZXIpIDxhbnRvaW5lQGFwYWNoZS5vcmc+ +iF4EExECAB4FAj/SSwYCGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQhhTWqyZb +TGOh/QCfbrSoipMlizyGT6c8BOPEd9zzfi0AnRRTqTDzXzsGk4CG/BJME9CCm7Ts +iEYEExECAAYFAj/ZwiMACgkQohFa4V9ri3IOVACgh2QHS1+cVjvM4eLjls1bJwWi +o5IAoLtAszHrwHS5qrhvr2rtnlyyyV2guQENBD9AzmkQBACNpBfqi2PweozCtxoX +PqzKdRDKqCw7TOrDR6lbP3z/ov/1SN5Vc0XqNzBSGqwBcmGWtneABkX7n4uzJrC5 +wvX/TZ/DkMvypPyeNVMu+/ZMlzdbx06OUDKr6Fy/NtaI7cN1rw+Igyv22Q8ilhhg +s/5Rdj84EtJkWQjVRml6wXSAZwADBwP/TqyhOC4sA5YrePYGH8i46h0SU9dXjfEF +JijC8vXZ+BNQHQVK3fjEXedZL8Zvvp1bsMu7Muz9SMnqygM1unp2NGxLRd/9315p +Qh0VStYKn0xq13ybOKr0Gsyx5yyl3Nzlu/1qAR0es/zN4jV7/IQi3R2GOvezcpHX +mkbsYiZAhu2IRgQYEQIABgUCP0DOaQAKCRCGFNarJltMYxcsAKCSJJUABlXYnLBj +b+WtmAzu0JjZNACdFJ4KIATJDK/5ajFq5+irOpodoHc= +=UomR +-----END PGP PUBLIC KEY BLOCK----- diff --git a/lib/ant/LICENSE b/lib/ant/LICENSE new file mode 100644 index 000000000..f820d4bd3 --- /dev/null +++ b/lib/ant/LICENSE @@ -0,0 +1,203 @@ +/* + * Apache License + * Version 2.0, January 2004 + * http://www.apache.org/licenses/ + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, + * and distribution as defined by Sections 1 through 9 of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by + * the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all + * other entities that control, are controlled by, or are under common + * control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the + * direction or management of such entity, whether by contract or + * otherwise, or (ii) ownership of fifty percent (50%) or more of the + * outstanding shares, or (iii) beneficial ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity + * exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, + * including but not limited to software source code, documentation + * source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical + * transformation or translation of a Source form, including but + * not limited to compiled object code, generated documentation, + * and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or + * Object form, made available under the License, as indicated by a + * copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object + * form, that is based on (or derived from) the Work and for which the + * editorial revisions, annotations, elaborations, or other modifications + * represent, as a whole, an original work of authorship. For the purposes + * of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, + * the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including + * the original version of the Work and any modifications or additions + * to that Work or Derivative Works thereof, that is intentionally + * submitted to Licensor for inclusion in the Work by the copyright owner + * or by an individual or Legal Entity authorized to submit on behalf of + * the copyright owner. For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent + * to the Licensor or its representatives, including but not limited to + * communication on electronic mailing lists, source code control systems, + * and issue tracking systems that are managed by, or on behalf of, the + * Licensor for the purpose of discussing and improving the Work, but + * excluding communication that is conspicuously marked or otherwise + * designated in writing by the copyright owner as "Not a Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity + * on behalf of whom a Contribution has been received by Licensor and + * subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * copyright license to reproduce, prepare Derivative Works of, + * publicly display, publicly perform, sublicense, and distribute the + * Work and such Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, + * use, offer to sell, sell, import, and otherwise transfer the Work, + * where such license applies only to those patent claims licensable + * by such Contributor that are necessarily infringed by their + * Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You + * institute patent litigation against any entity (including a + * cross-claim or counterclaim in a lawsuit) alleging that the Work + * or a Contribution incorporated within the Work constitutes direct + * or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate + * as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the + * Work or Derivative Works thereof in any medium, with or without + * modifications, and in Source or Object form, provided that You + * meet the following conditions: + * + * (a) You must give any other recipients of the Work or + * Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices + * stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works + * that You distribute, all copyright, patent, trademark, and + * attribution notices from the Source form of the Work, + * excluding those notices that do not pertain to any part of + * the Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its + * distribution, then any Derivative Works that You distribute must + * include a readable copy of the attribution notices contained + * within such NOTICE file, excluding those notices that do not + * pertain to any part of the Derivative Works, in at least one + * of the following places: within a NOTICE text file distributed + * as part of the Derivative Works; within the Source form or + * documentation, if provided along with the Derivative Works; or, + * within a display generated by the Derivative Works, if and + * wherever such third-party notices normally appear. The contents + * of the NOTICE file are for informational purposes only and + * do not modify the License. You may add Your own attribution + * notices within Derivative Works that You distribute, alongside + * or as an addendum to the NOTICE text from the Work, provided + * that such additional attribution notices cannot be construed + * as modifying the License. + * + * You may add Your own copyright statement to Your modifications and + * may provide additional or different license terms and conditions + * for use, reproduction, or distribution of Your modifications, or + * for any such Derivative Works as a whole, provided Your use, + * reproduction, and distribution of the Work otherwise complies with + * the conditions stated in this License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, + * any Contribution intentionally submitted for inclusion in the Work + * by You to the Licensor shall be under the terms and conditions of + * this License, without any additional terms or conditions. + * Notwithstanding the above, nothing herein shall supersede or modify + * the terms of any separate license agreement you may have executed + * with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade + * names, trademarks, service marks, or product names of the Licensor, + * except as required for reasonable and customary use in describing the + * origin of the Work and reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or + * agreed to in writing, Licensor provides the Work (and each + * Contributor provides its Contributions) on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied, including, without limitation, any warranties or conditions + * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + * PARTICULAR PURPOSE. You are solely responsible for determining the + * appropriateness of using or redistributing the Work and assume any + * risks associated with Your exercise of permissions under this License. + * + * 8. Limitation of Liability. In no event and under no legal theory, + * whether in tort (including negligence), contract, or otherwise, + * unless required by applicable law (such as deliberate and grossly + * negligent acts) or agreed to in writing, shall any Contributor be + * liable to You for damages, including any direct, indirect, special, + * incidental, or consequential damages of any character arising as a + * result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, + * work stoppage, computer failure or malfunction, or any and all + * other commercial damages or losses), even if such Contributor + * has been advised of the possibility of such damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing + * the Work or Derivative Works thereof, You may choose to offer, + * and charge a fee for, acceptance of support, warranty, indemnity, + * or other liability obligations and/or rights consistent with this + * License. However, in accepting such obligations, You may act only + * on Your own behalf and on Your sole responsibility, not on behalf + * of any other Contributor, and only if You agree to indemnify, + * defend, and hold each Contributor harmless for any liability + * incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following + * boilerplate notice, with the fields enclosed by brackets "[]" + * replaced with your own identifying information. (Don't include + * the brackets!) The text should be enclosed in the appropriate + * comment syntax for the file format. We also recommend that a + * file or class name and description of purpose be included on the + * same "printed page" as the copyright notice for easier + * identification within third-party archives. + * + * Copyright [yyyy] [name of copyright owner] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ diff --git a/lib/ant/LICENSE.dom b/lib/ant/LICENSE.dom new file mode 100644 index 000000000..05013f198 --- /dev/null +++ b/lib/ant/LICENSE.dom @@ -0,0 +1,71 @@ +This license came from: +http://www.w3.org/Consortium/Legal/copyright-software-19980720 + + +W3C® SOFTWARE NOTICE AND LICENSE +Copyright © 1994-2001 World +Wide Web Consortium, <a href="http://www.w3.org/">World +Wide Web Consortium</a>, (<a href= +"http://www.lcs.mit.edu/">Massachusetts Institute of +Technology</a>, <a href="http://www.inria.fr/">Institut National de +Recherche en Informatique et en Automatique</a>, <a href= +"http://www.keio.ac.jp/">Keio University</a>). All Rights Reserved. +http://www.w3.org/Consortium/Legal/ + +This W3C work (including software, documents, or other related +items) is being provided by the copyright holders under the +following license. By obtaining, using and/or copying this work, +you (the licensee) agree that you have read, understood, and will +comply with the following terms and conditions: +Permission to use, copy, modify, and distribute this software +and its documentation, with or without modification, for any +purpose and without fee or royalty is hereby granted, provided that +you include the following on ALL copies of the software and +documentation or portions thereof, including modifications, that +you make: + +The full text of this NOTICE in a location viewable to users of +the redistributed or derivative work. + +Any pre-existing intellectual property disclaimers, notices, or +terms and conditions. If none exist, a short notice of the +following form (hypertext is preferred, text is permitted) should +be used within the body of any redistributed or derivative code: +"Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of +Technology, Institut National de +Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. +http://www.w3.org/Consortium/Legal/" + +Notice of any changes or modifications to the W3C files, +including the date changes were made. (We recommend you provide +URIs to the location from which the code is derived.) + +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND +COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF +MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE +USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD +PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, +SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE +SOFTWARE OR DOCUMENTATION. + +The name and trademarks of copyright holders may NOT be used in +advertising or publicity pertaining to the software without +specific, written prior permission. Title to copyright in this +software and any associated documentation will at all times remain +with copyright holders. +____________________________________ +This formulation of W3C's notice and license became active on +August 14 1998 so as to improve compatibility with GPL. This +version ensures that W3C software licensing terms are no more +restrictive than GPL and consequently W3C software may be +distributed in GPL packages. See the older formulation for the +policy prior to this date. Please see our Copyright FAQ for common +questions about using materials from +our site, including specific terms and conditions for packages like +libwww, Amaya, and Jigsaw. +Other questions about this notice can be +directed to site-policy@w3.org. + +webmaster diff --git a/lib/ant/LICENSE.sax b/lib/ant/LICENSE.sax new file mode 100644 index 000000000..006c924b2 --- /dev/null +++ b/lib/ant/LICENSE.sax @@ -0,0 +1,20 @@ +This license came from: http://www.megginson.com/SAX/copying.html + However please note future versions of SAX may be covered + under http://saxproject.org/?selected=pd + + +This page is now out of date -- see the new SAX site at +http://www.saxproject.org/ for more up-to-date +releases and other information. Please change your bookmarks. + + +SAX2 is Free! + +I hereby abandon any property rights to SAX 2.0 (the Simple API for +XML), and release all of the SAX 2.0 source code, compiled code, and +documentation contained in this distribution into the Public Domain. +SAX comes with NO WARRANTY or guarantee of fitness for any +purpose. + +David Megginson, david@megginson.com +2000-05-05
\ No newline at end of file diff --git a/lib/ant/LICENSE.xerces b/lib/ant/LICENSE.xerces new file mode 100644 index 000000000..70cb54a0d --- /dev/null +++ b/lib/ant/LICENSE.xerces @@ -0,0 +1,56 @@ +/* + * The Apache Software License, Version 1.1 + * + * + * Copyright (c) 1999-2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Xerces" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation and was + * originally based on software copyright (c) 1999, International + * Business Machines, Inc., http://www.ibm.com. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + */ diff --git a/lib/ant/NOTICE b/lib/ant/NOTICE new file mode 100644 index 000000000..1fb6dde47 --- /dev/null +++ b/lib/ant/NOTICE @@ -0,0 +1,15 @@ + ========================================================================= + == NOTICE file corresponding to the section 4 d of == + == the Apache License, Version 2.0, == + == in this case for the Apache Ant distribution. == + ========================================================================= + + This product includes software developed by + The Apache Software Foundation (http://www.apache.org/). + + This product includes also software developed by : + - the W3C consortium (http://www.w3c.org) , + - the SAX project (http://www.saxproject.org) + + Please read the different LICENSE files present in the root directory of + this distribution. diff --git a/lib/ant/README b/lib/ant/README new file mode 100644 index 000000000..263c111d5 --- /dev/null +++ b/lib/ant/README @@ -0,0 +1,70 @@ + + A N T + + + What is it? + ----------- + + Ant is a Java based build tool. In theory it is kind of like "make" + without makes wrinkles and with the full portability of pure java code. + + + Why? + ---- + + Why another build tool when there is already make, gnumake, nmake, jam, + and others? Because all of those tools have limitations that its original + author couldn't live with when developing software across multiple platforms. + + Make-like tools are inherently shell based. They evaluate a set of + dependencies and then execute commands not unlike what you would issue on a + shell. This means that you can easily extend these tools by using or writing + any program for the OS that you are working on. However, this also means that + you limit yourself to the OS, or at least the OS type such as Unix, that you + are working on. + + Makefiles are inherently evil as well. Anybody who has worked on them for any + time has run into the dreaded tab problem. "Is my command not executing + because I have a space in front of my tab!!!" said the original author of Ant + way too many times. Tools like Jam took care of this to a great degree, but + still use yet another format to use and remember. + + Ant is different. Instead a model where it is extended with shell based + commands, it is extended using Java classes. Instead of writing shell + commands, the configuration files are XML based calling out a target tree + where various tasks get executed. Each task is run by an object which + implements a particular Task interface. + + Granted, this removes some of the expressive power that is inherent by being + able to construct a shell command such as `find . -name foo -exec rm {}` but + it gives you the ability to be cross platform. To work anywhere and + everywhere. And hey, if you really need to execute a shell command, Ant has + an exec rule that allows different commands to be executed based on the OS + that it is executing on. + + The Latest Version + ------------------ + + Details of the latest version can be found on the Apache Ant + Project web site <http://ant.apache.org/>. + + + Documentation + ------------- + + Documentation is available in HTML format, in the docs/ directory. + For information about building and installing Ant, see + docs/manual/index.html + + + Licensing + --------- + + This software is licensed under the terms you may find in the file + named "LICENSE" in this directory. + + + Thanks for using Ant. + + The Apache Ant Project + <http://ant.apache.org/> diff --git a/lib/ant/TODO b/lib/ant/TODO new file mode 100644 index 000000000..8bbbc3d6a --- /dev/null +++ b/lib/ant/TODO @@ -0,0 +1,9 @@ +Things that are scheduled for Ant 1.6.2. Once this list is empty, we +can roll the first beta. + +Please go ahead and assign things that are not already assigned to +anybody else (assignments look like [Stefan]) to yourself - and please +remove items from this list once they are complete. + + + diff --git a/lib/ant/WHATSNEW b/lib/ant/WHATSNEW new file mode 100644 index 000000000..1d8d85e3f --- /dev/null +++ b/lib/ant/WHATSNEW @@ -0,0 +1,2901 @@ +Changes from Ant 1.6.2 to Ant 1.6.3 +=================================== + +Changes that could break older environments: +-------------------------------------------- + +* The subant task used the canonical version of a file path. This + has been changed to use the absolute path. Bugzilla 30438. + +* Tar now writes two EOF blocks rather than one. + Bugzilla report 28776 + +* The Reference object now has a project field which it uses in preference + to the project passed in. This allows composite references to be + handled to nested projects. + Bugzilla report 25777 + +* <junit> with filtertrace="true" will now also swallow lines for the + sun.reflect package. If you need to see them in your stack trace, + you must set filtertrace to false. + Bugzilla Report 22758 + +* The jikes compiler adapter now supports -bootclasspath, -extdirs and + -sourcepath and also uses the same logic for debug flags as javac. + This means, the jikes compiler adapter now requires Jikes 1.15 or later. + Bugzilla Reports 25868, 26404 and 32609. + +* Targets with identical name work in imported project. Bugzilla Report 34566. + +* The gcj compiler adapter used to include the Java runtime classes + even if includeJavaRuntime was set to false, unless the + bootclasspath has been specified as well. It will now always adhere + to includeJavaRuntime, you may need to set it to true explicitly now + if you relied on the old behavior. + +Other changes: +-------------- + +* <javadoc> can now take an attribute 'executable'. Bugzilla report 30606. + +* New attribute ignorecontents for <different> selector + +* Javadoc fixes for Location, Project, and RuntimeConfigurable + Bugzilla 30160. + +* Enable to choose the regexp implementation without system property. + Bugzilla Report 15390. + +* Expose objects and methods in IntrospectionHelper. Bugzilla Report 30794. + +* Allow file attribute of <move> to rename a directory. + Bugzilla Report 22863. + +* Add xmlcatalog nested element to XmlProperty. Bugzilla report 27053. + +* New attribute alwayslog for <redirector> type. + +* Added <target> nested elements to <ant> and <antcall> to allow + specification of multiple sub-build targets, which are executed + with a single dependency analysis. + +* Refactored Target invocation into org.apache.tools.ant.Executor + implementations. Bugzilla Reports 21421, 29248. + +* <rmic> now also supports Kaffe's rmic version shipping with Kaffe + 1.1.2 and above. + +* added casesensitive attribute to <globmapper> and <regexpmapper> + Bugzilla report 16686 + +* added handledirsep attribute to <globmapper> and <regexpmapper> + Bugzilla report 32487 + +* added a new mapper <filtermapper> + +* When a BuildListener tried to access System.err or System.out, Ant + would have thrown an exception - this has been changed. Ant now + silently ignores the message. BuildListeners still should avoid + accessing either stream. + +* Added a comment attribute to the zip task. + Bugzilla report 22793. + +* Overloaded FileUtils.createNewFile with a boolean mkdirs attribute + to create nonexistent parent directories. + +* <apply> has a new "force" attribute that, when true, disables + checking of target files. + +* Made the dest attribute of the apply task optional; mapped target + filenames will be interpreted as absolute pathnames when dest is omitted. + +* Changed default tempdir for <javac> from user.dir to java.io.tmpdir. + +* Added searchpath attribute to <exec> for searching path variable(s) + when resolveexecutable = true. + +* Added revision and userid attributes to <pvcs> documentation. + +* Added support to the touch task for a mkdirs attribute to create + nonexistent parent directories before touching new files. + +* Added support to the touch task for a pattern attribute to allow + alternate datetime formats. + +* Added support to the touch task to map touched files using a nested + mapper element. + +* Added support to the touch task for a verbose attribute to suppress + logging of new file creation. + +* bad link in docs to the enhancement page in bugzilla. + Bugzilla report 33252. + +* Added length task to get strings' and files' lengths. + +* <native2ascii> and <javah> now also support Kaffe's versions. + +* Recursive token expansion in a filterset can now be disabled by + setting its recurse attribute to false. + +* Pathconvert no longer requires that one of (targetos|pathsep|dirsep) + be set; platform defaults are used when this is the case. + +* Added preservelastmodified attribute to fixcrlf task. Bugzilla 25770. + +* Added isfileselected condition. + +* Added verbose="true|false" attribute to <subant>. When verbose is enabled, + the directory name is logged on entry and exit of the sub-build. Bugzilla 33787. + +* Added -nouserlib option to allow running ant without automatically loading + up ${user.home}/.lib/ant. This is useful when compiling ant, and antlibs. + Modified the build.sh and build.bat to use the option. + +* Added -noclasspath option to allow running ant WITHOUT using CLASSPATH env + variable. Modified ant.bat to do this so that %CLASSPATH% is not looked at. + +* Add else attribute to the condition task, which specifies an + optional alternate value to set the property to if the nested + condition evaluates to false. Bugzilla report 33074. + +* Ant generated jar files should now be detected as jar files by + Solaris. Bugzilla Report 32649. + +* Added two tutorials + - beginner: introduction into Ant + - task developers: using path, fileset etc + +* <rpm> has new attributes failonerror and quiet. + +Fixed bugs: +----------- + +* Do not pass on ThreadDeath when halting <java fork="false">. Bugzilla + 32941. + +* Killing a thread running <java fork="true"> (e.g. from an IDE) would + not stop the forked process. Bugzilla 31928. + +* Programs run with <java fork="true"> can now accept standard input + from the Ant console. (Programs run with <java fork="false"> could + already do so.) Bugzilla 24918. + +* AbstractCvsTask prematurely closed its outputStream and errorStream. + Bugzilla 30097. + +* Impossible to use implicit classpath for <taskdef> + when Ant core loader != Java application loader and + Path.systemClassPath taken from ${java.class.path} Bugzilla 30161. + +* MacroInstance did not clean up nested elements correctly in the execute + method, causing multiple use of the same macro instance with nested + elements to fail. + +* checksum fileext property doc wrong. Bugzilla 30787. + +* FTP task, getTimeDiff method was returning wrong value. Bugzilla 30595. + +* Zip task was not zipping when only empty directories were found. + Bugzilla 30365. + +* Jar task was not including manifest files when duplicate="preserve" was + chosen. Bugzilla 32802. + +* Classpath was treated in the same way as -lib options. Bugzilla 28046. + +* Manual page for cvsversion contained incorrect attributes and did not + say since 1.6.1. Bugzilla 31408. + +* Typo in definition of <cvsversion> task causing it not to be defined. + Bugzilla 31403. + +* Execution of top level tasks in imported files get delayed by targets. + Bugzilla report 31487. + +* ExecTask executes checkConfiguration() even though os does not match. + Bugzilla report 31805. + +* Concat task instance could not be run twice. + Bugzilla report 31814. + +* NPE using XmlLogger and antlib. + Bugzilla report 31840. + +* Properties.propertyNames() should be used instead of .keys(). + Bugzilla report 27261. + +* Target location is not set for default target. + Bugzilla report 32267. + +* Incorrect classloader parent in junittask when using with + ant-junit.jar and junit.jar not in the project classloader. Bugzilla + report 28474. + +* getResources() on the classloader returned by ClasspathUtils would + see each resource twice - if the resource is in the project + classpath and if the classloader is requested with a null path. + +* XMLValidate used URL#getFile rather than the ant method FileUtils#fromURI + Bugzilla report 32508 + +* fixed Regexp-Mapper docs which gave outdated instructions (optional.jar) + Bugzilla report 28584 + +* <scp> using <fileset> didn't work with OpenSSH 3.9 and later. + Bugzilla report 31939 + +* <setproxy> failed to set user/password on some JDKs. + Bugzilla report 32667 + +* untar would go into infinite loop for some invalid tar files. + Bugzilla report 29877 + +* forked <javac> won't pass -source to a JDK 1.1 or 1.2 javac anymore. + Bugzilla report 32948 + +* propertyset references did not handle nested propertyset references. + +* oata.types.Description.getDescription(Project) would throw a + NullPointerException when the "ant.targets" reference was unset. + +* Wrapper scripts did not detect WINNT value of dynamic OS environment + variable when logged into workstations using Novell authentication. + Bugzilla Report 30366. + +* DependScanner.getResource() always returned nonexistent resources, + even when the resource actually existed. Bugzilla Report 30558. + +* <apply> was broken with classfilesets. Bugzilla Report 30567. + +* <available> returned false positives when checking a file + passed in with the current basedir leading twice: + e.g. ${basedir}${file.separator}${basedir}${file.separator}foo . + +* The first file open that took place when using input files with the + <exec>, <apply>, or <java> tasks was always logged to System.out + instead of to the managing Task. + +* <telnet> and <rexec> would try to disconnect from servers they never + connetced to, potentially leading to exceptions in commons-net. + Bugzilla Report 33618. + +* <zip> would drop files matched by defaultexcludes during updates. + Bugzilla Report 33412. + +* <zip> couldn't store files with size between 2GB and 4GB (the + upper limit set by the ZIP format itself). Bugzilla Report 33310. + +* NPE when when <presetdef> tries to configure a task that + cannot be instantiated. Bugzilla Report 33689. + +* <javac debug="false"> created an invalid command line when running + the Symantec Java compiler. + +* Get with usetimestamp did not work on Java 1.2. + +* Get with usetimestamp did not work when local timestamp roughly >= now. + +* The framed JUnit report now handles multiple reports for the same + testcase properly. Bugzilla Report 32745. + +* <cab> didn't work for files with spaces in their names on Windows. + Bugzilla Report 17182. + +* The VAJ tasks could fail if the project name contained characters + that need to get URL encoded. Bugzilla Report 23322. + +* The FTP task could crash with an ArrayIndexOutOfBoundsException + Bugzilla Report 28797 + +* Improved handling of paths on cygwin + Bugzilla Report 31245 + +* TarInputStream#read() wasn't implemented correctly. Bugzilla Report + 34097. + +* <xslt> failed to process file-hierarchies of more than one level if + scanincludeddirectories was true. Bugzilla Report 24866. + +* forkmode="perBatch" or "once" would ignore extension attributes that + had been specified for <formatter>s. Bugzilla Report 32973. + +* minor performance update of Locator.fromUri. Bugzilla Report 34529. + +* The refid attribute of the I/O redirector was not functional. + +* SQL task would try access result sets of statements that didn't + return any, causing problems with Informix IDS 9.2 and IBM DB2 8.1 + FixPak 6 (or later). Bugzilla Reports 27162 and 29954. + +* make sure that Zip and its derivates call the createEmptyZip method when + there are no resources to zip/jar/... + +* ant.bat was missing runAntNoClasspath label for goto. + Bugzilla 34510. + + +Changes from Ant 1.6.1 to Ant 1.6.2 +=================================== + +Changes that could break older environments: +-------------------------------------------- + +* The import task used the canonical version of a file path. This + has been changed to use the absolute path. Bugzilla 28505. + +* ant-xalan2.jar has been removed since the only class contained in it + didn't depend on Xalan-J 2 at all. Its sole dependency has always + been TraX and so it has been merged into ant-trax.jar. + +* All exceptions thrown by tasks are now wrapped in a buildexception + giving the location in the buildfile of the task. + +* Nested elements for namespaced tasks and types may belong to the + Ant default namespace as well as the task's or type's namespace. + +* <junitreport> will very likely no longer work with Xalan-J 1. + + Note that Xalan-J 1 has been deprecated for a very long time and we + highly recommend that you upgrade. + + If you really need to continue using Xalan-J 1, please copy the + junit-frames-xalan1.xsl from the distribution's etc directory as + junit-frames.xsl into a new directory and use the task's styledir + attribute to point to. This is the last version of the XSLT + stylesheet that is expected to be compatible with Xalan-J 1. + +* <csc>'s extraoptions can now contain multiple arguments. + Bugzilla Report 23599. + +* <macrodef> with default values set by properties would be + seen as new definitions when called twice with different properties. + This was confusing so the definitions are now treated as similar. + Bugzilla Report 31215. + +* <javadoc> has a new attribute "includenosourcepackages" that can be + used to document packages that don't hold source files but a + package.html file. Bugzilla Report 25339. + +Fixed bugs: +----------- + +* eliminate memory leak in AntClassLoader. Bugzilla Report 8689. + +* subant haltonfailure=false did not catch all failures. Bugzilla Report 27007. + +* macrodef @@ escaping was broken. Bugzilla Report 27069. + +* SQL task did not work with Informix IDS 9.2. Bugzilla Report 27162. + +* MacroDef did not allow attributes named 'description'. Bugzilla Report 27175. + +* Throw build exception if name attribute missing from patternset#NameEntry. + Bugzilla Report 25982. + +* Throw build exception if target repeated in build file, but allow targets + to be repeated in imported files. + +* <apply> didn't compare timestamps of source and targetfiles when + using a nested <filelist>. Bugzilla Report 26985. + +* tagdiff.xml was broken in ant 1.6.1. Bugzilla Report 27057. + +* if the basedir contained .. or . dirs, and the build file name contained + .. or ., the basedir was set incorrectly. Bugzilla Report 26765. + +* regression from ant 1.5, exec task outputted two redundant trailing newlines. + Bugzilla Report 27546. + +* NPE when running commons listener. Bugzilla Report 27373. + +* <java> swallowed the stack trace of exceptions thrown by the + executed program if run in the same VM. + +* -projecthelp swallowed (configuration) errors silently. + Bugzilla report 27732. + +* filterset used by filtertask doesn't respect loglevel. Bugzilla Report 27568. + +* wrong compare used in ProjectComponent for logging. Bugzilla Report 28070. + +* failOnAny attribute for <parallel> was broken. Bugzilla Report 28122. + +* If <javac> uses gcj and any of the nested <compilerarg>s implies + compilation to native code (like -o or --main), Ant will not pass + the -C switch to gcj. This means you can now compile to native code + with gcj which has been impossible in Ant < 1.6.2. + +* <import optional="false"> and <import optional="true"> + behaved identically. + +* <xslt> now sets the context classloader if you've specified a nested + <classpath>. Bugzilla Report 24802. + +* <zip> and friends would delete the original file when trying to update + a read-only archive. Bugzilla Report 28419. + +* <junit> and <assertions> are working together. Bugzilla report 27218 + +* AntClassLoader#getResource could return invalid URLs. Bugzilla + Report 28060. + +* Ant failed to locate tools.jar if the jre directory name wasn't all + lowercase. Bugzilla Report 25798. + +* Redirector exhibited inconsistent behavior with regard to split + output. When sent to file only, files would be created in all + cases; when split file-property, files were only created if + writes were performed. + +* fixed case handling of scriptdef attributes and elements. + +* UNC pathnames did not work for ANT_HOME or -lib locations on Windows. + Bugzilla report 27922. + +* replacestring tokenfilter only replaced the first occurrence. + +* AntLikeTasksAtTopLevelTest failed on cygwin. + +* I/O-intensive processes hung when executed via <exec spawn="true">. + Bugzilla reports 23893/26852. + +* JDependTask did not close an output file. Bugzilla Report 28557. + +* Using <macrodef> could break XmlLogger. Bugzilla Report 28993. + +* <genkey> no longer requires keytool to be in your PATH. Bugzilla + Report 29382. + +* <symlink> could create cyclic links. Bugzilla Report 25181. + +* <zip whenempty="skip"> didn't work in a common situation. Bugzilla + Report 22865. + +* <scp> now properly handles remote files and directories with spaces + in their names. Bugzilla Report 26097. + +* <scp> now has (local|remote)tofile attributes to rename files on the + fly. Bugzilla Report 26758. + +* <telnet> and <rexec> didn't close the session. Bugzilla Report 25935. + +* <subant> and XmlLogger didn't play nicley together. + +Other changes: +-------------- +* doc fix concerning the dependencies of the ftp task + Bugzilla Report 29334. + +* <xmlvalidate> has now a property nested element, + allowing to set string properties for the parser + Bugzilla Report 23395. + +* Docs fixes for xmlvalidate.html, javadoc.html, starteam. + Bugzilla Reports 27092, 27284, 27554. + +* <pathconvert> now accepts nested <mapper>s. Bugzilla Report 26364. + +* Shipped XML parser is now Xerces-J 2.6.2. + +* Added nested file element to filelist. + +* spelling fixes, occurred. Bugzilla Report 27282. + +* add uid and gid to tarfileset. Bugzilla Report 19120. + +* <scp> has a verbose attribute to get some feedback during the + transfer and new [local|remote][File|Todir] alternatives to file and + todir that explicitly state the direction of the transfer. + +* The OS/2 wrapper scripts have been adapted to use the new launcher. + Bugzilla Report 28226. + +* <sshexec> now also captures stderr output. Bugzilla Report 28349. + +* <xslt> now supports a nested <mapper>. Bugzilla Report 11249. + +* <touch> has filelist support. + +* <nice> task lets you set the priority of the current thread; non-forking + <java> code will inherit this priority in their main thread. + +* New attribute "negate" on <propertyset> to invert selection criteria. + +* Target now supports a Location member. Bugzilla Report 28599. + +* New "pattern" attribute for <date> selector. + +* <junit> has a new forkmode attribute that controls the number of + Java VMs that get created when forking tests. This allows you to + run all tests in a single forked JVM reducing the overhead of VM + creation a lot. Bugzilla Report 24697. + +* <jar> can now optionally create an index for jars different than the + one it currently builds as well. See the new <indexjars> element + for details. Bugzilla Report 14255. + +* Permit building under JDK 1.5. Bugzilla Report 28996. + +* minor Javadoc changes. Bugzilla Report 28998. + +* Misc. corrections in SignJar.java. Bugzilla Report 28999. + +* Remove redundant <hr> from javah.html. Bugzilla Report 28995. + +* Ignore built distributions. Bugzilla Report 28997. + +* A new roundup attribute on <zip> and related task can be used to + control whether the file modification times inside the archive will + be rounded up or down (since zips only store modification times with + a granularity of two seconds). The default remains to round up. + Bugzilla Report 17934. + +* A binary option has been added to <concat>. Bugzilla Report 26312. + +* Added DynamicConfiguratorNS, an namespace aware version of + DynamicConfigurator. Bugzilla Report 28436. + +* Add implicit nested element to <macrodef>. Bugzilla Report 25633. + +* Add deleteonexit attribute to <delete>. + +* Added Target.getIf/Unless(). Bugzilla Report 29320. + +* <fail> has a status attribute that can be used to pass an exit + status back to the command line. + +* <fail> accepts a nested <condition>. + +* <loadproperties> supports loading from a resource. + Bugzilla Report 28340. + +* Nested file mappers and a container mapper implementation have been + introduced. Additionally, the <mapper> element now accepts "defined" + nested FileNameMapper implementations directly, allowing a usage + comparable to those of <condition>, <filter>, and <selector>. + +* New <redirector> type introduced to provide extreme I/O flexibility. + Initial support for <exec>, <apply>, and <java> tasks. + +* <apply> has a new ignoremissing attribute (default true for BC) + which will allow nonexistent files specified via <filelist>s to + be passed to the executable. Bugzilla Report 29585. + +* <junitreport> now also works with Xalan XSLTC and/or JDK 1.5. + Bugzilla Report 27541. + +* <jspc> doesn't work properly with Tomcat 5.x. We've implemented a + work-around but don't intend to support future changes in Tomcat + 5.x. Please use the jspc task that ships with Tomcat instead of + Ant's. + +Changes from Ant 1.6.0 to Ant 1.6.1 +============================================= + +Changes that could break older environments: +-------------------------------------------- + +* License is now Apache Software License 2.0 + see http://www.apache.org/licenses/ for more information + +Fixed bugs: +----------- +* Remove a recursive template call in the junit xsls that could trigger a stack + overflow. It now uses Xalan extensions to call a Java class directly. + Bugzilla Report 19301 + +* Fix spurious infinite loop detection for filters (introduced in ant 1.6.0). + Bugzilla Report 23154. + +* Fix handling of default ant namespace for nested elements. + +* Fix jboss element of ejb task (introduced in ant 1.6.0). + +* <whichresource> failed to load classes correctly. + +* Ant could fail to start with a NullPointerException if + ANT_HOME/lib/ant-launcher.jar was part of the system CLASSPATH. + +* presetdef'ed types did not work with the ant-type attribute + +* fixed case handling of macrodef attributes and elements. Bugzilla + Reports 25687 and 26225. + +* <java> ignored the append attribute, Bugzilla Report 26137. + +* The gcj compiler adapter for <javac> failed if the destination + directory didn't exist. Bugzilla Report 25856. + +* Ant now fails with a more useful message if a new process will be + forked in a directory and that directory doesn't exist. + +* <splash> used to break the build on non-GUI environments. Bugzilla + report 11482. + +* Ant 1.6.0 cannot run build scripts in directories with non-ASCII names. + Bugzilla Report 26642. + +Other changes: +-------------- +* Shipped XML parser is now Xerces-J 2.6.1 + +* Translate task logs a debug message specifying the number of files + that it processed. Bugzilla Report 13938. + +* <fixcrlf> has a new attribute - fixlast. Bugzilla Report 23262. + +* <p4submit> has 2 new attributes, needsresolveproperty and changeproperty. + Bugzilla Report 25711. + +* add description attributes to macrodef attributes and elements. + Bugzilla Report 24711. + +* Extending ClearCase Tasks : + - Added an extra option to 'failonerr' to each ClearCase task/command. + - Extended the functionality of cccheckout. It can check (notco) to see if + the desired element is already checked out to the current view. Thus it + won't attempt to check it out again. + - Added three new ClearCase commands: ccmkattr, ccmkdir, ccmkelem + Bugzilla Report 26253. + +* New condition <typefound> that can be used to probe for the declaration + and implementation of a task, type, preset, macro, scriptdef, whatever. + As it tests for the implementation, it can be used to check for optional + tasks being available. + +* added nested text support to <macrodef> + +* added initial support for Java 1.5. Java 1.5 is now correctly + detected by Ant and treated just like Java 1.4. You can now specify + source="1.5" in the <javac> task. + +* created new task <cvsversion> + +* added support for branch logging via the tag attribute in <cvschangelog> + Bugzilla Report 13510. + +* added support the groovy language in the script and scriptdef tasks + +Changes from Ant 1.5.4 to Ant 1.6.0 +=================================== + +Changes that could break older environments: +-------------------------------------------- + +* This version of Ant can not be built with JDK 1.1 and requires at + least Java 1.2 at runtime as well. Compiling for a 1.1 target is + still supported. + +* Targets cannot have the empty string as their name any longer. + +* ant.jar's manifest does no longer include a Class-Path entry, so it + is no longer possible to run Ant via "java -jar ant.jar" without + manually altering the CLASSPATH. Instead of that a file + ant-bootstrap.jar is included in the etc directory of the binary + distribution, copy this to the lib directory and use + "java -jar ant-bootstrap.jar" instead if you want to run Ant without + the wrapper script (not recommended). + +* The <script> task now requires Apache BSF instead of the older IBM + version. See <http://jakarta.apache.org/bsf/> + +* <xmlproperty> will no longer fail if the file to be loaded doesn't exist. + +* XML namespaces are now enabled in the XML parser, meaning XML namespace + declarations no longer cause errors. However task names containing colons + will cause errors unless there is a corresponding namespace uri. + +* The <ftp> and <telnet> tasks now require Jakarta Commons Net instead + of the older ORO Netcomponents version. See + <http://jakarta.apache.org/commons/net/index.html>. + +* <input> will no longer prompt the user and wait for input if the + addproperty attribute is set to a property that has already been + defined in the project. If you rely on the task waiting for input, + don't use the addproperty attribute. + +* The Class-Path attribute in manifests will no longer merge the + entries of all manifests found, but will be treated like all other + manifest attributes - the most recent attribute(s) will be used. + +* New Launch mechanism implemented. This moves some functionality from + the batch files / shell scripts into Java. This removes environment + limitations, for command issues, directory depth issues on Windows. Also + allows a per-user library location to be used if the main Ant install + is locked down. + +* The Entry nested element of PropertyFile will not any more have its value + attribute (actually increment) overwritten with the new value of the entry + after execution. + +* Output stored from a <java> or <exec> task is now exactly as generated. No + conversion to platform end-of-line characters is performed. + +* <translate> will now preserve line endings. + +* <ftp> followsymlinks="false" in nested fileset definitions is explicitly + required in order to exclude remote symbolic links (when doing a get, chmod, + delete, rmdir). + +* The values of the Copy#fileCopyMap variable has changed from String to + String[]. (In java 1.5 terms it was Hashtable<String, String> and + is now Hashtable<String, String[]>). This will affect third party code + that extend Copy and override Copy#doFileOperations. + +* <loadproperties> didn't expand properties while <property file="..."/> + does, so they were not equivalent. This has been fixed, which means + that propetries may get expanded twice if you use an + <expandproperties> filterreader. Bugzilla Report 17782. + +* User defined tasks and typedefs are now handled internally in the + same way as predefined tasks and typedefs. Also tasks and typedefs + are resolved at a later stage. This causes some + differences especially for user defined task containers. + +* <checksum> log message "Calculating checksum ..." has been degraded + from INFO to VERBOSE. + +Fixed bugs: +----------- +* Filter readers were not handling line endings properly. Bugzilla + Report 18476. + +* Filtersets were also not handling line endings properly. + +* Expand tasks did not behave as expected with PatternSets. + +* <property environment=... /> now works on OS/400. + +* <cab> could hang listcab on large <fileset>s. + +* The starteam stcheckout, stcheckin tasks now correctly compute + status of files against whatever local tree they are run against + and, optionally, will not process a file if it is current. + Previously you had to process everything unless you ran against the + default folder which wasn't the normal use-case for ant-starteam. + The stlist task now similarly displays that status correctly making + it a more generally useful tool. + +* entity includes would cause exceptions if path names included spaces. + +* addConfiguredXXX would not work for TaskAdapter wrapped tasks + +* Fix <ilasm> outputfile testing so that the output file does not need + to exist beforehand. + +* Ant will now exit with a return code of 1 if it encounters problems + with the command line arguments. + +* ClassLoader creation changes to use a factory method in Project. A new + class AntClassLoader2 implemented for 1.2+ specific features including + Package information and addition of classes specified in the Class-Path + element of a Jar's manifest. + +* It is now possible in <exec> to resolve the executable to a project + basedir or execution dir relative executable. The resolveExecutable + must be used to pick up such executables. + +* splash screen wouldn't disappear when build was finished. + +* <exec> output and error streams can now be redirected independently + to either a property or a file (or both) + +* TarEntry's File-arg constructor would fail with a + StringIndexOutOfBoundsException on all OSes where os.name is shorter + than seven characters. Bugzilla Report 18105. + +* <copy> and <move>'s failonerror didn't apply to filesets pointing to + non-existant directories. Bugzilla Report 18414. + +* The <stripjavacomments> filter sometimes removed parts of string + constants. Bugzilla Report 17441. + +* <antlr> will now recompile your grammar if the supergrammar has + changed. Bugzilla Report 12691. + +* <property env> will now work on Unices with /bin/env instead of + /usr/bin/env. Bugzilla Report 17642. + +* <jar index="on"> could include multiple index lists. Bugzilla 10262. + +* The index created by <jar> didn't conform to the spec as it didn't + include the top-level entries. Bugzilla Report 16972. + +* <tar> and <zip> didn't honor the defaultexcludes attribute for the + implicit fileset. Bugzilla Report 18637. + +* The <replacetokens> filter would throw an exception if the token's + value was an empty string. Bugzilla Report 18625. + +* Perforce tasks relying on output from the server such as <p4change> + and <p4label> were hanging. Bugzilla Reports 18129 and 18956. + +* Improve exception and logging behavior of Perforce tasks. + Bugzilla report 18154. + +* build.sh install had a problem on cygwin (with REALANTHOME). + Bugzilla Report 17257 + +* <replaceregexp> didn't work for multi-byte encodings if byline was false. + Bugzilla Report 19187. + +* <replaceregexp> was altering unnecessarily the timestamp of the directories + containing the files to process + Bugzilla Report 22541. + +* file names that include spaces need to be quoted inside the @argfile + argument using forked <javac> and (all JDKS). Bugzilla Report 10499. + NB : a first correction was only introducing quotes for JDK 1.4 + It has been changed to quote for all external compilers when paths + contain spaces. + Also the backslashes need to be converted to forward slashes + Bugzilla Report 17683. + +* Setting filesonly to true in <zip> and related tasks would cause the + archives to be always recreated. Bugzilla Report 19449. + +* file names that include spaces need to be quoted inside the @argfile + argument using <javadoc> and JDK 1.4. Bugzilla Report 16871. + +* <junit> didn't work with custom formatters that were only available + on the user specified classpath when a timeout occured. Bugzilla + Report 19953. + +* <different> selector : make ignoreFileTimes effectively default to true + and fix a bug in the comparison of timestamps. Bugzilla Report 20205. + +* <different> selector can now be nested directly under a fileset + Bugzilla Report 20220. + +* <cvstagdiff> had a problem with "dd-MM-yy hh:mm:ss" formats + Bugzilla Report 15995. + +* <cvstagdiff> cvsroot and package attributes added to the root + element tagdiff of the xml output + Bugzilla Report 16081. + +* <cvstagdiff> had a problem with aliased modules and with requests for multiple modules + Bugzilla Reports 21373 and 22877. + +* <cvstagdiff> could not parse properly the revision number of new files with CVS 1.11.9 or higher + Bugzilla Report 24406. + +* <fixcrlf> make fixcrlf create its temporary files in the default directory + of FileUtils#createTempFile instead of the destination dir of fixcrlf. + Bugzilla Report 20870. + +* <ejbjar> implementation for Borland. + Prevent the task from being blocked by error messages coming from java2iiop. + Bugzilla Report 19385. + +* <unzip>'s and <untar>'s nested patternsets didn't work as documented + when the pattern ended in a slash or backslash. Bugzilla Report 20969. + +* <fixcrlf> will now create the parent directories for the destination + files if necessary. Bugzilla Report 20840. + +* <xmlproperty> now handles CDATA sections. BugZilla Report 17195 + +* <translate> now translate tokens that are placed close together. + Bugzilla Report 17297 + +* Nested websphere element for ejbjar does not support spaces in file name. + Bugzilla Report 21298 + +* Don't multiply Class-Path attributes when updating jars. Bugzilla + Report 21170. + +* Do not overwrite the value (increment) attribute of PropertyFile nested Entry element. + Bugzilla Report 21505. + +* Prevent sysproperties with no key or no value from being added in <junit>. + Bugzilla Report 21684. + +* Allow references to be properly inherited via antcall + Bugzilla Report 21724. + +* ftp chmod failed when the remote system was UNIX and local system Windows + Bugzilla Report 21865. + +* ftp put with chmod failed when the remote system was UNIX and local system Windows + Bugzilla Report 23143. + +* ftp did not set the ascii mode explicity, causing problems with ftp servers + having binary as default + +* ftp was not able to download files when they were pointed to by symbolic links + Bugzilla Report 14063. + +* ftp is able to download also directories pointed to by symbolic links. + +* replace would change \r\n into \r\r\n under Windows. + +* junitreport with frames did not display a link for classes without a package + or in the top package. + Bugzilla Report 21915. + +* Project.toBoolean(String) now handles null as argument and does not throw a + NullPointerException any more. + +* The socket condition will now close the socket created to test. + Bugzilla Report 23040. + +* <junit includeantruntime="true" fork="true"> replaced the CLASSPATH instead + of adding to it. Bugzilla Report 14971. + +* <splash> could fail on JVMs that use null to indicate the system classloader. + Bugzilla Report 23320. + +* <xmlcatalog>s only worked when defined inside of tasks. Bugzilla + Report 20965. + +* <csc> and siblings (<vbc> <jsharpc>) handle large filesets by +automatic use of response files. Bugzilla report #19630 + +Other changes: +-------------- + +* Shipped XML parser is now Xerces 2.6.0 + +* All tasks can be used outside of <target>s. Note that some tasks + will not work at all outside of targets as they would cause infinite + loops (<antcall> as well as <ant> and <subant> if they invoke the + current build file). + +* Six new Clearcase tasks added. + +* A new filter reader namely tokenfilter has been added. Bugzilla + Report 18312. + +* A new attribute named skip is added to the TailFilter and + HeadFilter filter readers. + +* The filesetmanifest attribute of <jar> has been reenabled. + +* The start and end tokens for <translate> may now be longer than a + single character. + +* <setproxy> lets you set the username and password for proxies that + want authentication + +* <loadproperties> has a new encoding attribute. + +* <echoproperties> can now create XML output. + +* <echoproperties> has a new srcfile attribute that can make it read + properties files and output them instead of Ant's properties. + +* <filterset> will now resolve filters recursively. + +* <input> has a new attribute that allows you to specify a default value. + +* Added <image> task (requires JAI). + +* <image> task has now proportions attribute in the <scale/> nested element + instead of keepproportions (bringing in more functionality) + +* New condition <isreference> + +* <ftp> now has a preservelastmodified attribute to preserve the + timestamp of a downloaded file. + +* new rmdir action for <ftp> that removes directories from a fileset. + +* <ftp> has attributes timediffauto and timediffmillis to use together + with the newer attribute to tell ant to take into account a time difference + between client and remote side. + Bugzilla Report 19358. + +* <ftp> has been optimized to go directly to the include patterns. + This reduces scanning time under UNIX when followsymlinks="true" + and casesensitive="true" (the default) + Bugzilla Report 20103. + +* The SOS and VSS tasks will no longer unconditionally prepend a $ to + vsspath or projectpath. + +* OS/400 now gets detected by the os condition. + +* <arg> has a new attribute pathref that can be used to reference + previously defined paths. + +* <xmlproperty> has been improved, you can now expand ${properties}, + define ids or paths and use Ant's location magic for filename resolutions + in the XML file. + +* <xmlcatalog> will now support external catalogs according to the + OASIS "Open Catalog" standard - if resolver.jar (newer than version + 1.0) from Apache's xml-commons is in your CLASSPATH. + +* Starteam tasks now have support for revision labels and build labels. + Checkouts now have the option of using repository timestamps, instead + of current. + +* new task <symlink> that creates and maintains symbolic links. + +* new tasks <chown> and <chgrp> which are wrappers of the Unix commands. + +* new task <attrib> to change file attributes on Windows systems. + +* <style> has a new attribute reloadstylesheet to work around a + bug in widespread Xalan versions. + +* <tarfileset> has a new dirmode attribute to specify the permissions + for directories. + +* <fixcrlf>'s eol attribute now also understands "mac", "unix" and "dos". + +* <classfileset> now picks up dependencies of the form MyClass.class. This + works for the code generated by the Sun java compiler. It may not work for + all compilers. + +* a new attribute "globalopts" can be added to all Perforce tasks. + You can put in it all the strings described by p4 help usage. Refer to + the docs for more information. + +* new Perforce tasks <p4integrate> , <p4resolve>, and <p4labelsync> + +* <p4submit> will change the property p4.change if the Perforce server + renumbers the change list. + It will set the property p4.needsresolve if the submit fails, + and the message says that file(s) need to be resolved. + +* <replaceregexp> now has an optional encoding attribute to support + replacing in files that are in a different encoding than the + platform's default. + +* The <exec> task may now have its input redirected from either a file + or a string from the build file. The error output can be separated + to a different file when outut is redirected. standard error may be + logged to the Ant log when redirecting output to a file + +* The <java> task also supports the input redirection and separate + error streams introduced to the <exec> task. In addition, it is now + possible to save the output into a property for use within the build + file as was possible with <exec> in Ant 1.5 + +* The <javadoc> task <tag> subelement has been enhanced to allow files + with tag mappings to be used. + +* New tasks: <scp> supports file transfers, <sshexec> executes a + command over SSH. They require jsch, a BSD licensed SSH library that + can be found at http://www.jcraft.com/jsch/index.html + +* New filterreader <escapeunicode/>. + +* Support for HP's NonStop Kernel (Tandem) OS has been added. + +* <cab>'s basedir attribute is now optional if you specify nested + filesets. Bugzilla Report 18046. + +* New task <sync> that synchronizes two directory trees. + +* <apply> has new forwardslash attribute that can force filenames to + use forward slashes (/) as file separators even on platforms with a + different separator. This is useful if you want to run certain + ported Unix tools. + +* Copy has a new outputencoding attribute that can be used to change + the encoding while copying files. Bugzilla Report 18217. + +* The xml formatter for JUnit will now honor test case names set with + setName. Bugzilla Report 17040. + +* JUnit now has an attribute reloading, which, when set to false, + makes the task reuse the same class loader for a series of tests. + +* <concat> now supports filtering and can check timestamps before + overriding a file. Bugzilla Report 18166. + +* <junit> has a new attribute tempdir that controls the placement of + temporary files. Bugzilla Report 15454. + +* <jdepend> now supports a new nested element <classespath> which is + the same as <sourcespath> but point to compiled classes (the + prefered mode of operation for JDepend > 2.5). Additionally, nested + <exclude> elements can be used to exclude certain packages from + being parsed. Bugzilla Report 17134. + +* The JProbe tasks now also work with JProbe 4.x. Bugzilla Report 14849. + +* <javacc> and <jjtree> will now autodetect JavaCC 3.x and can use it. + +* <sql> has a new attribute to control escape processing. + +* <sql> is able to display properly several resultsets if you are + running a compound sql statement. Bugzilla Report 21594. + +* A new <containsregexp> selector has been added, that selects files + if their content matches a certain regular expression. + +* <antlr>'s debug attribute has been enabled. Bugzilla Report 19051. + +* <mail> has a new attribute charset. Bugzilla Report 15434. + +* <mail> has new attributes user and password for SMTP auth. + maillogger can also use this. + The implementation only works with JavaMail (encoding="MIME"). + Implementation with plain mail remains to do. + Bugzilla Report 5969. + +* <mail> and mailloger support SMTP over TLS/SSL + Bugzilla Report 19180. + +* <mail> the attributes from, replyto ,tolist, cclist, bcclist + can now contain email addresses of the form name <address@xyz.com> + or (name) address@xyz.com + Bugzilla Report 22474. + +* <mail> (version PlainMail) + prevent blank headers from being sent, + make the order of the headers of plain mail messages predictable + Bugzilla Report 22088. + +* <zipfileset> can now be defined in the main body of a project + and referred to with refid="xyz". Bugzilla Report 17007. + +* A wrapper script for OS/2 has been added. + +* <unzip> will now detect and successfully extract self-extracting + archives. Bugzilla Report 16213. + +* <stcheckout> has a new attribute "converteol" that can be used to + control the automatic line-end conversion performed on ASCII files. + Bugzilla Report 18884. + +* Users can now modify the list of default excludes using the new + defaultexcludes task. Bugzilla Report 12700. + +* There is a new data type <propertyset> that can be used to collect + properties. It is supported by <ant>, <antcall>, <subant>, <java>, + <echoproperties> and <junit>. + +* <concat> can now control the encoding of the output as well and optionally + add new-line characters at the end of files that get concatenated but + don't end in newlines. Bugzilla Report 12511. + +* <rpm> will detect the rpmbuild executable of RedHat 8.0 and newer + and use that if it is on your PATH. Bugzilla Report 14650. + +* A new task <rexec> has been added that requires commons-net to work. + Bugzilla Report 19541. + +* <javadoc> now supports a nested <arg> element in addition to the + additionalparams attribute. + +* You can now determine the order of standard tags in <javadoc> via + <tag> elements - you must not use the description attribute for them. + Bugzilla Report 18912. + +* <javadoc> now supports the -noqualifier switch. Bugzilla Report 19288. + +* <javac>'s executable attribute can now also be used to specify the + executable for jikes, jvc, sj or gcj. Bugzilla Report 13814. + +* <javac> has a new attribute tempdir that can control the placement + of temporary files. Bugzilla Report 19765. + +* A new magic property build.compiler.jvc.extensions has been added + that can be used to turn of Microsoft extensions while using the jvc + compiler. Bugzilla Report 19826. + +* You can now limit the parallelism of <apply> and <chmod> by using the new + maxparallel attribute. + +* With the new addsourcefile attribute, you can make <apply> ommit the + source file names from the command line. Bugzilla Report 13654. + +* <apply> and <chmod> now support nested <filelist>s as well as <dirset>s. + Bugzilla Reports 15929 and 20687. + +* <apply> and <chmod> will display a summary if you set the new + verbose attribute to true. Bugzilla Report 19883. + +* <copy>/<move>'s failonerror attribute can now also be used to + continue the build if an I/O error caused a problem. Bugzilla + Report 12999. + +* new selector <type/> allowing to select only files or only directories. + Bugzilla Report 20222. + +* <java> and <junit> now support a nested <bootclasspath> element that + will be ignored if not forking a new VM. + +* <junit>'s nested <formatter> elements now support if/unless clauses. + +* <ejbjar> + cmpversion attribute added + jboss element will look for jbosscmp-jdbc.xml descriptor + if ejbjar has cmpversion="2.0" set + Bugzilla Reports 14707 and 14709. + +* <pvcs> config attribute added to set the location of a specific PVCS + .cfg file + Bugzilla Report 9752 + +* <mapper> has an "unpackage" mapper + Bugzilla Report 18908 + +* Added <scriptdef> task allowing tasks to be defined using any BSF-supported + scripting language. + +* <touch>'s datetime attribute can now accept time with a granularity + of seconds as well. Bugzilla Report 21014. + +* <checksum> has two new properties: totalproperty and todir. + +* FileUtils#createTempFile will now create temporary files in the + directory pointed to by the property java.io.tmpdir + +* <unzip> and friends now supports an optional encoding attribute to + enable it to expand archives created with filenames using an encoding + other than UTF8. Bugzilla Report 10504. + +* <patch> has a new attribute destfile that can be used to create a new + file instead of patching files in place. + +* OpenVMS is detected as a valid OS family. + +* DirectoryScanner has been optimized for cases where include patterns do not + start with wildcards. Bugzilla Report 20103. + +* DirectoryScanner begins to be optimized not to scan excluded directories. + Bugzilla Report 21941. + +* Added keep-going feature. Bugzilla Report 21144 + +* The archives generated by <zip> and friends will now contain CRC and + size information in the "local file header", thereby providing this + information to applications that read the archives using + java.util.ZipInputStream. Bugzilla Report 19195. + +* <copy> and <move> can now handle mappers that return multiple + mappings per source path. This behaviour is enabled by using + an enablemultiplemapping attribute. Bugzilla Report 21320. + +* <exec> will now work on OpenVMS (please read the notes in + <exec>'s manual page). Bugzilla Report 21877. + +* <exec> will now have a new attribute spawn (default false). + If set to true, the process will be spawned. Bugzilla Report 5907. + +* <java> will now have a new attribute spawn (default false). + If set to true, the process will be spawned. Bugzilla Report 5907. + +* <parallel> now supports a timeout which can be used to recover + from deadlocks, etc in the parallel threads. <parallel> also + now supports a <daemons> nested element. This can be used to + run tasks in daemon threads which the parallel task will not + wait for before completing. A new attribute failonany will cause + <parallel> to throw an exception if any thread fails without + waiting for all other threads to complete. + +* <zip> and friends will consume far less memory than they used to + when run with compress="false". Bugzilla Report 21899. + +* <if/> and <unless/> attributes added to <param/> element of <style> + Bugzilla Report 22044 + +* <zip> and friends have a new attribute "keepcompression" that can be + used to incrementally build an archive mixing compressed and uncompressed + entries. + +* <junit>'s XML formatter adds a new classname attribute to the <testcase> + elements. + +* new <permissions> type add permission handling to the code + this type can be nested in the <java> and <junit> tasks. + Bugzilla Report 22533. + +* additional shortcuts for ant options (-d --> -debug, -e --> -emacs, + -h --> -help, -p --> -projecthelp, -s --> -find). + +* new selector <modified>. "cache" was renamed to "modified". + Bugzilla Report 20474. + +* <stcheckout> and <stlist> have a new asofdate attribute that can be + used to checkout/list files based on a date instead of a label. + Bugzilla Report 20578. + +* New filter <concatfilter>. Adds the content of file at the beginning + or end of a file. Discussion started at + http://marc.theaimsgroup.com/?l=ant-user&m=106366791228585&w=2 + +* New task <import> + +* New task <macrodef> + +* New task <presetdef> + +* Ant libraries that can make use of namespaces to avoid name + clashes of custom tasks + + +* <java> and <junit> now support <assertions>, which let you enable + and disable Java1.4 assertions on a package or class basis. These + only work when fork=true, currently. + +* .NET tasks expanded with VB support <vbc> and J#, via <jsharp>, + <importtypelib> and <ilasm>. <csc> supports nested <src> types, + <defines> for (potentially conditional) definitions, <reference> + filesets for references. The executable attribute lets you switch to + mono or other implementations -<csc> has been tested with Mono on + Linux and OSX. + + +Changes from Ant 1.5.3 to Ant 1.5.4 +=================================== + +Changes that could break older environments: +-------------------------------------------- + +* If the Visual Age tasks used to work for you, they may stop doing so + now - and we'd like to know about it. The current set of tasks is + supposed to work with any version of VAJ starting with 3.0. + +Fixed bugs: +----------- + +* The Visual Age for Java tasks didn't work (at least for versions 3.0 + and higher). Bugzilla Report 10016. + +* URL-encoding in <vaj*port> didn't work properly. + +* VAJRemoteUtil called getAbsolutePath instead of getPath + causing problems when using a Windows VAJ server from a UNIX server. + Bugzilla Report 20457. + +* VAJImport task failed with NullPointerException when using DirectoryScanner. + Bugzilla Report 22080. + +Other changes: +-------------- + +* Shipped XML parser is now Xerces 2.5.0 + +* <javah> will invoke oldjavah on JDK 1.4.2. Bugzilla Report 18667. + +* The VAJ tasks now support a haltonfailure attribute to conditionally + keep building even if they fail. + +* It is now possible to use the latest (versioned or unversioned) edition + in <vajload> by using special wildcard characters. Also fixes + Bugzilla Report 2236. + +Changes from Ant 1.5.2 to Ant 1.5.3 +=================================== + +Changes that could break older environments: +-------------------------------------------- + +* The <zip> task and friends have again changed a method signature + (sorry, was necessary to fix bug 17780). The return type of + getResourcesToAdd has changed. + +Fixed bugs: +----------- + +* <zipfileset>'s filemode would get ignored and the dirmode was used + for the included files as well. As a side effect, WinZIP was unable + to extract or display the files, so they seemed to be missing from + the archive. Bugzilla Report 17648. + +* <ftp> could use the wrong path separator when trying to change the + remote working directory. Bugzilla Report 17735. + +* <jar update="true"> would loose all original files if you didn't + specify any nested <(zip)fileset>s and the manifest had changed. + Bugzilla Report 17780. + +* If you used a value starting with \ on Windows for the appxml + attribute of <ear> or the webxml attribute of <war>, it would be + ignored. Bugzilla Report 17871. + +* Ant will no longer implicitly add Sun's rt.jar in <javac> when you + use jvc and don't specify a bootclasspath. Bugzilla Report 18055. + +* The prefix attribute of <zipfileset> would not generate directory + entries for the prefix itself. Bugzilla Report 18403. + +* starteam checkout can now handle deleted labels. Bugzilla Report 17646. + +* The Unix wrapper script failed if you invoked it as a relative + symlink and ANT_HOME has not been set. Bugzilla Report 17721. + +Other Changes: +-------------- +* Added ability to specify manifest encoding for the <jar> and + <manifest> tasks + +Changes from Ant 1.5.1 to Ant 1.5.2 +============================================= + +Changes that could break older environments: +-------------------------------------------- +* ANT_OPTS environment variable is now applied at the start of the + Java command line, allowing position specific parameters of some + JVMs, such as -classic to be specified. + +* ZipScanner#getIncludedFiles will now return the names of the ZipEntries + that have been matched instead of the name of the archive. + +* The <zip> task and friends have been heavily modified, almost every + method signature of the Zip class has changed. If you have subclassed + Zip (or one of its subclasses), your class will most likely not + compile against the current code base. If it still compiles, it will + probably not work as in Ant 1.5.1. + +Fixed bugs: +----------- +* <translate> was not ignoring comment lines. + +* <manifest> wouldn't update an existing manifest if only an attribute + of an existing section changed. + +* ant.bat now supports the ANT_ARGS and JAVACMD environment variables + again (like Ant 1.5 did). + +* The "plain" <junit> <formatter> could throw a NullPointerException + if an error occured in setUp. + +* <junit> will now produce output when a test times out as well. + +* <replace> would count some internal character replacements when + reporting the number of replaced tokens. + +* <concat> would cause an exception if a <filelist> pointed to files + that do not exist. + +* <javadoc> will now pass -source to custom doclets as well. + +* <cvstagdiff> would throw a NullPointException if there had been no + differences. + +* <cvschangelog> could miss today's changes. + +* <concat> could append newline characters between concatenated files. + +* <xmlvalidate> ignored the specified encoding of the files to + validate. + +* the errorsbeginat attribute of the <http> condition didn't work. + +* Ant will try to force loading of certain packages like com.sun.* + from the system classloader. The packages are determined by the + version of the JVM running Ant. + +* Ant didn't find the runtime libraries on IBM's JDK 1.4 for Linux. + +* random component of temporary files is now always a positive integer. + +* Ant could incorrectly try to use the 1.4 regexp implementation even + if it isn't available if you run the JVM with -Xverify:none. + +* Ant would die with an exception if you used nested <reference> + elements in Ant and the refid attribute didn't point to an existing + project reference. + +* The <get> task can now be compiled (and Ant thus bootstrapped) using + Kaffee. + +* build.sysclasspath will now be honored by more tasks. + +* The signjar keystore attribute has been reverted to a String allowing + it to once again accept URLs. This should not affect current File based usage + unless you are extending the Signjar task. + +* <jar update="true"> would remove the original manifest. + +* fix up folder creation in PVCS task + +* <tar>'s up-to-date check didn't work for nested <(tar)fileset>s. + +* Corrected a problem in XMLLogger where it would not associated + messages with a taskdef'd task + +* <uptodate> now works when using attributes (i.e. not filesets) and pointing + to the same file + +* Java task (and output system) now stores output which doos not end + with a line feed. + +* splash screen wouldn't disappear when build was finished. + +* <exec> now supports OS/2. + +* <zip> and friends would only update/recreate existing archives if + the files to add/update have been newer than the archive. + +* <javadoc>'s <link> element could fail for offline="true" on some JDKs. + +Other changes: +-------------- + +* MailLogger now sets the Date header correctly. + +* Shipped XML parser is now Xerces 2.3.0 + +* signjar now accepts a maxmemory attribute to allow the memory allocated to the + jarsigner tool to be specified. The jarsigner from the JDK's JAVA_HOME bin + dir is now used rather than the first jarsigner on the path. + +* **/.DS_Store has been added to the list of default pattern excludes. + +* The Created-By header in the default manifest now contains the JVM + vendor and version according to the jar specification. A new header, + Ant-Version provides the Ant version used to create the jar. + +* <zip> can now store Unix permissions in a way that can be + reconstructed by Info-Zip's unzip command. + +Changes from Ant 1.5.1Beta1 to 1.5.1 +==================================== + +Fixed bugs: +----------- + +* <tstamp>'s prefix attribute failed to apply to nested <format> elements. + +* <junitreport> created an empty junit-noframes.html if no format had + been specified. + +* <basename> would remove more than it should if the file name + contained more than one dot. + +* <filterset>s nested into <filterset>s didn't work. + +Other changes: +-------------- + +* Shipped XML parser is now Xerces 2.2.0 + +* Filesets now support a 'file' attribute, allowing a single-file + fileset to be constructed without having to specify its parent + directory separately. + +* <junit> will now return the result of a call to getName instead of + "unknown" for Test implementations that don't extend TestCase but have + a public String getName() method. + +Changes from Ant 1.5 to 1.5.1Beta1 +================================== + +Fixed bugs: +----------- +* Date/time in CvsChangeLog was in local timezone and 12 hour format leading + to a problem when sorting by time. It is now UTC (GMT) and in 24-hour + format as per cvs 'specifications'. + +* CvsTagDiff now supports ampersand modules or modules that have a different + root directory than their name. + +* EjbJar threw NPEs for the Websphere element. The property 'websphere.home' + was not documented. + +* Mail example in the documentation was not correct. + +* Checksum was broken in the following scenario: + (using verifyproperty OR in a condition) AND using filesets + with multiple files. + +* The ExpandProperties filter threw NPEs when defined using + the <filterreader> format. + +* The sh wrapper script didn't work under Cygwin if ANT_HOME wasn't + set with a Unix style filename. + +* The sh wrapper script could fail if you started Ant from a directory + with whitespace in its name. + +* ant -diagnostics was not working properly when the task dependency + was missing and was just printing the missing dependency. + +* If a task got redefined via <taskdef>, it lost its child elements. + +* <property>'s classpathref attribute was broken. + +* <arg line="''" /> would result in no command line argument, will now + be a single empty argument. Use <arg value="''"/> if you need the + quotes literally. + +* <replaceregexp> could append a newline character at the end of the + file. + +Other changes: +-------------- + +* Appendix E of Java Development with Ant (Loughran/Hatcher) was + contributed to the docs. + +* <available> will only print deprecration warnings if it is actually + used to change the value of a property. + +Changes from Ant 1.5beta3 to Ant 1.5 +==================================== + +Changes that could break older environments: +-------------------------------------------- + +* The filesetmanifest attribute added to <jar> after the 1.4.1 + release has been removed for now. This change may affect only + the 1.5Beta/1.6Alpha users. An attempt will be made to add this + feature back into Ant 1.6. + +Fixed bugs: +----------- + +* <zip> and friends would always update existing archive if you set + the update attribute to true. + +* To support backward compatibility with older versions, <pathconvert> + will once again set the property, even if the result is the empty + string, unless the new 'setonempty' attribute is set to false|no|off + (default is "true"). + +* The manifest task would crash XmlLogger + +Other changes: +-------------- + +* added **/.svn and **/.svn/** to the default excludes + +Changes from Ant 1.5beta2 to Ant 1.5beta3 +========================================= + +Changes that could break older environments: +-------------------------------------------- + +* <pvcs> default filenameformat has been different from Ant 1.4.1. + Now it is different from 1.5beta1 and 1.5beta2. + +* <pathconvert> won't set the property if the result is the empty string. + +Fixed bugs: +----------- + +* <available> could fail to find files or directories that happen to + start with the name of the project's basedir but are not children of + the basedir. + +* Nested <property>'s inside <ant> can now be overriden by subsequent + <ant> and <antcall> tasks. + +* <xslt>'s outputtype attribute wouldn't do anything. + +* <linecontains> filterreader could swallow lines. + +* <sequential> used to configure the tasks (set their attributes) + before the first task has been executed. This means that properties + that have been set by nested task seemed to be unset for the other + tasks in the same <sequential> element. + +* <javac>'s sourcepath setting has been ignored by some compiler + implementations. + +* <javadoc>'s packagelist attribute didn't work. + +* the plain mailer would always use port 25 in <mail>. + +* Ant's default logger could swallow empty lines. + +* ejbjar's iPlanet nested element now can process multiple descriptors. + +* IPlanetEjbc was looking in the wrong place for four iiop files. + +* <javac> would pass the -source switch to JDK 1.3's javac, even + though it doesn't support it. + +Other changes: +-------------- + +* <checksum> now uses a buffer (of configurable size). + +* The "Trying to override task definition" warning has been degraded + to verbose level if the two task definitions only differ in the class + loader instance that has loaded the definition. + +* Add a jvmargs to the ejbjar's weblogic element to allow additional + arguments to be provided to the VM runnign ejbc. Document the + jvmdebuglevel attribute which can be used to avoid warnings about + interface classess being found on the classpath. Document the new + <sysproperty> element which allows JVM properties to be defined. + Added an outputdir attribute to allow the destination to be a + directory into which the exploded jar is written. + +* ejbjar now supports Borland Enterprise Server 5 and Jonas 2.5 + +Changes from Ant 1.5beta1 to Ant 1.5beta2 +========================================= + +Changes that could break older environments: +-------------------------------------------- + +* Properties will now be expanded in mail message bodies. This means +that one $ sign will be stripped if your mail message contains the text +$$. + +* org.apache.tools.ant.taskdefs.Expand no longer extends MatchingTask. + +* Available#setFile now again uses a File argument as it did in 1.4, +this may break environments that have been adapted to the String +argument version present in 1.5beta1. + +Fixed bugs: +----------- +* When <move> attempts a rename, it deletes the destination file, if it + exists, before renaming the source file. However, <move> was not + checking if the destination file was actually a directory before + trying to delete it. + +* Make CVS Tasks to work under Cygwin. + +* Fix LineContains to handle huge files elegantly without causing +Stack Overflows. + +* if you ask for the "classic" compiler on Java1.4, you get upgraded to +"modern" because there is no classic compiler any more. + +* the <http> condition was viewing 404 'not found' exceptions as success. Now +it defaults to viewing any response >=400 as an error, and has an errorsBeginAt +attribute you can use if you want a higher or lower value. + +* <get> throws a build exception on an http authorization error, unless you +have set ignoreerrors to true. + +* <wsdltodotnet> was spelt in Wintel case: <WsdlToDotnet>. It is now lower +case, though the old spelling is retained for anyone who used it. + +* Merging of Manifests in jar now works as documented. + +* paths that have been separated by colons would be incorrectly parsed +on NetWare. + +* runant.pl now supports NetWare. + +* <tempfile> and <setproxy> tasks were in beta1, but not defined by +default; They now are. <tempfile> fills a property with the name of a +temporary file; <setproxy> lets you set the JVM's http, ftp and socks proxy +settings. + +* <available classname="foo" ignoresystemclasses="true"> failed for +JDK 1.1 and 1.2, even if the class could be found on the +user-specified classpath. + +* <property environment=... /> now works on z/OS. + +* forked <javac> failed for the wrong reason on JDK 1.1 - Ant would +use a temporary file to hold the names of the files to compile under +some conditons, but 1.1 doesn't support this feature. Ant will no +longer try this, but you may run into problems with the length of the +command line now. + +* the refid attribute for <property>s nested into <ant> or <param>s +nested into <antcall> didn't work. + +* <replaceregexp> didn't work for nested <fileset>s. + +* <javadoc> dropped sourcepath entries if no "interesting" .java +source files could be found below them. This has been backwards +incompatible and caused problems with custom doclets like xdoclet. + +* Using the doclet, docletpath or docletpathref attributes of +<javadoc> may have caused NullPointerExceptions. + +* nested <filesets> of <javadoc> would include too much. + +* <dependset> will no longer choke on <targetfileset>s that point to +non-existing directories. + +* <patch> didn't work at all. + +* <replace> and <replaceregexp> now fail if the file they are working +on is locked. + +* <javadoc> would pick up the wrong executable in the combination JDK +1.2 and AIX. + +Other changes: +-------------- + +* z/OS now gets detected by the os condition. + +* <fileset> and <dirset> now have an optional followsymlink attribute +that can prevent Ant from following symbolic links on some platforms. + +* BeanShell is now supported in the <script> task. + +* <ejbjar> under Weblogic attempts to use the ejbc20 compiler for 2.0 beans + based on the deployment descriptor's DTD reference. Under weblogic 7.00 Beta + this ejbc class has been deprecated. To avoid the deprecation warning use + ejbcclass="weblogic.ejbc". + +* <ejbjar> will add a manifest to the generated jar based on the naming + convention in use. This overrides the manifest specified in the + <ejbjar> attribute + + +Changes from Ant 1.4.1 to 1.5beta1 +================================== + +Changes that could break older environments: +-------------------------------------------- + +* Important: Single $ signs are no longer silently stripped! + Before you panic that we have broken all your build files, we have kept + the old "$$" -> "$" behaviour. So only build files which accidentally had + a $ sign in a string that was being silently stripped may break. + We added this fix to stop newbie confusion; if you want to write a + build file which works on ant versions 1.4.1 or earlier, stay with + the double $$ sign rule. + +* Project.getBuildListeners now returns a clone of the listener + list. Changes to the returned list will not affect the listeners + currently attached to the Project. It also means that it is safe to + iterate over the returned list if listeners are added or removed + during the traversal. + +* <pvcs> default filenameformat has been different from Ant 1.4.1. + +* Some messages that are printed during startup will not be + written to the logfile specified via -logfile as they might destroy + the format of the file for special BuildLoggers (like XmlLogger). + +* The filesetmanifest attribute added to <jar> after the 1.4.1 + release has been removed for now. This change may affect only + the 1.5Beta/1.6Alpha users. An attempt will be made to add this + feature back into Ant 1.6. +* Shipped XML parser is now Xerces 2.0.1 along with the XML Parser APIs. + XML Parser APIs is a separate jar that contains the necessary + JAXP/DOM/SAX classes. + +* <telnet> was fixed to expand properties inside nested <read> and + <write> elements; before this only happened when you assigned the text + to the string attribute. If you had $ signs in the string, they may + need escaping. + +* the RegexpMatcher interface has been extended to support case + insensitive matches and other options - custom implementations of + this interface won't work any longer. We recommend to use the new + Regexp interface that also supports substitution instead of the + RegexpMatcher interface in the future. + +* <gzip> will throw an exception if your src attribute points to a directory. + +* Unjar, Unzip and Unwar will throw an exception if the Src attribute + represents a directory. Support for nested filesets is provided + instead. + +* It is no longer possible to overwrite a property using tasks like + <condition>, <exec>, <pathconvert>, or <tstamp>. In some exceptional + cases it will generate a warning if you attempt to overwrite an + existing property. + +* Taskwriters please note: Whenever tasks had any overloaded set* methods, + Ant's introspection mechanism would select the last overloaded method + provided to it by the Java Runtime. A modification has now been made such + that when the Java Runtime provides a method with a String as its argument, + a check is made to see if there is another overloaded method that takes in + some other type of argument. If there is one such method, then the method + that takes in String as an argument is not selected by the Introspector. + +* The pattern definition **/._* has been included into the Default + Excludes list. + +* <propertyfile>'s <entry> element was modified to remove "never" as a value + as its behavior was undocumented and flakey. + +* The -projecthelp flag now only prints out targets that include the + 'description' attribute, unless the -verbose or -debug flag is included + on the Ant command line. + +* Ant's testcases now require JUnit 3.7 or above, as they now use the new + assertTrue method instead of assert. + +* If the 'output' attribute of <ant> is set to a simple filename or a + relative path, the file is created relative to ${basedir}, not ${user.dir}. + +* The default value for build.compiler is now javac1.x with x + depending on the JDK that is running Ant instead of classic/modern. + +Fixed bugs: +----------- + +* <available> could fail to find files or directories that happen to + start with the name of the project's basedir but are not children of + the basedir. + +* Nested <property>'s inside <ant> can now be overriden by subsequent + <ant> and <antcall> tasks. + +* <xslt>'s outputtype attribute wouldn't do anything. + +* <linecontains> filterreader could swallow lines. + +* <sequential> used to configure the tasks (set their attributes) + before the first task has been executed. This means that properties + that have been set by nested task seemed to be unset for the other + tasks in the same <sequential> element. + +* <javac>'s sourcepath setting has been ignored by some compiler + implementations. + +* <javadoc>'s packagelist attribute didn't work. + +* the plain mailer would always use port 25 in <mail>. + +* Ant's default logger could swallow empty lines. + +* ejbjar's iPlanet nested element now can process multiple descriptors. + +* IPlanetEjbc was looking in the wrong place for four iiop files. + +* <javac> would pass the -source switch to JDK 1.3's javac, even + though it doesn't support it. + +* <zip> and friends would always update existing archive if you set + the update attribute to true. + +* To support backward compatibility with older versions, <pathconvert> + will once again set the property, even if the result is the empty + string, unless the new 'setonempty' attribute is set to false|no|off + (default is "true"). + +* The manifest task would crash XmlLogger + +* A bug existed that prevented generated log files from being deleted as + part of the build process itself. This has now been fixed. + +* Fixed bug where <move> ignored <filterset>s. + +* Ant works properly with the combination of Java1.4/WindowsXP. + +* Fixed bug where <java> used to sometimes invoke class constructors twice. + +* Fixed bug with 4NT shell support. + +* Fixed bug where ant would not perform ftp without remotedir being + specified even though this was not mandatory. + +* Fixed bug where ant would not copy system properties into new Project + in ant/antcall tasks when inheritall="false" is set. + +* <propertyfile> would not close the original property file. + +* <ant> will no longer override a subbuild's basedir with inheritall="true". + +* Fixed problem with the built-in <junit> formatters which assumed + that only one test could be running at the same time - this is not + necessarily true, see junit.extensions.ActiveTestSuite. + +* <jar>'s whenEmpty attribute is useless as JARs are never empty, they + contain at least a manifest file, therefore it will now print a + warning and do nothing. + +* <typedef> hasn't been all that useful as it couldn't be used outside + of targets (it can now) and nested "unknown" elements have always + been considered to be tasks (changed as well). + +* <fixcrlf> would fail for files that contained lines longer than 8kB. + +* Some junit formatters incorrectly assumed that all testcases would + inherit from junit.framework.TestCase. + +* <fixcrlf> dropped the first characters from Mac files. + +Other changes: +-------------- + +* <checksum> now uses a buffer (of configurable size). + +* The "Trying to override task definition" warning has been degraded + to verbose level if the two task definitions only differ in the class + loader instance that has loaded the definition. + +* Add a jvmargs to the ejbjar's weblogic element to allow additional + arguments to be provided to the VM runnign ejbc. Document the + jvmdebuglevel attribute which can be used to avoid warnings about + interface classess being found on the classpath. Document the new + <sysproperty> element which allows JVM properties to be defined. + Added an outputdir attribute to allow the destination to be a + directory into which the exploded jar is written. + +* ejbjar now supports Borland Enterprise Server 5 and Jonas 2.5 + +* added **/.svn and **/.svn/** to the default excludes +* Selector Elements now provide a way to create filesets based on + sophisticated selection criteria. + +* Gzip and Bzip2 files can now be constructed in the fly when using + the tar task without having to create the intermediate tar file on + disk. The Untar task can also untar GZip and BZip2 files on the fly + without creating the intermediate tar file. + +* New optional type, <classfileset> added. + +* <ejbjar> now allows control over which additional classes and interfaces + are added to the generated EJB jars. A new attribute "dependency" can be + defined which controls what classes are added. The addition of classes now uses + the Jakarta-BCEL library rather than reflection, meaning bean classes are + no longer loaded into Ant's JVM. The default dependency analyzer is known as + the ancestor analyzer. It provides the same behaviour as the 1.4.1 version of + <ejbjar>. If the BCEL library is not present, a warning will be issued stating + the ancestor analyzer is not available. In this case <ejbjar> will continue + to function but will not add super classes to the jar. + +* <available> has a new attribute named ignoreSystemClasses. + +* New task <cvschangelog/> generates an XML report of changes that occur + on CVS repository. + +* New filter readers: ClassConstants, ExpandProperties, HeadFilter, + LineContains, LineContainsRegExp, PrefixLines, ReplaceTokens, + StripJavaComments, StripLineBreaks, StripLineComments, TabsToSpaces, + TailFilter. + +* <copy>, <loadfile>, <loadproperties>, <move> support FilterChains + of FilterReaders. + +* New task <loadproperties> to load contents of file as Ant properties, + with nested <filterchain> elements. + +* New task <loadfile> to load a whole file into a property. + +* New task <echoproperties> to list your current properties to the screen + or a file. + +* New tasks <bzip2> and <bunzip2> to pack and unpack files using the + BZip2 alogrithm. + +* New tasks <replaceregexp>, <checksum>, <translate>, <waitfor>, + <manifest>, <vsscp>, <vssadd>, <vsscreate>, <splash>, <basename>, <dirname>, + <concat>, <sourceoffsite>, <jarlib-available>, <jarlib-display>, + <jarlib-manifest>, <jarlib-resolve>. + +* A new combined <mail> task, which replaces the old <mail> and + <mimemail> tasks, has been added. The <mimemail> task, and + old SendEmail and MimeMail classes have been deprecated. + +* Mail task allows specification of port number. + +* Users can control what <zip> and <jar> must do when duplicate files + are found. A new element <zipgroupfileset> allows for multiple zip + files to be merged into the archive. In addition, <jar> also has + another new attribute: filesetmanifest. The existing manifest + attribute of <jar> now also accepts the name of a jar added through + a fileset. + +* gzip now checks that the zipfile is older than the source file + before rebuilding the zipfile. + +* TarFileset takes in three new attributes - fullpath, prefix + and preserveLeadingSlashes. + +* <move> attempts to rename the directory, if everything inside it is + included, before performing file-by-file moves. This attempt will + be done only if filtering is off and if mappers are not used. This + is a performance improvement and there is no change otherwise in + the funtionality of this task. + +* Exec task has extra attribute "resultproperty" to get the return code + into a property. + +* Exec task prints a message when a timed-out process is killed. + +* Added optional attributes - name, arch and version to the <os> task. + +* Unjar, Untar, Unwar and Unzip now support patternsets to + select files from an archive for extraction. Filesets may be + used to select archived files for unarchival. + +* Javac task allows debug levels to be specified. Debug levels + will have an effect only when the modern compiler or the + classic compiler (version 1.2 and higher) is used and debugging + is enabled. + +* Added support for specifying CVS_RSH in the <cvs/> task + +* The attributes zipfile, jarfile, warfile and earfile (from the Zip, + Jar, War and Ear tasks) have been deprecated and superseded by a + new attribute "destfile". + +* Added new conditions <isset>, <checksum>, <http>, <socket>, <contains>, + <filesmatch>. + +* <taskdef> and <typedef> will now emit a warning if a task/type of + the given name already exists. + +* A new revision of VAJ tasks: The most important new feature + is the ability to execute VAJ tasks from the command line by + exploiting the Remote Tool Access feature of VAJ. + +* Improved support for Novell NetWare. + +* Added an optional encoding attribute to <fixcrlf>. + +* <apply> has a new attribute relative that allows users to pass the + filenames as relative instead of absolute paths on the command line. + +* References can now be copied into the child build by <ant> and + <antcall> using nested <reference> elements or the new inheritRefs + attribute. + +* <fail> now supports builds to fail based on conditions via if and + unless attributes. + +* Ant now comes with two new BuildLogger implementations - one that + can send emails containing a log of the build process (MailLogger), + and one that colorizes the output based on message levels, using + ANSI color code escape sequences (AnsiColorLogger). + +* A "package" mapper type has been added to allow package directory + names replaced with the dotted form. + +* You can now specify environment variables in the <java> and <junit> tasks + if the fork attribute has been set to true. + +* -propertyfile command-line option has been added to load an entire + property file just as -D properties are declared (as user properties). + -D properties take precedence over -propertyfile specified ones. + +* You can now set an ANT_ARGS environment variable to hold arguments you + always want passed to the 'ant' command -- for example, if you always + want to use a different logger or the -find flag. + +* <tstamp> now supports a new "prefix" attribute to prefix properties set. + +* You can now specify the -sourcepath for <javac> explicitly. + +* <javac> now supports a new "listfiles" attribute to list the source + files it's handing off to the compiler. + +* The compiler implementation for <javac> can now be chosen on a task by + task basis. The new "compiler" attribute of <javac> can be used to override + the value of the build.compiler property, if set. + +* <javac> has a new nested element, <compilerarg>, which allows you + to specify additional args for the specific compiler you're using. + +* <javac>'s "source" attribute is now enabled for jikes as well. + +* <propertyfile>'s <entry> now has a 'unit' attribute to specify the + increment/decrement unit on date operations. + +* <property> now supports a 'prefix' attribute when loading from a file + or resource. + +* In Ant 1.4, a feature has been added to the <junit> task that would + add ant.jar, optional.jar and junit.jar implicitly to the classpath - + this feature can now be disabled by setting the new includeantruntime + attribute to false. + +* <style> behaves differently from any other directory-based task, as it + processes all files that it finds in included directories in + addition to the files matched by your patterns. There is now a new + attribute, 'scanincludeddirectories', to suppress this behavior. + +* <javadoc> now supports a <tag> nested element to provide the -tag option + to the standard Java 1.4 doclet. The element is ignored when not running + on Java 1.4. + +* <ftp> can now chmod files on a remote server that supports + "site chmod", as well as set the umask before transferring files, if + the server supports "site umask". + +* New <serverdeploy> "optional" task. + +* <patternset> now supports nested patternsets. + +* Perforce tasks now support a "failonerror" attribute (defaults to "true"). + +* Open Source application server JOnAS support: + EJB hot deploy and deploy with <serverdeploy> and <ejbjar> + +* Added new DirSet (<dirset>) datatype. + +* <path> now supports nested <dirset> and <filelist> elements. + +* <pathconvert> now supports nested <dirset> and <filelist> elements. + +* <pathconvert>'s "dirsep" and "pathsep" attributes now accept + multi-character values. + +* <copy> task now has a 'failonerror' attribute to allow keep-going + behaviour when the file to be copied is not found (defaults to "true"). + +* <uptodate> now has a 'srcfile' attribute to allow specifying a + full-path filename. + +* <exec>, <sql> and <java> now support append attributes to allow + appending the output to an existing file. + +* <java> now supports a timeout attribute analog to <exec> - it is + highly recommended to only use it together with fork="true". + +* <javadoc> now supports a source attribute to enable javadoc to + handle assertions present in JDK 1.4 source code. + +* <replace> supports a new replacefilterfile attribute that + automatically turns all properties of a given file into + replacefilters. + +* An alias of <xslt> has been added to refer to the <style> task. + +* The compiler implementation for <rmic> can now be chosen on a task by + task basis. The new "compiler" attribute of <rmic> can be used to override + the value of the build.rmic property, if set. + +* <rmic> has a new nested element, <compilerarg>, which allows you + to specify additional args for the specific compiler you're using. + +* org.apache.tools.ant.XmlLogger now is a BuildLogger, rather than just + a BuildListener. It can operate in either mode successfully. + +* <junit> has a new attribute "showoutput". If set to true, output + generated by tests will be sent to Ant's logging system as well as + to the formatters (instead of sending it to the formatters + exclusively). + +* Ant has now a pluggable way to prompt users for input, which is used + by the new <input> task. IDE integrators can provide an + implementation of the InputHandler interface to decouple Ant's input + from the console. An implementation that gets its input from a file + for unattended builds is part of Ant's distribution. + + For more details see docs/manual/inputhandler.html. + +* <patch> has a new attribute that selects the directory in which to + run the command. + +* <javadoc> now supports two new nested elements, <fileset> and <packageset>. + + +Changes from Ant 1.4 to Ant 1.4.1 +=========================================== + +Fixed bugs: +----------- + +* <ant>'s antfile attribute will now also be considered an absolute path on + Windows systems, if it starts with a \ and no drive specifier. + +* The fullpath attribute of <zipfileset> has been ignored if you used + the src attribute at the same time. + +* The manifest file is now always placed as the second entry (after /META-INF) + in generated jars. This allows the manifest to be read by JarInputStreams + +* Fixed bug in depend task which would fail with a NullPointerException if no + dependency cache was specified. + +* sql task now handles REM statements correctly so that lines starying with rem + but which are not comments are actually processed. + +* XMLLogger now uses the task's name rather than the classname + +* <mapper>s will now work as expected if the to pattern expands to an + absolute pathname. + +* <javac> didn't ignore memory settings in non-fork mode + +* <cab> didn't split the options attribute into several command line + arguments correctly. + +Other changes: +-------------- + +* New source attribute for <javac> to enable assertion in JDK 1.4 + +* XmlLogger and <antstructure> now add an encoding declaration to the + XML files they generate. + +* <fileset> has a new attribute "casesensitive" to make it match + filenames in a case insensitive way (if you set it to false) - by + default filesets remain case sensitive. + +Changes from Ant 1.3 to Ant 1.4 +=========================================== + +Changes that could break older environments: +-------------------------------------------- +* JUnitReport now uses the xalan redirect extension for multi-output. + With Xalan 1.2.2 it forces the use of bsf.jar in the classpath. + (Available in the xalan distribution). It is recommended to switch + to Xalan 2.x that do not need it. + +* Zip.setWhenempty() has changed its signature. + +* <rmic> is now implemented using a factory. This makes extending + rmic to use a new compiler a lot easier but may break custom + versions of this task that rely on the old implementation. + +* several Zip methods have changed their signature as we now use a Zip + package of our own that handles Unix permissions for directories. + Furthermore <zip> will now use the platform's default character + encoding for filenames - this is consistent with the command line + ZIP tools, but causes problems if you try to open them from within + Java and your filenames contain non US-ASCII characters. Use the new + encoding attribute of the task and set it to UTF8 to get the old + behavior. + +* The <pvcs> task has been moved to a package of its own. + +* JUnitResultFormater has two additional methods that must be + implemented by custom formatters. + +* Ant will no longer use the canonical version of a path internally - + this may yield different results on filesystems that support + symbolic links. + +* The output generated by the xml formatter for <junit> has changed + again, it doesn't format the numeric value in the time attribute anymore. + +* Pattern matching rules have changes slightly, the pattern foo* + doesn't match files contained in a directory named foo - use foo/* + instead. + +* <fixcrlf> will not remove trailing whitespace at the end of lines anymore. + +* The Classloader usage has been changed for the taskdef, property, available + and sql tasks so that it delegates to the parent classloader. This may cause + ClassNotFoundExceptions to be thrown if a system class attempts to load a + class in the taskdef's classpath (typically factory objects). + +* Ant now allows multithreading of tasks and the containment of tasks within + other tasks. This can break customer listeners which do not expect messages + from a task before the previous task has finished. + +* Ant now installs its own ouput stream into System.out to route output to the + task currently executing on the current thread. This also means that all + output is now routed as Ant message events. Customer listeners and loggers + should not call System.out at any time. This has always been true but such + usage now will cause problems due to possible recursion. + +* Invalid manifest files will now cause build failures in the <jar> task. + +* Ant Introspection now looks for methods with method names starting with + addConfigured. When called these methods are passed an argument after it has + been configured from the build file. Custom tasks supporting nested elements + starting with the name configured will no longer function. + +* The environment variable JAVACMD that can be used to specify the + java executable to Ant's wrapper scripts must not contain additional + command line parameters any longer - please use the environment + variable ANT_OPTS for such parameters now. + +* Ant's wrapper scripts now quote the CLASSPATH environment variable, thus + supporting classpaths which refer to directories containing spaces. This means + that the CLASSPATH environment variable cannot have quotes. Any quotes should + be removed. This will not affect the operation of the CLASSPATH environment + variable in other contexts. + +* A delete task like + <delete includeEmptyFilesets="true"> + <fileset dir="somedir" /> + </delete> + will now remove "somedir" as well, unless there are still files left + in it (matched by the default excludes). + +* The copy task will now fail if the file to be copied is not found. + +* Ant properties defined in properties files now behave the same way as + properties defined in the build file. In particular the $ character needs + to be escaped in property values by doubling it to $$. So, to define a + property with the value $hello, you need to define it in a properties file + as + test.prop=$$hello + This was not the case in Ant 1.3 + +Other changes: +-------------- + +* New tasks: ear, p4counter, record, cvspass, vsscheckin, vsscheckout, + typedef, sleep, mimemail, set of tasks for Continuus/Synergy, dependset, + condition, maudit, mmetrics, jpcoverage, jpcovreport, jpcovmerge + +* Ant now uses JAXP 1.1 + +* rmic now supports Kaffe's and Weblogic's version of rmic. + +* new magic property build.rmic to chose the rmic implementation + +* <tar> will now add empty directories as well + +* you can now specify a description for <p4change> + +* <touch> can now work on <fileset>s + +* <uptodate> now supports a value attribute + +* <fail> supports nested text + +* <fixcrlf> won't override files that are already in the correct + format. + +* <sql> now supports REM comments as well as // and -- + +* <jar> now has a nested <metainf> element following the same idea as + <war>'s <webinf>. + +* <pvcs> can now handle multiple projects. + +* <available> now has a "type" attribute you can use in conjunction + with the "file" attribute to specify whether the "file" you're + looking for is a file or a directory. + +* New <junit> formatter named "brief" + +* <ejbjar> changes + * Add support for Borland Application Server to the <ejbjar> task using + a <borland> nested element. + * Add support for iPlanet Application Server to the <ejbjar> task. Also + includes some iPlanet utility tasks + * Add support for JBoss Application Server to the <ejbjar> task. + * Add a naming attribute to control the naming scheme that + ejbjar uses to name the generated EJB jars. + * Weblogic element now sets the compiler class for EJB 2.0 beans + * <dtd> elements can be specified at the <ejbjar> level for building generic + beans + * <dtd> elements can now be URLs + * Allow the manifest to be specified for the generated jars + * The weblogic element now supprts an attribte noEJBC to skip the processing + of the jar by ejbc. The ejbc step will then occur at deployment + * weblogic will tell ejbc to use Jikes compiler if build.compiler is set to + jikes. It can be restored to the default, javac, operation if desired. + +* Allow the <sql> Delimiter to be set in the so that Oracle stored procs may be + entered + +* <execon> and <apply> can now optionally skip empty filesets. + +* <javadoc> has a new useexternalfile attribute that makes it use a + temporary file for sourcefile and package names - helps to defeat + command line length limitations. + +* Data types like <path> can now be defined inside of <target>s + +* you can now specify a classpath for <style> - the XSLZ processor + will be loaded from this path + +* added a force attribute to <style> to support dependencies that the + task cannot determine itself (dependency on parameters, not file + modification times for example) + +* added vmlauncher attribute to exec tasks. This defaults to true. If + it is set to false, the VM's ability to launch commands in bypassed + and the OS shell, either directly or through the auxillary antRun + scripts is used. + +* regexp mapper now supports the java.util.regex package of JDK 1.4. + +* New filesonly attribute for <zip> and friends to suppress directory + entries. + +* New update attribute for <zip> and friends - update an existing + archive instead of creating a new one. + +* <apply> and <execon> have been merged into a single task. + +* added vssver.scc to the default excludes + +* <available> has a new filepath attribute/nested element that allows + you top search for a file in a given path. + +* <junit> can now optionally set a property on test failure. + +* <taskdef> can now define several tasks at once, reading the + name/classname pairs from a property file or resource. + +* <unzip/unjar/unwar> and <untar> now have an overwrite attribute that + defaults to true. If set to false, files that are newer than the + files in the archive will not be replaced. + +* <patternset> and <fileset> now support nested <in/excludesfile> + elements - using these you can have more than one in/excludes file + per <patternset>. + +* Three new supported compilers for javac: kjc for kopi, gcj for the + gcc frontend and sj for Symantec's compiler. + In addition extJavac or the new fork attribute can be + used to run the JDK's javac in a JVM separate from Ant. + +* <fixrlf> can now with CR only line-ends and can use an arbitraty + between 2 and 80. + +* The .NET tasks have been adapted to the beta2 release of the framework. + +* <move> will now try to rename() files before copying them byte by + byte - only if filtering is of, of course. + +* <ant> and <antcall> tasks now support a new attribute inheritAll. When set to + false, only user properties are passed through to the target Ant instance. + This includes properties set on the command line and properties explicitly + passed + +* <javadoc> now skips off line links if the package list cannot be found. + +* <wlrun> now allows the security policy file to exist outside the weblogic + directory. + +* <java> task will set the Thread contextClassLoader under JDKs 1.2+ to the + classloader for the class being executed. + +* Introduce the concept of a TaskContainer - a task or element which can contain + Ant Tasks. + +* Add new tasks implementing the TaskContainer interface <parallel> and + <sequential> which allow parallel execution of tasks to be specified. + +* <depend> task will now take into account dependencies on jar files and class + files from a given classpath. + +* <jar> manifest entries may now be specified in the build file either + completely or to be merged with a manifest file. + +* <tstamp> task custom formats now support locales. + +* Added a listner which will forward events to Log4J. The log4j configuration + file should be in the directory from which Ant is run or passed as a system + property using a JVM argument. + +* Introduced the concept of <filtersets> to allow for more control in which + filters get applied in a <copy> or <move> operation. + +* Added nowarn attribute to javac and deprecated the Jikes-magic property + build.compiler.warnings. + +* The <depend> task cache format has changed and all dependency information is + now stored in a single file. + +Fixed bugs: +----------- + +* Testcases have been made independent of current working directory. + +* Input ZIP-Files will be closed when using a <zipfileset>. + +* p4 tasks now don't fail if user, port or client have been omitted + (and this is acceptable for the context of the command). + +* <javah>'s outputfile attribute will be resolved as relative to the + projects basedir. + +* <antstructure> should create a valid DTD for propertyfile.operation.entry + and omit tasks it fails to load. + +* won't try to pass a -bootclasspath flag to javac 1.1 anymore + +* <style>'s style attribute no handles absolute paths correctly. + +* <delete includeemptydirs="true"> now deletes more than just the leaf + directories. + +* You can now specify a <fileset> for a directory that doesn't exist at + declaration time but will created before the fileset gets used for the + first time. + +* If the quiet attribute has been set, <delete> will handle <fileset>s + with non-existing directories gracefully. + +* Output written by testcases will now be captured by the <junit> task + and passed to the formatters. + +* Quote the -group parameter to Javadoc as per the specification + +* Initialise classes when loaded through the AntClassLoader - that is, run + static initializers + +* Implement getResource() and getResources() in AntClassLoader + +* Create the <ejbjar> weblogic command line as a set of arguments rather than + as a single line. Avoids problems with paths which contain spaces. + +* <ejbjar> now fails when the weblogic ejbc compiler reports an error. + +* Make the AntClassLoader load resources in the same order as it currently + loads classes. + +* Handle classpaths with spaces + +* Make sure XSLT processors close their output files in <style>. + +* perform proper uptodate check in <rmic> when compiling for IIOP. + +* <jjtree>'s uptodate test works even if outputdirectory is not the + parent dir of target + +* <copy> will remove target file (if it exists) before writing to it - + this avoids problems with links on filesystems that support them. + +* <ftp> now properly recurses remote directories. + +* <ftp> closes remote connection when it's done. + +* <junit> tries to include all necessary classes for the task itself + to the classpath when running in fork mode - doesn't work for JDK 1.1 + +* <apply> and <execon> do now execute the command only once, if you + specify the parallel attribute - instead of once per fileset. + +* directory based tasks and fileset could miss some included files in + directories that have been excluded + +* <fixcrlf> failed for large files. + +* <move> removed files you tried to move to themselves. + +* <sql> task will not trty to print the result set unless the query succeeded. + +* Ant classloader will now ignore paths which are invalid relative to the + project base + +* <ejbjar> weblogic elements check for jar file changes has been fixed. + Previously some changes would not be included. + +* properties loaded from properties files are now resolved internally. This + removes the spurious warnings about usage of properties which have not been + set. + +* <jar> task and friends now process the JAR manifest to ensure it is valid. + +* The task finished event now includes any exception thrown by the task. + +* <java> task now supports a jvmVersion attribute so that if another JVM is + being used, Ant can determine which options to use for features such as the + VM memory limits + + +Changes from Ant 1.2 to Ant 1.3 +=========================================== + +Changes that could break older environments: +-------------------------------------------- + +* Ant doesn't search for the buildfile anymore, unless you use the new + -find argument. + +* <perforce> has been replaced by a number of new tasks. + +* <javac> is now implemented using a factory. This makes extending + javac to use a new compiler a lot easier but may break custom + versions of this task that rely on the old implementation. + +* The output generated by the xml formatter for <junit> has changed a + little, it doesn't append " sec" in the time attribute anymore. + +Other changes: +-------------- + +* A GUI Frontend: Antidote. This is currently in development. At this + time, this is not part of the Ant release, although the source is + included if you are interested. + +* New tasks: stylebook, propertyfile, depend, antlr, telnet, csc, + ilasm, apply, javah, several clearcase tasks, junitreport, sound + +* Added output attribute to <java>. + +* Added nested zipfileset element to <zip> + +* Changed <sql> so that printing is at the task level rather than + the statement level. + +* javadoc task will pass -d flag to any doclet if the destDir attribute is + given. If the doclet does not accept the -d flag then omit the destdir + attribute. + +* <cab> can work on non-Windows platforms with the help of libcabinet. + See http://trill.cis.fordham.edu/~barbacha/cabinet_library/. + +* <ftp> now supports passive mode. + +* New <mapper> data type that can be used to get influence on the + target files for some tasks like <copy> or enable new types of tasks + like <apply>. + +* <execon> provides more control over the command line now, the names + of the source files are no longer required to be at the end of the + command. + +* Style tasks will now support TraX compliant XSL processors if one is present + in your classpath. + +* Added a failonerror to the javac task. If set to false, the build will + continue even if there are compilation errors. + +* Added nested format elements to the tstamp task allowing additional time + formats to be defined for arbitrary properties. + +* Added classpath attribute and nested classpath element to <property> + to make the resource attribute more powerful. + +* ${} property expansion will now be performed on the patterns read + from files specified as includesfile or excludesfile attributes. + +* The <tar> and <untar> tasks now support GNU format for handling paths + which are greater than 100 characters in length. In addition the <tar> + task now supports nested filesets through which the file permissions + may be controlled. + +* wlrun, wlstop and ejbjar now support Weblogic 6.0 + +* The MPasre task has been updated to work with MParse 2.0 + +* The documentation has been significantly updated. + + +Fixed bugs: +----------- + +* <signjar> doesn't use deprectated methods anymore. + +* javadoc's failonerror attribute works again + +* javadoc's additionalparam attribute will now be split into separate + parameters (on spaces) to allow for more than one parameter. + +* Changed <sql> task so that printing result sets works on Oracle + +* Changes to ddcreator and ejbc helper to respect the descriptor hierarchy + keppgenerated in ejbc can now be turned off + +* ejbjar now correctly ignores <ejb-ref> elements in the deployment descriptor. + CMP files are included by parsing the weblogic deployment descriptor rather + than relying on the naming convention used in ant 1.2 + +* ejbjar includes super classes and super interfaces into the generated ejb + jar files. The <support> nested element allows support classes to be + included in the EJB jar. The toplink element should now correctly locate + the toplink descriptor. + +* <vssget> now correctly deals with spaces in arguments + +* <jar> fails early if a given manifest file doesn't exist + +* <rmic> doesn't search for the _Skel file anymore when stubversion is + set to 1.2. + +* <rmic> uses the the same classpath to verify a class can be rmic'd + as it passes to the compiler. + +* org.apache.tools.mail.MailMessage (and therefore <mail>) can now + handle SMTP servers sending multi line responses. + +* nested <classpath> elements of <taskdef> now work for <taskdef>s not + nested into <target> as well. + +* <property> and <available> will search for the resource "foo" instead + of "/org/apache/tools/ant/taskdefs/foo" when given a relative resource + name foo. + +* Handle build files in directories whose name contained a "#" character + +* <junit> can now log to files whose name contains a comma as well. + +* The AntClassLoader now refers to the loader which loaded it, any + requests it does not handle itself. Previously these went to the + primordial loader. + +Changes from Ant 1.1 to Ant 1.2 +=============================== + +Changes that could break older environments: +-------------------------------------------- + +* Semantics of <property> has changed again in the hope to be more +intuitive. ${} expansion now happens at runtime and <property> tags +living inside of targets only take effect if they are visited at +runtime. + +As a side effect of this change, task's attributes get set at runtime +not at parser time as well, which might change the results of +<script>s or other custom tasks that reference other tasks by their id +attribute. + +* copying of support files in <javac> has been removed - as well as +the filtering attribute. + +* the <expand> and <keysubst> tasks have been removed. + +* the ignore and items attributes of directory based tasks have been removed. + +* the command line switches _not_ starting with - have been removed. + +* Path and EnumeratedAttribute have been moved from +org.apache.tools.ant to org.apache.tools.ant.types. + +* the class attributes of <available>, <java>, <rmic> and <taskdef> +have been removed. + +* the src attribute of <chmod> has been removed. + +* <patch> and <javadoc> have lost some of their attributes. + +* <java> and <cvs> have lost some undocumented attributes. + +* the Unix antRun script would search for command.sh in the directory +it changed to and invoke this instead of command if present. This +behavior has been dropped. + +* <ejbjar> task syntax has been changed significantly + +* <exec> is no longer implemented by org.apache.tool.ant.taskdefs.Exec. +Custom tasks that rely on Project.createTask("exec") to return an +instance of this class are going to fail. + +* nested <include> and <exclude> elements expect the value of their +name attribute to be a single pattern, they don't accept multiple +patterns anymore. Split them into multiple elements of the same type. + +* <delete dir="somedir" /> will now delete the directory itself as +well as all included files. If you just want to clean out the +directory and keep the empty one, use a nested fileset. + +Other changes: +-------------- + +* New tasks: antstructure, cab, execon, fail, ftp, genkey, jlink, +junit, sql, javacc, jjtree, starteam, war, unwar, uptodate, +native2ascii, copy, move, mparse. + +* copydir, copyfile, deltree and rename are now deprecated. They +should be replaced with the new copy, delete and move tasks. + +* <java> uses a ClassLoader of its own in no-fork mode if a classpath is +specified. + +* <style> will create the necessary target directories and reprocess +all files if the stylesheet changes. + +* New data types fileset and patternset - expected to get a broader use. +They, as well as PATH like structures, can now be defined on a global +level and later be referenced by their id attribute. + +* You can specify environment variables to <exec>. + +* <get> can check whether a remote file is actually newer than a local +copy before it starts a download (HTTP only). + +* Added a -logger option to allow the class which performs logging to be +specified on the command line. + +* Added a -emacs option to tell the logger to leave out taskname adornments +on log output. + +* <chmod> works on all files in parallel and supports multiple filesets. + +* <replace> can now use tokens and/or values that cross line boundaries. + +* build.compiler supports now jvc as well. + +* project specific help can now be obtained with the -projecthelp option. + +* Added a -debug option to make -verbose less verbose (and more useful) + +* Ant will now search for a file named build.xml in the parent directory +and above (towards the root of the filesystem) if you didn't specify +-buildfile and there is no build.xml in the current directory. + +* <echo> can now write to a file and accepts nested text. + +Fixed bugs: +----------- + +* <chmod> didn't work when used as a directory based task. + +* Path, Available, Property didn't resolve relative filenames with +respect to the Project's basedir. + +* Project didn't interpret the basedir attribute correctly in all +cases. + +* Nested <src> in <javac> caused NullPointerException. + +* Corrupt Zip- and Jar-files ar now deleted if the task fails. + +* many more fixes we've forgotten to document here ... + +* The packagelistloc attribute of <javadoc>'s <link> child will be + resolved as a file (i.e. it is either absolute or relative to + basedir). diff --git a/lib/ant/bin/ant.cmd b/lib/ant/bin/ant.cmd new file mode 100644 index 000000000..4bb903f5f --- /dev/null +++ b/lib/ant/bin/ant.cmd @@ -0,0 +1,92 @@ +/* + Copyright 2003-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Run ant +*/ + +'@echo off' +parse arg mode envarg '::' antarg + +if mode\='.' & mode\='..' & mode\='/' then do + envarg = mode envarg + mode = '' +end + +if antarg = '' then do + antarg = envarg + envarg = '' +end + +x = setlocal() + +env="OS2ENVIRONMENT" +antenv = _getenv_('antenv') +if _testenv_() = 0 then interpret 'call "' || antenv || '"' '"' || envarg || '"' + +if mode = '' then mode = _getenv_('ANT_MODE' '..') +if mode \= '/' then do + runrc = _getenv_('runrc') + antrc = _getenv_('antrc' 'antrc.cmd') + if mode = '..' then mode = '-r' + else mode = '' + interpret 'call "' || runrc || '"' antrc '"' || mode || '"' +end + +if _testenv_() = 0 then do + say 'Ant environment is not set properly' + x = endlocal() + exit 16 +end + +settings = '-Dant.home=' || ANT_HOME '-Djava.home=' || JAVA_HOME + +java = _getenv_('javacmd' 'java') +opts = value('ANT_OPTS',,env) +args = value('ANT_ARGS',,env) +lcp = value('LOCALCLASSPATH',,env) +cp = value('CLASSPATH',,env) +if value('ANT_USE_CP',,env) \= '' then do + if lcp \= '' & right(lcp, 1) \= ';' then lcp = lcp || ';' + lcp = lcp || cp + 'SET CLASSPATH=' +end +if lcp\='' then lcp = '-classpath' lcp + +cmd = java opts lcp '-jar' ANT_HOME ||'\lib\ant-launcher.jar' settings args antarg +launcher = stream(ANT_HOME ||'\lib\ant-launcher.jar', 'C', 'query exists') +if launcher = '' then entry = 'org.apache.tools.ant.Main' +else entry = 'org.apache.tools.ant.launch.Launcher' +java opts lcp entry settings args antarg + +x = endlocal() + +return rc + +_testenv_: procedure expose env ANT_HOME JAVA_HOME +ANT_HOME = value('ANT_HOME',,env) +if ANT_HOME = '' then return 0 +JAVA_HOME = value('JAVA_HOME',,env) +if JAVA_HOME = '' then return 0 +cp = translate(value('CLASSPATH',,env)) +if pos(translate(ANT_HOME), cp) = 0 then return 0 +if pos(translate(JAVA_HOME), cp) = 0 then return 0 +return 1 + +_getenv_: procedure expose env +parse arg envar default +if default = '' then default = envar +var = value(translate(envar),,env) +if var = '' then var = default +return var diff --git a/lib/ant/bin/antenv.cmd b/lib/ant/bin/antenv.cmd new file mode 100644 index 000000000..b9b0db467 --- /dev/null +++ b/lib/ant/bin/antenv.cmd @@ -0,0 +1,99 @@ +/* + Copyright 2003-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Ant environment +*/ + +'@echo off' +call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs" +call SysLoadFuncs + +/* Prepare the parameters for later use */ +parse arg argv +mode = '' +args = '' +opts = '' +cp = '' +lcp = '' + +do i = 1 to words(argv) + param = word(argv, i) + select + when param='-lcp' then mode = 'l' + when param='-cp' | param='-classpath' then mode = 'c' + when abbrev('-opts', param, 4) then mode = 'o' + when abbrev('-args', param, 4) then mode = 'a' + otherwise + select + when mode = 'a' then args = space(args param, 1) + when mode = 'c' then cp = space(cp param, 1) + when mode = 'l' then lcp = space(lcp param, 1) + when mode = 'o' then opts = space(opts param, 1) + otherwise + say 'Option' param 'ignored' + end + end +end + +env="OS2ENVIRONMENT" +antconf = _getenv_('antconf' 'antconf.cmd') +runrc = _getenv_('runrc') +interpret 'call "' || runrc || '"' '"' || antconf || '"' 'ETC' +ANT_HOME = value('ANT_HOME',,env) +JAVA_HOME = value('JAVA_HOME',,env) +classpath = value('CLASSPATH',,env) +classes = stream(JAVA_HOME || "\lib\classes.zip", "C", "QUERY EXISTS") +if classes \= '' then classpath = prepend(classpath classes) +classes = stream(JAVA_HOME || "\lib\tools.jar", "C", "QUERY EXISTS") +if classes \= '' then classpath = prepend(classpath classes) + +classpath = prepend(classpath ANT_HOME || '\lib\ant-launcher.jar') +'SET CLASSPATH=' || classpath + +/* Setting classpathes, options and arguments */ +envset = _getenv_('envset') +if cp\='' then interpret 'call "' || envset || '"' '"; CLASSPATH"' '"' || cp || '"' +if lcp\='' then interpret 'call "' || envset || '"' '"; LOCALCLASSPATH"' '"' || lcp || '"' +if opts\='' then interpret 'call "' || envset || '"' '"-D ANT_OPTS"' '"' || opts || '"' +if args\='' then interpret 'call "' || envset || '"' '"ANT_ARGS"' '"' || args || '"' + +exit 0 + +addpath: procedure +parse arg path elem +if elem = '' then do + if path\='' & right(path, 1)\=';' then path = path || ';' + return path +end +if substr(path, length(path)) = ';' then glue = '' +else glue = ';' +if pos(translate(elem), translate(path)) = 0 then path = path || glue || elem || ';' +return path + +prepend: procedure +parse arg path elem +if elem = '' then do + if path\='' & right(path, 1)\=';' then path = path || ';' + return path +end +if pos(translate(elem), translate(path)) = 0 then path = elem || ';' || path +return path + +_getenv_: procedure expose env +parse arg envar default +if default = '' then default = envar +var = value(translate(envar),,env) +if var = '' then var = default +return var diff --git a/lib/ant/bin/envset.cmd b/lib/ant/bin/envset.cmd new file mode 100644 index 000000000..cb91d8733 --- /dev/null +++ b/lib/ant/bin/envset.cmd @@ -0,0 +1,130 @@ +/* + + Copyright 2003-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +SET environment variables +First optional parameter: + ; parameters are considered parts of a path variable, semicolons are + appended to each element if not already present + -D parameters are properties for Java or Makefile etc., -D will be + prepended and the parameters will be separated by a space + =D the same as above but equal sign is not required + , parameters should be comma separated in the environment variable + - parameters should be separated by the next parameter + Other values mean that the first parameter is missing and the environment + variable will be set to the space separated parameters + +Second parameter: name of the environment variable + +Next parameters: values +; implies that the equal sign is considered a part of the parameter and is +not interpreted + +-D requires parameters in the form name=value. If the equal sign is not found, +the parameters are changed to name=expanded_name + +Other options have optional equal sign. If it is found, only the part after +the equal sign will be oprionally expanded. + +If the parameter is the minus sign, the next parameter will not be expanded. +If the parameter is a single dot, it will be replaced with the value of the +environment variable as it existed before envset was invoked. + +For other parameters the batch looks for the environment variable with the +same name (in uppercase). If it is found, it forms the expanded_name. If +the environment variable with such a name does not exist, the expanded_name +will hold the parameter name without case conversion. +*/ + +parse arg mode envar args + +equal = 0 +sep = ' ' + +/* Parse command line parameters */ +select + when mode='-' then do + sep = envar + parse var args envar args + end + when mode=';' then do + sep = '' + equal = -1 + end + when mode='-D' then equal = 1 + when mode='=D' then mode = '-D' + when mode=',' then sep = ',' +otherwise + args = envar args + envar = mode + mode = '' +end + +env = 'OS2ENVIRONMENT' +envar = translate(envar) +orig = value(envar,,env) +newval = '' +expand = 1 + +/* for each parameter... */ +do i = 1 to words(args) + if expand > 0 & word(args, i) = '-' then expand = 0 + else call addval word(args, i) +end + +/* Optionally enclose path variable by quotes */ +if mode = ';' & pos(' ', newval) > 0 then newval = '"' || newval || '"' + +/* Set the new value, 'SET' cannot be used since it does not allow '=' */ +x = value(envar, newval, env) +exit 0 + +addval: procedure expose sep equal orig expand newval mode env +parse arg var + +if var = '.' then expvar = orig +else do + if equal >= 0 then do + parse var var name '=' val + if val = '' then var = name + else var = val + end + if expand = 0 then expvar = var + else expvar = value(translate(var),,env) + if expvar = '' then expvar = var + if equal >= 0 then do + if val = '' then do + parse var expvar key '=' val + if val <> '' then name = key + else do + if equal > 0 then val = key + else name = key + end + end + else val = expvar + if pos(' ', val) > 0 | pos('=', val) > 0 then val = '"' || val || '"' + if val = '' then expvar = name + else expvar = name || '=' || val + end + if mode = '-D' then expvar = '-D' || expvar + if mode = ';' then do + if right(expvar, 1) <> ';' then expvar = expvar || ';' + end +end + +if newval = '' then newval = expvar +else newval = newval || sep || expvar +expand = 1 +return diff --git a/lib/ant/bin/runrc.cmd b/lib/ant/bin/runrc.cmd new file mode 100644 index 000000000..0337a80a2 --- /dev/null +++ b/lib/ant/bin/runrc.cmd @@ -0,0 +1,59 @@ +/* + Copyright 2003-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Run RC file, name is in the first arg, second arg is either PATH + ENV or -r or nothing +*/ + +parse arg name path rest + +if name = '' then do + say 'RC file name is missing' + exit 1 +end + +if rest \= '' then do + say 'Too many parameters' + exit 1 +end + +call runit name path +exit 0 + +runit: procedure +parse arg name path dir + +if path \= '' & path \= '-r' then do + dir = value(translate(path),,'OS2ENVIRONMENT') + if dir = '' then return + dir = translate(dir, '\', '/') /* change UNIX-like path to OS/2 */ +end + +if dir = '' then dir = directory() + +if path = '-r' then do /* recursive call */ + subdir = filespec('path', dir) + if subdir \= '\' then do + subdir = left(subdir, length(subdir)-1) + call runit name path filespec('drive', dir) || subdir + end +end + +/* Look for the file and run it */ +if right(dir, 1) \= '\' then dir = dir || '\' +rcfile = stream(dir || name, 'c', 'query exists') +if rcfile \= '' then interpret 'call "' || rcfile || '"' + +return diff --git a/lib/ant/etc/ant-bootstrap.jar b/lib/ant/etc/ant-bootstrap.jar Binary files differnew file mode 100644 index 000000000..75fcba1b1 --- /dev/null +++ b/lib/ant/etc/ant-bootstrap.jar diff --git a/lib/ant/etc/changelog.xsl b/lib/ant/etc/changelog.xsl new file mode 100644 index 000000000..cd0d11721 --- /dev/null +++ b/lib/ant/etc/changelog.xsl @@ -0,0 +1,147 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<xsl:stylesheet + xmlns:xsl='http://www.w3.org/1999/XSL/Transform' + version='1.0'> + +<!-- + Copyright 2002,2004-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + <xsl:param name="title"/> + <xsl:param name="module"/> + <xsl:param name="cvsweb"/> + + <xsl:output method="html" indent="yes" encoding="US-ASCII" + doctype-public="-//W3C//DTD HTML 4.01//EN" + doctype-system="http://www.w3.org/TR/html401/strict.dtd"/> + + <!-- Copy standard document elements. Elements that + should be ignored must be filtered by apply-templates + tags. --> + <xsl:template match="*"> + <xsl:copy> + <xsl:copy-of select="attribute::*[. != '']"/> + <xsl:apply-templates/> + </xsl:copy> + </xsl:template> + + <xsl:template match="changelog"> + <html> + <head> + <title><xsl:value-of select="$title"/></title> + <style type="text/css"> + body, p { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 80%; + color: #000000; + background-color: #ffffff; + } + tr, td { + font-family: Verdana, Arial, Helvetica, sans-serif; + background: #eeeee0; + } + td { + padding-left: 20px; + } + .dateAndAuthor { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-weight: bold; + text-align: left; + background: #a6caf0; + padding-left: 3px; + } + a { + color: #000000; + } + pre { + font-weight: bold; + } + </style> + </head> + <body> + <h1> + <a name="top"><xsl:value-of select="$title"/></a> + </h1> + <p style="text-align: right">Designed for use with <a href="http://ant.apache.org/">Apache Ant</a>.</p> + <hr/> + <table border="0" width="100%" cellspacing="1"> + + <xsl:apply-templates select=".//entry"> + <xsl:sort select="date" data-type="text" order="descending"/> + <xsl:sort select="time" data-type="text" order="descending"/> + </xsl:apply-templates> + + </table> + + </body> + </html> + </xsl:template> + + <xsl:template match="entry"> + <tr> + <td class="dateAndAuthor"> + <xsl:value-of select="date"/><xsl:text> </xsl:text><xsl:value-of select="time"/><xsl:text> </xsl:text><xsl:value-of select="author"/> + </td> + </tr> + <tr> + <td> + <pre> +<xsl:apply-templates select="msg"/></pre> + <ul> + <xsl:apply-templates select="file"/> + </ul> + </td> + </tr> + </xsl:template> + + <xsl:template match="date"> + <i><xsl:value-of select="."/></i> + </xsl:template> + + <xsl:template match="time"> + <i><xsl:value-of select="."/></i> + </xsl:template> + + <xsl:template match="author"> + <i> + <a> + <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute> + <xsl:value-of select="."/></a> + </i> + </xsl:template> + + <xsl:template match="file"> + <li> + <a> + <xsl:choose> + <xsl:when test="string-length(prevrevision) = 0 "> + <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&content-type=text/x-cvsweb-markup</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&r2=<xsl:value-of select="prevrevision"/></xsl:attribute> + </xsl:otherwise> + </xsl:choose> + <xsl:value-of select="name" /> (<xsl:value-of select="revision"/>)</a> + </li> + </xsl:template> + + <!-- Any elements within a msg are processed, + so that we can preserve HTML tags. --> + <xsl:template match="msg"> + <xsl:apply-templates/> + </xsl:template> + +</xsl:stylesheet> diff --git a/lib/ant/etc/checkstyle/checkstyle-frames.xsl b/lib/ant/etc/checkstyle/checkstyle-frames.xsl new file mode 100644 index 000000000..dcaa8b781 --- /dev/null +++ b/lib/ant/etc/checkstyle/checkstyle-frames.xsl @@ -0,0 +1,293 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:lxslt="http://xml.apache.org/xslt" + xmlns:redirect="org.apache.xalan.lib.Redirect" + extension-element-prefixes="redirect"> + +<!-- + Copyright 2002-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + + <xsl:output method="html" indent="yes" encoding="US-ASCII"/> + <xsl:decimal-format decimal-separator="." grouping-separator="," /> + + <xsl:param name="output.dir" select="'.'"/> + <xsl:param name="basedir" select="'.'"/> + + <xsl:template match="checkstyle"> + <!-- create the index.html --> + <redirect:write file="{$output.dir}/index.html"> + <xsl:call-template name="index.html"/> + </redirect:write> + + <!-- create the stylesheet.css --> + <redirect:write file="{$output.dir}/stylesheet.css"> + <xsl:call-template name="stylesheet.css"/> + </redirect:write> + + <!-- create the overview-summary.html at the root --> + <redirect:write file="{$output.dir}/overview-frame.html"> + <xsl:apply-templates select="." mode="overview"/> + </redirect:write> + + <!-- create the all-classes.html at the root --> + <redirect:write file="{$output.dir}/allclasses-frame.html"> + <xsl:apply-templates select="." mode="all.classes"/> + </redirect:write> + + <!-- process all files --> + <xsl:apply-templates select="file[count(error) != 0]"/> + </xsl:template> + + <xsl:template name="index.html"> + <html> + <head> + <title>CheckStyle Audit</title> + </head> + <frameset cols="20%,80%"> + <frame src="allclasses-frame.html" name="fileListFrame"/> + <frame src="overview-frame.html" name="fileFrame"/> + </frameset> + <noframes> + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client. + </p> + </noframes> + </html> + </xsl:template> + + <xsl:template name="pageHeader"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr> + <td class="text-align:right"><h2>CheckStyle Audit</h2></td> + </tr> + <tr> + <td class="text-align:right">Designed for use with + <a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and + <a href='http://ant.apache.org/'>Ant</a>.</td> + </tr> + </table> + <hr size="1"/> + </xsl:template> + + <xsl:template match="checkstyle" mode="overview"> + <html> + <head> + <link rel="stylesheet" type="text/css" href="stylesheet.css"/> + </head> + <body> + <!-- page header --> + <xsl:call-template name="pageHeader"/> + + <!-- Summary part --> + <xsl:apply-templates select="." mode="summary"/> + <hr size="1" width="100%" align="left"/> + + <!-- File list part --> + <xsl:apply-templates select="." mode="filelist"/> + </body> + </html> + </xsl:template> + + <xsl:template name="stylesheet.css"> + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .oddrow td { + background: #efefef; + } + .evenrow td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + </xsl:template> + + <!-- + Creates an all-classes.html file that contains a link to all files. + --> + <xsl:template match="checkstyle" mode="all.classes"> + <html> + <head> + <link rel="stylesheet" type="text/css" href="stylesheet.css"/> + </head> + <body> + <h2>Files</h2> + <p> + <table width="100%"> + <!-- For each file create its part --> + <xsl:apply-templates select="file[count(error) != 0]" mode="all.classes"> + <xsl:sort select="substring-after(@name, $basedir)"/> + </xsl:apply-templates> + </table> + </p> + </body> + </html> + </xsl:template> + + <xsl:template match="checkstyle" mode="filelist"> + <h3>Files</h3> + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <tr> + <th>Name</th> + <th>Errors</th> + </tr> + <xsl:apply-templates select="file[count(error) != 0]" mode="filelist"> + <xsl:sort select="count(error)" order="descending" data-type="number"/> + </xsl:apply-templates> + </table> + </xsl:template> + + <xsl:template match="file" mode="filelist"> + <tr> + <xsl:call-template name="alternated-row"/> + <td nowrap="nowrap"> + <a> + <xsl:attribute name="href"> + <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text> + </xsl:attribute> + <xsl:value-of select="substring-after(@name, $basedir)"/> + </a> + </td> + <td><xsl:value-of select="count(error)"/></td> + </tr> + </xsl:template> + + <xsl:template match="file" mode="all.classes"> + <tr> + <td nowrap="nowrap"> + <a target="fileFrame"> + <xsl:attribute name="href"> + <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text> + </xsl:attribute> + <xsl:value-of select="substring-after(@name, $basedir)"/> + </a> + </td> + </tr> + </xsl:template> + + <!-- + transform string like a/b/c to ../../../ + @param path the path to transform into a descending directory path + --> + <xsl:template name="path"> + <xsl:param name="path"/> + <xsl:if test="contains($path,'/')"> + <xsl:text>../</xsl:text> + <xsl:call-template name="path"> + <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'/')"/></xsl:with-param> + </xsl:call-template> + </xsl:if> + <xsl:if test="not(contains($path,'/')) and not($path = '')"> + <xsl:text>../</xsl:text> + </xsl:if> + </xsl:template> + + <xsl:template match="file"> + <redirect:write file="{$output.dir}/files/{substring-after(@name, $basedir)}.html"> + <html> + <head> + <link rel="stylesheet" type="text/css"> + <xsl:attribute name="href"><xsl:call-template name="path"><xsl:with-param name="path" select="substring-after(@name, $basedir)"/></xsl:call-template><xsl:text>stylesheet.css</xsl:text></xsl:attribute> + </link> + </head> + <body> + <xsl:call-template name="pageHeader"/> + <h3>File <xsl:value-of select="substring-after(@name, $basedir)"/></h3> + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <tr> + <th>Error Description</th> + <th>Line:Column</th> + </tr> + <xsl:for-each select="error"> + <tr> + <xsl:call-template name="alternated-row"/> + <td><a title="{@source}"><xsl:value-of select="@message"/></a></td> + <td align="center"><xsl:value-of select="@line"/><xsl:if test="@column">:<xsl:value-of select="@column"/></xsl:if></td> + </tr> + </xsl:for-each> + </table> + </body> + </html> + </redirect:write> + </xsl:template> + + <xsl:template match="checkstyle" mode="summary"> + <h3>Summary</h3> + <xsl:variable name="fileCount" select="count(file)"/> + <xsl:variable name="errorCount" select="count(file/error)"/> + <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/> + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <tr> + <th>Total Files</th> + <th>Files With Errors</th> + <th>Errors</th> + </tr> + <tr> + <xsl:call-template name="alternated-row"/> + <td><xsl:value-of select="$fileCount"/></td> + <td><xsl:value-of select="$fileErrorCount"/></td> + <td><xsl:value-of select="$errorCount"/></td> + </tr> + </table> + </xsl:template> + + <xsl:template name="alternated-row"> + <xsl:attribute name="class"> + <xsl:if test="position() mod 2 = 1">oddrow</xsl:if> + <xsl:if test="position() mod 2 = 0">evenrow</xsl:if> + </xsl:attribute> + </xsl:template> +</xsl:stylesheet>
\ No newline at end of file diff --git a/lib/ant/etc/checkstyle/checkstyle-text.xsl b/lib/ant/etc/checkstyle/checkstyle-text.xsl new file mode 100644 index 000000000..91d496c0c --- /dev/null +++ b/lib/ant/etc/checkstyle/checkstyle-text.xsl @@ -0,0 +1,33 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + +<!-- + Copyright 2003-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + + <xsl:strip-space elements="checkstyle"/> + <xsl:preserve-space elements="file"/> + <xsl:output method="text"/> + <xsl:template match="checkstyle/file/error"> + <xsl:value-of select="../@name"/> + <xsl:text>:</xsl:text> + <xsl:value-of select="@line"/> + <xsl:text>:</xsl:text> + <xsl:value-of select="@column"/> + <xsl:text> </xsl:text> + <xsl:value-of select="@message"/> + </xsl:template> +</xsl:stylesheet> + diff --git a/lib/ant/etc/checkstyle/checkstyle-xdoc.xsl b/lib/ant/etc/checkstyle/checkstyle-xdoc.xsl new file mode 100644 index 000000000..d23ac0e04 --- /dev/null +++ b/lib/ant/etc/checkstyle/checkstyle-xdoc.xsl @@ -0,0 +1,129 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:lxslt="http://xml.apache.org/xslt" + xmlns:redirect="org.apache.xalan.lib.Redirect" + extension-element-prefixes="redirect"> + +<!-- + Copyright 2003-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + + <xsl:output method="xml" indent="yes"/> + <xsl:decimal-format decimal-separator="." grouping-separator="," /> + + <xsl:param name="output.dir" select="'.'"/> + <xsl:param name="basedir" select="'.'"/> + + <xsl:template match="checkstyle"> + <document> + <properties> + <title>Checkstyle Audit</title> + </properties> + + <body> + <xsl:apply-templates select="." mode="summary"/> + <!-- File list part --> + <xsl:apply-templates select="." mode="filelist"/> + <xsl:apply-templates select="file[count(error) != 0]"/> + </body> + </document> + </xsl:template> + + <xsl:template match="checkstyle" mode="filelist"> + <section name="Files"> + <table> + <tr> + <th>Name</th> + <th>Errors</th> + </tr> + <xsl:apply-templates select="file[count(error) != 0]" mode="filelist"> + <xsl:sort select="count(error)" order="descending" data-type="number"/> + </xsl:apply-templates> + </table> + </section> + </xsl:template> + + <xsl:template match="file" mode="filelist"> + <tr> + <xsl:call-template name="alternated-row"/> + <td nowrap="nowrap"> + <a> + <xsl:attribute name="href"> + <xsl:text>files</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text> + </xsl:attribute> + <xsl:value-of select="substring-after(@name, $basedir)"/> + </a> + </td> + <td><xsl:value-of select="count(error)"/></td> + </tr> + </xsl:template> + + <xsl:template match="file"> + <redirect:write file="{$output.dir}/files{substring-after(@name, $basedir)}.xml"> + <document> + <properties> + <title>Checkstyle Audit</title> + </properties> + + <body> + <section name="Details for {substring-after(@name, $basedir)}"> + <table> + <tr> + <th>Error Description</th> + <th>Line</th> + </tr> + <xsl:for-each select="error"> + <tr> + <xsl:call-template name="alternated-row"/> + <td><a title="{@source}"><xsl:value-of select="@message"/></a></td> + <td><xsl:value-of select="@line"/></td> + </tr> + </xsl:for-each> + </table> + </section> + </body> + </document> + </redirect:write> + </xsl:template> + + <xsl:template match="checkstyle" mode="summary"> + <section name="Summary"> + <xsl:variable name="fileCount" select="count(file)"/> + <xsl:variable name="errorCount" select="count(file/error)"/> + <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/> + <table> + <tr> + <th>Files</th> + <th>Files With Errors</th> + <th>Errors</th> + </tr> + <tr> + <xsl:call-template name="alternated-row"/> + <td><xsl:value-of select="$fileCount"/></td> + <td><xsl:value-of select="$fileErrorCount"/></td> + <td><xsl:value-of select="$errorCount"/></td> + </tr> + </table> + </section> + </xsl:template> + + <xsl:template name="alternated-row"> + <xsl:attribute name="class"> + <xsl:if test="position() mod 2 = 1">oddrow</xsl:if> + <xsl:if test="position() mod 2 = 0">evenrow</xsl:if> + </xsl:attribute> + </xsl:template> +</xsl:stylesheet> + diff --git a/lib/ant/etc/coverage-frames.xsl b/lib/ant/etc/coverage-frames.xsl new file mode 100644 index 000000000..f80890815 --- /dev/null +++ b/lib/ant/etc/coverage-frames.xsl @@ -0,0 +1,496 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:lxslt="http://xml.apache.org/xslt" + xmlns:redirect="org.apache.xalan.lib.Redirect" + extension-element-prefixes="redirect"> +<xsl:output method="html" indent="yes"/> +<xsl:decimal-format decimal-separator="." grouping-separator="," /> +<!-- + Copyright 2001-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + +<!-- + + Sample stylesheet to be used with JProbe 3.0 XML output. + + It creates a set of HTML files a la javadoc where you can browse easily + through all packages and classes. + + It is best used with JProbe Coverage Ant task that gives you the benefit + of a reference classpath so that you have the list of classes/methods + that are not used at all in a given classpath. + + @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/> + +--> + +<!-- default output directory is current directory --> +<xsl:param name="output.dir" select="'.'"/> + +<!-- ====================================================================== + Root element + ======================================================================= --> +<xsl:template match="/snapshot"> + <!-- create the index.html --> + <redirect:write file="{$output.dir}/index.html"> + <xsl:call-template name="index.html"/> + </redirect:write> + + <!-- create the stylesheet.css --> + <redirect:write file="{$output.dir}/stylesheet.css"> + <xsl:call-template name="stylesheet.css"/> + </redirect:write> + + <!-- create the overview-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-summary.html"> + <xsl:apply-templates select="." mode="overview.packages"/> + </redirect:write> + + <!-- create the all-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-frame.html"> + <xsl:apply-templates select="." mode="all.packages"/> + </redirect:write> + + <!-- create the all-classes.html at the root --> + <redirect:write file="{$output.dir}/allclasses-frame.html"> + <xsl:apply-templates select="." mode="all.classes"/> + </redirect:write> + + <!-- process all packages --> + <xsl:apply-templates select="./package" mode="write"/> +</xsl:template> + +<!-- ======================================================================= + Frameset definition. Entry point for the report. + 3 frames: packageListFrame, classListFrame, classFrame + ======================================================================= --> +<xsl:template name="index.html"> +<html> + <head><title>Coverage Results.</title></head> + <frameset cols="20%,80%"> + <frameset rows="30%,70%"> + <frame src="overview-frame.html" name="packageListFrame"/> + <frame src="allclasses-frame.html" name="classListFrame"/> + </frameset> + <frame src="overview-summary.html" name="classFrame"/> + </frameset> + <noframes> + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + </noframes> +</html> +</xsl:template> + +<!-- ======================================================================= + Stylesheet CSS used + ======================================================================= --> +<!-- this is the stylesheet css to use for nearly everything --> +<xsl:template name="stylesheet.css"> + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .a td { + background: #efefef; + } + .b td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } +</xsl:template> + +<!-- ======================================================================= + List of all classes in all packages + This will be the first page in the classListFrame + ======================================================================= --> +<xsl:template match="snapshot" mode="all.classes"> + <html> + <head> + <xsl:call-template name="create.stylesheet.link"/> + </head> + <body> + <h2>Classes</h2> + <table width="100%"> + <xsl:for-each select="package/class"> + <xsl:sort select="@name"/> + <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/> + <xsl:variable name="link"> + <xsl:if test="not($package.name='')"> + <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text> + </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text> + </xsl:variable> + <tr> + <td nowrap="nowrap"> + <a target="classFrame" href="{$link}"><xsl:value-of select="@name"/></a> + </td> + </tr> + </xsl:for-each> + </table> + </body> + </html> +</xsl:template> + +<!-- list of all packages --> +<xsl:template match="snapshot" mode="all.packages"> + <html> + <head> + <xsl:call-template name="create.stylesheet.link"/> + </head> + <body> + <h2><a href="overview-summary.html" target="classFrame">Home</a></h2> + <h2>Packages</h2> + <table width="100%"> + <xsl:for-each select="package"> + <xsl:sort select="@name" order="ascending"/> + <tr> + <td nowrap="nowrap"> + <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame"> + <xsl:value-of select="@name"/> + </a> + </td> + </tr> + </xsl:for-each> + </table> + </body> + </html> +</xsl:template> + +<!-- overview of statistics in packages --> +<xsl:template match="snapshot" mode="overview.packages"> + <html> + <head> + <xsl:call-template name="create.stylesheet.link"/> + </head> + <body onload="open('allclasses-frame.html','classListFrame')"> + <xsl:call-template name="pageHeader"/> + <h3>Summary</h3> + <table class="log" cellpadding="5" cellspacing="2" width="100%"> + <tr> + <!--th width="10%" nowrap="nowrap">Date</th> + <th width="10%" nowrap="nowrap">Elapsed time</th--> + <th width="10%" nowrap="nowrap">Reported Classes</th> + <th width="10%" nowrap="nowrap">Methods Hit</th> + <th width="10%" nowrap="nowrap">Lines Hit</th> + </tr> + <tr class="a"> + <!--td nowrap="nowrap"><xsl:value-of select="execution_log/@program_start"/></td> + <td><xsl:value-of select="format-number(execution_log/@elapsed_time div 1000,'0.0')"/>secs</td--> + <td><xsl:value-of select="count(package/class)"/></td> + <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td> + <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td> + </tr> + </table> + <table border="0" width="100%"> + <tr> + <td style="text-align: justify;"> + To ensure accurate test runs on Java applications, developers need to know how much of + the code has been tested, and where to find any untested code. Coverage helps you + locate untested code, and measure precisely how much code has been exercised. + The result is a higher quality application in a shorter period of time. + <p/> + </td> + </tr> + </table> + + <h3>Packages</h3> + <table class="log" cellpadding="5" cellspacing="2" width="100%"> + <xsl:apply-templates select="package[1]" mode="stats.header"/> + <!-- display packages and sort them via their coverage rate --> + <xsl:for-each select="package"> + <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/> + <tr> + <xsl:call-template name="alternate-row"/> + <td><a href="{translate(@name,'.','/')}/package-summary.html"><xsl:value-of select="@name"/></a></td> + <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td> + <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td> + </tr> + </xsl:for-each> + </table> + <xsl:call-template name="pageFooter"/> + </body> + </html> +</xsl:template> + +<!-- + detailed info for a package. It will output the list of classes +, the summary page, and the info for each class +--> +<xsl:template match="package" mode="write"> + <xsl:variable name="package.dir"> + <xsl:if test="not(@name = '')"><xsl:value-of select="translate(@name,'.','/')"/></xsl:if> + <xsl:if test="@name = ''">.</xsl:if> + </xsl:variable> + + <!-- create a classes-list.html in the package directory --> + <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html"> + <xsl:apply-templates select="." mode="classes.list"/> + </redirect:write> + + <!-- create a package-summary.html in the package directory --> + <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html"> + <xsl:apply-templates select="." mode="package.summary"/> + </redirect:write> + + <!-- for each class, creates a @name.html --> + <xsl:for-each select="class"> + <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html"> + <xsl:apply-templates select="." mode="class.details"/> + </redirect:write> + </xsl:for-each> +</xsl:template> + +<!-- list of classes in a package --> +<xsl:template match="package" mode="classes.list"> + <html> + <HEAD> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="@name"/> + </xsl:call-template> + </HEAD> + <BODY> + <table width="100%"> + <tr> + <td nowrap="nowrap"> + <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2> + </td> + </tr> + </table> + + <H2>Classes</H2> + <TABLE WIDTH="100%"> + <xsl:for-each select="class"> + <xsl:sort select="@name"/> + <tr> + <td nowrap="nowrap"> + <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a> + </td> + </tr> + </xsl:for-each> + </TABLE> + </BODY> + </html> +</xsl:template> + +<!-- summary of a package --> +<xsl:template match="package" mode="package.summary"> + <HTML> + <HEAD> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="@name"/> + </xsl:call-template> + </HEAD> + <!-- when loading this package, it will open the classes into the frame --> + <BODY onload="open('package-frame.html','classListFrame')"> + <xsl:call-template name="pageHeader"/> + <h3>Package <xsl:value-of select="@name"/></h3> + <table class="log" cellpadding="5" cellspacing="2" width="100%"> + <xsl:apply-templates select="." mode="stats.header"/> + <xsl:apply-templates select="." mode="stats"/> + </table> + + <xsl:if test="count(class) > 0"> + <H3>Classes</H3> + <table class="log" cellpadding="5" cellspacing="2" width="100%"> + <xsl:apply-templates select="." mode="stats.header"/> + <xsl:apply-templates select="class" mode="stats"> + <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/> + </xsl:apply-templates> + </table> + </xsl:if> + <xsl:call-template name="pageFooter"/> + </BODY> + </HTML> +</xsl:template> + +<!-- details of a class --> +<xsl:template match="class" mode="class.details"> + <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/> + <HTML> + <HEAD> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="$package.name"/> + </xsl:call-template> + </HEAD> + <BODY> + <xsl:call-template name="pageHeader"/> + <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3> + + <!-- class summary --> + <table class="log" cellpadding="5" cellspacing="2" width="100%"> + <xsl:apply-templates select="." mode="stats.header"/> + <xsl:apply-templates select="." mode="stats"/> + </table> + + <!-- details of methods --> + <H3>Methods</H3> + <table class="log" cellpadding="5" cellspacing="2" width="100%"> + <xsl:apply-templates select="method[1]" mode="stats.header"/> + <xsl:apply-templates select="method" mode="stats"> + <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/> + </xsl:apply-templates> + </table> + <xsl:call-template name="pageFooter"/> + </BODY> + </HTML> + +</xsl:template> + +<!-- Page Header --> +<xsl:template name="pageHeader"> + <!-- jakarta logo --> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr> + <td class="bannercell" rowspan="2"> + <a href="http://jakarta.apache.org/"> + <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/> + </a> + </td> + <td style="text-align:right"><h2>Source Code Coverage</h2></td> + </tr> + <tr> + <td style="text-align:right">Designed for use with <a href='http://www.sitraka.com/jprobe'>Sitraka JProbe</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td> + </tr> + </table> + <hr size="1"/> +</xsl:template> + +<!-- Page Footer --> +<xsl:template name="pageFooter"> + <table width="100%"> + <tr><td><hr noshade="yes" size="1"/></td></tr> + <tr><td> + <div align="center"><font color="#525D76" size="-1"><em> + Copyright © 1999-2001, Apache Software Foundation + </em></font></div> + </td></tr> + </table> +</xsl:template> + + +<xsl:template name="table.header"> + <tr> + <th width="80%">Name</th> + <th width="10%" nowrap="nowrap">Methods Hit</th> + <th width="10%" nowrap="nowrap">Lines Hit</th> + </tr> +</xsl:template> + +<xsl:template match="method" mode="stats.header"> + <tr> + <th width="90%">Name</th> + <th width="10%" nowrap="nowrap">Lines Hit</th> + </tr> +</xsl:template> +<xsl:template match="method" mode="stats"> + <tr> + <xsl:call-template name="alternate-row"/> + <td><xsl:value-of select="@name"/></td> + <td> + <xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/> + </td> + </tr> +</xsl:template> + +<xsl:template match="package|class" mode="stats.header"> + <tr> + <th width="80%">Name</th> + <th width="10%" nowrap="nowrap">Methods Hit</th> + <th width="10%" nowrap="nowrap">Lines Hit</th> + </tr> +</xsl:template> +<xsl:template match="package|class" mode="stats"> + <tr> + <xsl:call-template name="alternate-row"/> + <td><xsl:value-of select="@name"/></td> + <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td> + <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td> + </tr> +</xsl:template> + +<!-- + transform string like a.b.c to ../../../ + @param path the path to transform into a descending directory path +--> +<xsl:template name="path"> + <xsl:param name="path"/> + <xsl:if test="contains($path,'.')"> + <xsl:text>../</xsl:text> + <xsl:call-template name="path"> + <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param> + </xsl:call-template> + </xsl:if> + <xsl:if test="not(contains($path,'.')) and not($path = '')"> + <xsl:text>../</xsl:text> + </xsl:if> +</xsl:template> + + +<!-- create the link to the stylesheet based on the package name --> +<xsl:template name="create.stylesheet.link"> + <xsl:param name="package.name"/> + <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK> +</xsl:template> + +<!-- alternated row style --> +<xsl:template name="alternate-row"> +<xsl:attribute name="class"> + <xsl:if test="position() mod 2 = 1">a</xsl:if> + <xsl:if test="position() mod 2 = 0">b</xsl:if> +</xsl:attribute> +</xsl:template> + +</xsl:stylesheet> + + diff --git a/lib/ant/etc/jdepend-frames.xsl b/lib/ant/etc/jdepend-frames.xsl new file mode 100644 index 000000000..7a2a8ae3c --- /dev/null +++ b/lib/ant/etc/jdepend-frames.xsl @@ -0,0 +1,485 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:lxslt="http://xml.apache.org/xslt" + xmlns:redirect="org.apache.xalan.lib.Redirect" + extension-element-prefixes="redirect"> +<xsl:output method="html" indent="yes" encoding="US-ASCII"/> +<!-- + Copyright 2002-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> +<!-- + + Sample stylesheet to be used with JDepend XML output. + + It creates a set of HTML files a la javadoc where you can browse easily + through all packages and classes. + + @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a> + + --> +<xsl:param name="output.dir" select="'.'"/> + +<xsl:template match="JDepend"> + <!-- create the index.html --> + <redirect:write file="{$output.dir}/index.html"> + <xsl:call-template name="index.html"/> + </redirect:write> + + <!-- create the stylesheet.css --> + <redirect:write file="{$output.dir}/stylesheet.css"> + <xsl:call-template name="stylesheet.css"/> + </redirect:write> + + <!-- create the overview-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-summary.html"> + <xsl:apply-templates select="." mode="overview.packages"/> + </redirect:write> + + <!-- create the overview-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-packages.html"> + <xsl:apply-templates select="." mode="packages.details"/> + </redirect:write> + + <!-- create the overview-cycles.html at the root --> + <redirect:write file="{$output.dir}/overview-cycles.html"> + <xsl:apply-templates select="." mode="cycles.details"/> + </redirect:write> + + <!-- create the overview-cycles.html at the root --> + <redirect:write file="{$output.dir}/overview-explanations.html"> + <xsl:apply-templates select="." mode="explanations"/> + </redirect:write> + + <!-- create the all-packages.html at the root --> + <redirect:write file="{$output.dir}/all-packages.html"> + <xsl:apply-templates select="Packages" mode="all.packages"/> + </redirect:write> + + <!-- create the all-cycles.html at the root --> + <redirect:write file="{$output.dir}/all-cycles.html"> + <xsl:apply-templates select="Cycles" mode="all.cycles"/> + </redirect:write> +</xsl:template> + + +<xsl:template name="index.html"> +<html> + <head> + <title>JDepend Analysis</title> + </head> + <frameset cols="20%,80%"> + <frameset rows="30%,70%"> + <frame src="all-packages.html" name="packageListFrame"/> + <frame src="all-cycles.html" name="classListFrame"/> + </frameset> + <frame src="overview-summary.html" name="classFrame"/> + </frameset> + <noframes> + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + </noframes> +</html> +</xsl:template> + +<!-- this is the stylesheet css to use for nearly everything --> +<xsl:template name="stylesheet.css"> + <style type="text/css"> + body { + font:normal 68% verdana,arial,helvetica; + color:#000000; + } + table tr td, tr th { + font-size: 68%; + } + table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; + } + table.details tr td{ + background:#eeeee0; + } + + p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; + margin-left:2em; + margin-right:2em; + } + h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica + } + h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica + } + h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica + } + h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + .Error { + font-weight:bold; color:red; + } + .Failure { + font-weight:bold; color:purple; + } + .Properties { + text-align:right; + } + </style> +</xsl:template> + +<xsl:template match="JDepend" mode="overview.packages"> + <html> + <head> + <link rel="stylesheet" type="text/css" href="stylesheet.css"/> + </head> + <body> + <xsl:call-template name="pageHeader"/> + <table width="100%"><tr align="left"><h2>Summary</h2><td> + </td><td align="right"> + [summary] + [<a href="overview-packages.html">packages</a>] + [<a href="overview-cycles.html">cycles</a>] + [<a href="overview-explanations.html">explanations</a>] + </td></tr></table> + <table width="100%" class="details"> + <tr> + <th>Package</th> + <th>Total Classes</th> + <th><a href="overview-explanations.html#EXnumber">Abstract Classes</a></th> + <th><a href="overview-explanations.html#EXnumber">Concrete Classes</a></th> + <th><a href="overview-explanations.html#EXafferent">Afferent Couplings</a></th> + <th><a href="overview-explanations.html#EXefferent">Efferent Couplings</a></th> + <th><a href="overview-explanations.html#EXabstractness">Abstractness</a></th> + <th><a href="overview-explanations.html#EXinstability">Instability</a></th> + <th><a href="overview-explanations.html#EXdistance">Distance</a></th> + + </tr> + <xsl:for-each select="./Packages/Package"> + <xsl:if test="count(error) = 0"> + <tr> + <td align="left"> + <a> + <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="@name"/> + </xsl:attribute> + <xsl:value-of select="@name"/> + </a> + </td> + <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td> + <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td> + <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td> + <td align="right"><xsl:value-of select="Stats/Ca"/></td> + <td align="right"><xsl:value-of select="Stats/Ce"/></td> + <td align="right"><xsl:value-of select="Stats/A"/></td> + <td align="right"><xsl:value-of select="Stats/I"/></td> + <td align="right"><xsl:value-of select="Stats/D"/></td> + </tr> + </xsl:if> + </xsl:for-each> + <xsl:for-each select="./Packages/Package"> + <xsl:if test="count(error) > 0"> + <tr> + <td align="left"> + <xsl:value-of select="@name"/> + </td> + <td align="left" colspan="8"><xsl:value-of select="error"/></td> + </tr> + </xsl:if> + </xsl:for-each> + </table> + </body> + </html> +</xsl:template> + +<xsl:template match="JDepend" mode="packages.details"> + <html> + <head> + <link rel="stylesheet" type="text/css" href="stylesheet.css"/> + </head> + <body> + <xsl:call-template name="pageHeader"/> + <table width="100%"><tr align="left"><h2>Packages</h2><td> + </td><td align="right"> + [<a href="overview-summary.html">summary</a>] + [packages] + [<a href="overview-cycles.html">cycles</a>] + [<a href="overview-explanations.html">explanations</a>] + </td></tr></table> + + <xsl:for-each select="./Packages/Package"> + <xsl:if test="count(error) = 0"> + <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute> + <xsl:value-of select="@name"/></a></h3> + + <table width="100%"><tr> + <td><a href="overview-explanations.html#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td> + <td><a href="overview-explanations.html#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td> + <td><a href="overview-explanations.html#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td> + <td><a href="overview-explanations.html#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td> + <td><a href="overview-explanations.html#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td> + </tr></table> + + <table width="100%" class="details"> + <tr> + <th>Abstract Classes</th> + <th>Concrete Classes</th> + <th>Used by Packages</th> + <th>Uses Packages</th> + </tr> + <tr> + <td valign="top" width="25%"> + <xsl:if test="count(AbstractClasses/Class)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="AbstractClasses/Class"> + <xsl:value-of select="node()"/><br/> + </xsl:for-each> + </td> + <td valign="top" width="25%"> + <xsl:if test="count(ConcreteClasses/Class)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="ConcreteClasses/Class"> + <xsl:value-of select="node()"/><br/> + </xsl:for-each> + </td> + <td valign="top" width="25%"> + <xsl:if test="count(UsedBy/Package)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="UsedBy/Package"> + <a> + <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute> + <xsl:value-of select="node()"/> + </a><br/> + </xsl:for-each> + </td> + <td valign="top" width="25%"> + <xsl:if test="count(DependsUpon/Package)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="DependsUpon/Package"> + <a> + <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute> + <xsl:value-of select="node()"/> + </a><br/> + </xsl:for-each> + </td> + </tr> + </table> + </xsl:if> + </xsl:for-each> + <!-- this is often a long listing; provide a lower navigation table also --> + <table width="100%"><tr align="left"><td></td><td align="right"> + [<a href="overview-summary.html">summary</a>] + [packages] + [<a href="overview-cycles.html">cycles</a>] + [<a href="overview-explanations.html">explanations</a>] + </td></tr></table> + </body> + </html> +</xsl:template> + +<xsl:template match="JDepend" mode="cycles.details"> + <html> + <head> + <link rel="stylesheet" type="text/css" href="stylesheet.css"/> + </head> + <body> + <xsl:call-template name="pageHeader"/> + <table width="100%"><tr align="left"><h2>Cycles</h2><td> + </td><td align="right"> + [<a href="overview-summary.html">summary</a>] + [<a href="overview-packages.html">packages</a>] + [cycles] + [<a href="overview-explanations.html">explanations</a>] + </td></tr></table> + <!--<table width="100%"><tr><td> + </td><td align="right"> + [<a href="#NVsummary">summary</a>] + [<a href="#NVpackages">packages</a>] + [<a href="#NVcycles">cycles</a>] + [<a href="#NVexplanations">explanations</a>] + </td></tr></table> --> + + <xsl:if test="count(Cycles/Package) = 0"> + <p>There are no cyclic dependancies.</p> + </xsl:if> + <xsl:for-each select="Cycles/Package"> + <h3><a><xsl:attribute name="name">#CY<xsl:value-of select="@Name"/></xsl:attribute><xsl:value-of select="@Name"/></a></h3><p> + <xsl:for-each select="Package"> + <xsl:value-of select="."/><br/> + </xsl:for-each></p> + </xsl:for-each> + <!-- this is often a long listing; provide a lower navigation table also --> + <table width="100%"><tr align="left"><td></td><td align="right"> + [<a href="overview-summary.html">summary</a>] + [<a href="overview-packages.html">packages</a>] + [cycles] + [<a href="overview-explanations.html">explanations</a>] + </td></tr></table> + </body> + </html> +</xsl:template> + +<xsl:template match="JDepend" mode="explanations"> + <html> + <head> + <link rel="stylesheet" type="text/css" href="stylesheet.css"/> + </head> + <body> + <xsl:call-template name="pageHeader"/> + + <table width="100%"><tr align="left"><h2>Explanations</h2><td> + </td><td align="right"> + [<a href="overview-summary.html">summary</a>] + [<a href="overview-packages.html">packages</a>] + [<a href="overview-cycles.html">cycles</a>] + [explanations] + </td></tr></table> + + <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p> + + <h3><a name="EXnumber">Number of Classes</a></h3> + <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p> + <h3><a name="EXafferent">Afferent Couplings</a></h3> + <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p> + <h3><a name="EXefferent">Efferent Couplings</a></h3> + <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p> + <h3><a name="EXabstractness">Abstractness</a></h3> + <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p> + <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p> + <h3><a name="EXinstability">Instability</a></h3> + <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p> + <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p> + <h3><a name="EXdistance">Distance</a></h3> + <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p> + <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p> + <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p> + + </body> + </html> +</xsl:template> + + +<!-- +Creates an html file that contains a link to all package links in overview-packages.html. + @bug there will be a problem here, I don't know yet how to handle unnamed package :( +--> +<xsl:template match="JDepend/Packages" mode="all.packages"> + <html> + <head> + <link rel="stylesheet" type="text/css" href="stylesheet.css"/> + </head> + <body> + <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right"> + [<a href="overview-summary.html" target="classFrame">summary</a>] + [<a href="overview-packages.html" target="classFrame">packages</a>] + [<a href="overview-cycles.html" target="classFrame">cycles</a>] + [<a href="overview-explanations.html" target="classFrame">explanations</a>] + </td></tr></table> + <h2>Packages</h2> + <table width="100%"> + <xsl:apply-templates select="Package[count(error)=0]" mode="all.packages.link"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + <xsl:apply-templates select="Package[count(error) > 0]" mode="all.packages.nolink"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + </table> + </body> + </html> +</xsl:template> + +<xsl:template match="JDepend/Packages/Package" mode="all.packages.link"> + <tr> + <td nowrap="nowrap"> + <a href="overview-packages.html#PK{@name}" target="classFrame"> + <xsl:value-of select="@name"/> + </a> + </td> + </tr> +</xsl:template> + +<!-- +I do not know JDepend enough to know if every error results in a non-analyzed package, +but that is how I am presenting it to the viewer. This may need to change. + @bug there will be a problem here, I don't know yet how to handle unnamed package :( +--> +<xsl:template match="JDepend/Packages/Package" mode="all.packages.nolink"> + <tr> + <td nowrap="nowrap"> + Not Analyzed: <xsl:value-of select="@name"/> + </td> + </tr> +</xsl:template> + +<!-- +Creates an html file that contains a link to all package links in overview-cycles.html. + @bug there will be a problem here, I don't know yet how to handle unnamed package :( +--> +<xsl:template match="JDepend/Cycles" mode="all.cycles"> + <html> + <head> + <link rel="stylesheet" type="text/css" href="stylesheet.css"/> + </head> + <body> + <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right"> + [<a href="overview-summary.html" target="classFrame">summary</a>] + [<a href="overview-packages.html" target="classFrame">packages</a>] + [<a href="overview-cycles.html" target="classFrame">cycles</a>] + [<a href="overview-explanations.html" target="classFrame">explanations</a>] + </td></tr></table> + <h2>Cycles</h2> + <table width="100%"> + <xsl:apply-templates select="Package" mode="all.cycles"> + <xsl:sort select="@Name"/> + </xsl:apply-templates> + </table> + </body> + </html> +</xsl:template> + +<xsl:template match="JDepend/Cycles/Package" mode="all.cycles"> + <tr> + <td nowrap="nowrap"> + <a href="overview-cycles.html#CY{@Name}" target="classFrame"><xsl:value-of select="@Name"/></a> + </td> + </tr> +</xsl:template> + +<!-- Page HEADER --> +<xsl:template name="pageHeader"> + <h1>JDepend Analysis</h1> + <table width="100%"> + <tr> + <td align="left"></td> + <td align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</td> + </tr> + </table> + <hr size="1"/> +</xsl:template> + +</xsl:stylesheet> diff --git a/lib/ant/etc/jdepend.xsl b/lib/ant/etc/jdepend.xsl new file mode 100644 index 000000000..e1e5e2da1 --- /dev/null +++ b/lib/ant/etc/jdepend.xsl @@ -0,0 +1,275 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + +<!-- + Copyright 2002,2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + +<xsl:output method="html" indent="yes" encoding="US-ASCII"/> + +<xsl:template match="JDepend"> + <html> + <head> + <title>JDepend Analysis</title> + + <style type="text/css"> + body { + font:normal 68% verdana,arial,helvetica; + color:#000000; + } + table tr td, tr th { + font-size: 68%; + } + table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; + } + table.details tr td{ + background:#eeeee0; + } + + p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; + margin-left:2em; + margin-right:2em; + } + h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica + } + h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica + } + h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica + } + h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + .Error { + font-weight:bold; color:red; + } + .Failure { + font-weight:bold; color:purple; + } + .Properties { + text-align:right; + } + </style> + + + </head> + <body> + <!--h1>JDepend Report</h1> + <ul> + <xsl:for-each select="./Packages/Package"> + <xsl:sort select="@name"/> + <li><xsl:value-of select="@name"/></li> + </xsl:for-each> + </ul--> + + <h1><a name="top">JDepend Analysis</a></h1> + <p align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</p> + <hr size="2" /> + + <table width="100%"><tr><td> + <a name="NVsummary"><h2>Summary</h2></a> + </td><td align="right"> + [<a href="#NVsummary">summary</a>] + [<a href="#NVpackages">packages</a>] + [<a href="#NVcycles">cycles</a>] + [<a href="#NVexplanations">explanations</a>] + </td></tr></table> + + <table width="100%" class="details"> + <tr> + <th>Package</th> + <th>Total Classes</th> + <th><a href="#EXnumber">Abstract Classes</a></th> + <th><a href="#EXnumber">Concrete Classes</a></th> + <th><a href="#EXafferent">Afferent Couplings</a></th> + <th><a href="#EXefferent">Efferent Couplings</a></th> + <th><a href="#EXabstractness">Abstractness</a></th> + <th><a href="#EXinstability">Instability</a></th> + <th><a href="#EXdistance">Distance</a></th> + + </tr> + <xsl:for-each select="./Packages/Package"> + <xsl:if test="count(error) = 0"> + <tr> + <td align="left"> + <a> + <xsl:attribute name="href">#PK<xsl:value-of select="@name"/> + </xsl:attribute> + <xsl:value-of select="@name"/> + </a> + </td> + <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td> + <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td> + <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td> + <td align="right"><xsl:value-of select="Stats/Ca"/></td> + <td align="right"><xsl:value-of select="Stats/Ce"/></td> + <td align="right"><xsl:value-of select="Stats/A"/></td> + <td align="right"><xsl:value-of select="Stats/I"/></td> + <td align="right"><xsl:value-of select="Stats/D"/></td> + + + </tr> + </xsl:if> + </xsl:for-each> + <xsl:for-each select="./Packages/Package"> + <xsl:if test="count(error) > 0"> + <tr> + <td align="left"> + <xsl:value-of select="@name"/> + </td> + <td align="left" colspan="8"><xsl:value-of select="error"/></td> + </tr> + </xsl:if> + </xsl:for-each> + </table> + + <table width="100%"><tr><td> + <a name="NVpackages"><h2>Packages</h2></a> + </td><td align="right"> + [<a href="#NVsummary">summary</a>] + [<a href="#NVpackages">packages</a>] + [<a href="#NVcycles">cycles</a>] + [<a href="#NVexplanations">explanations</a>] + </td></tr></table> + + <xsl:for-each select="./Packages/Package"> + <xsl:if test="count(error) = 0"> + <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute> + <xsl:value-of select="@name"/></a></h3> + + <table width="100%"><tr> + <td><a href="#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td> + <td><a href="#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td> + <td><a href="#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td> + <td><a href="#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td> + <td><a href="#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td> + </tr></table> + + <table width="100%" class="details"> + <tr> + <th>Abstract Classes</th> + <th>Concrete Classes</th> + <th>Used by Packages</th> + <th>Uses Packages</th> + </tr> + <tr> + <td valign="top" width="25%"> + <xsl:if test="count(AbstractClasses/Class)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="AbstractClasses/Class"> + <xsl:value-of select="node()"/><br/> + </xsl:for-each> + </td> + <td valign="top" width="25%"> + <xsl:if test="count(ConcreteClasses/Class)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="ConcreteClasses/Class"> + <xsl:value-of select="node()"/><br/> + </xsl:for-each> + </td> + <td valign="top" width="25%"> + <xsl:if test="count(UsedBy/Package)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="UsedBy/Package"> + <a> + <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute> + <xsl:value-of select="node()"/> + </a><br/> + </xsl:for-each> + </td> + <td valign="top" width="25%"> + <xsl:if test="count(DependsUpon/Package)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="DependsUpon/Package"> + <a> + <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute> + <xsl:value-of select="node()"/> + </a><br/> + </xsl:for-each> + </td> + </tr> + </table> + </xsl:if> + </xsl:for-each> + + <table width="100%"><tr><td> + <a name="NVcycles"><h2>Cycles</h2></a> + </td><td align="right"> + [<a href="#NVsummary">summary</a>] + [<a href="#NVpackages">packages</a>] + [<a href="#NVcycles">cycles</a>] + [<a href="#NVexplanations">explanations</a>] + </td></tr></table> + + <xsl:if test="count(Cycles/Package) = 0"> + <p>There are no cyclic dependancies.</p> + </xsl:if> + <xsl:for-each select="Cycles/Package"> + <h3><xsl:value-of select="@Name"/></h3><p> + <xsl:for-each select="Package"> + <xsl:value-of select="."/><br/> + </xsl:for-each></p> + </xsl:for-each> + + <table width="100%"><tr><td> + <a name="NVexplanations"><h2>Explanations</h2></a> + </td><td align="right"> + [<a href="#NVsummary">summary</a>] + [<a href="#NVpackages">packages</a>] + [<a href="#NVcycles">cycles</a>] + [<a href="#NVexplanations">explanations</a>] + </td></tr></table> + + <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p> + + <h3><a name="EXnumber">Number of Classes</a></h3> + <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p> + <h3><a name="EXafferent">Afferent Couplings</a></h3> + <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p> + <h3><a name="EXefferent">Efferent Couplings</a></h3> + <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p> + <h3><a name="EXabstractness">Abstractness</a></h3> + <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p> + <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p> + <h3><a name="EXinstability">Instability</a></h3> + <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p> + <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p> + <h3><a name="EXdistance">Distance</a></h3> + <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p> + <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p> + <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p> + + </body> + </html> +</xsl:template> + +</xsl:stylesheet> diff --git a/lib/ant/etc/junit-frames-xalan1.xsl b/lib/ant/etc/junit-frames-xalan1.xsl new file mode 100644 index 000000000..114e45973 --- /dev/null +++ b/lib/ant/etc/junit-frames-xalan1.xsl @@ -0,0 +1,716 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:lxslt="http://xml.apache.org/xslt" + xmlns:redirect="org.apache.xalan.lib.Redirect" + xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils" + extension-element-prefixes="redirect"> +<xsl:output method="html" indent="yes" encoding="US-ASCII"/> +<xsl:decimal-format decimal-separator="." grouping-separator=","/> +<!-- + Copyright 2001-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<!-- + + Sample stylesheet to be used with Ant JUnitReport output. + + It creates a set of HTML files a la javadoc where you can browse easily + through all packages and classes. + +--> +<xsl:param name="output.dir" select="'.'"/> + + +<xsl:template match="testsuites"> + <!-- create the index.html --> + <redirect:write file="{$output.dir}/index.html"> + <xsl:call-template name="index.html"/> + </redirect:write> + + <!-- create the stylesheet.css --> + <redirect:write file="{$output.dir}/stylesheet.css"> + <xsl:call-template name="stylesheet.css"/> + </redirect:write> + + <!-- create the overview-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-summary.html"> + <xsl:apply-templates select="." mode="overview.packages"/> + </redirect:write> + + <!-- create the all-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-frame.html"> + <xsl:apply-templates select="." mode="all.packages"/> + </redirect:write> + + <!-- create the all-classes.html at the root --> + <redirect:write file="{$output.dir}/allclasses-frame.html"> + <xsl:apply-templates select="." mode="all.classes"/> + </redirect:write> + + <!-- process all packages --> + <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> + <xsl:call-template name="package"> + <xsl:with-param name="name" select="@package"/> + </xsl:call-template> + </xsl:for-each> +</xsl:template> + + +<xsl:template name="package"> + <xsl:param name="name"/> + <xsl:variable name="package.dir"> + <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if> + <xsl:if test="$name = ''">.</xsl:if> + </xsl:variable> + <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> --> + <!-- create a classes-list.html in the package directory --> + <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html"> + <xsl:call-template name="classes.list"> + <xsl:with-param name="name" select="$name"/> + </xsl:call-template> + </redirect:write> + + <!-- create a package-summary.html in the package directory --> + <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html"> + <xsl:call-template name="package.summary"> + <xsl:with-param name="name" select="$name"/> + </xsl:call-template> + </redirect:write> + + <!-- for each class, creates a @name.html --> + <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten --> + <xsl:for-each select="/testsuites/testsuite[@package = $name]"> + <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html"> + <xsl:apply-templates select="." mode="class.details"/> + </redirect:write> + <xsl:if test="string-length(./system-out)!=0"> + <redirect:write file="{$output.dir}/{$package.dir}/{@name}-out.txt"> + <xsl:value-of select="./system-out" /> + </redirect:write> + </xsl:if> + <xsl:if test="string-length(./system-err)!=0"> + <redirect:write file="{$output.dir}/{$package.dir}/{@name}-err.txt"> + <xsl:value-of select="./system-err" /> + </redirect:write> + </xsl:if> + </xsl:for-each> +</xsl:template> + +<xsl:template name="index.html"> +<html> + <head> + <title>Unit Test Results.</title> + </head> + <frameset cols="20%,80%"> + <frameset rows="30%,70%"> + <frame src="overview-frame.html" name="packageListFrame"/> + <frame src="allclasses-frame.html" name="classListFrame"/> + </frameset> + <frame src="overview-summary.html" name="classFrame"/> + <noframes> + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + </noframes> + </frameset> +</html> +</xsl:template> + +<!-- this is the stylesheet css to use for nearly everything --> +<xsl:template name="stylesheet.css"> +body { + font:normal 68% verdana,arial,helvetica; + color:#000000; +} +table tr td, table tr th { + font-size: 68%; +} +table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; +} +table.details tr td{ + background:#eeeee0; +} + +p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; +} +h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica +} +h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica +} +h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica +} +h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +.Error { + font-weight:bold; color:red; +} +.Failure { + font-weight:bold; color:purple; +} +.Properties { + text-align:right; +} +</xsl:template> + + +<!-- ====================================================================== + This page is created for every testsuite class. + It prints a summary of the testsuite and detailed information about + testcase methods. + ====================================================================== --> +<xsl:template match="testsuite" mode="class.details"> + <xsl:variable name="package.name" select="@package"/> + <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable> + <html> + <head> + <title>Unit Test Results: <xsl:value-of select="$class.name"/></title> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="$package.name"/> + </xsl:call-template> + <script type="text/javascript" language="JavaScript"> + var TestCases = new Array(); + var cur; + <xsl:apply-templates select="properties"/> + </script> + <script type="text/javascript" language="JavaScript"><![CDATA[ + function displayProperties (name) { + var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1'); + var doc = win.document.open(); + doc.write("<html><head><title>Properties of " + name + "</title>"); + doc.write("<style type=\"text/css\">"); + doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }"); + doc.write("table tr td, table tr th { font-size: 68%; }"); + doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }"); + doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }"); + doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }"); + doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }"); + doc.write("</style>"); + doc.write("</head><body>"); + doc.write("<h3>Properties of " + name + "</h3>"); + doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>"); + doc.write("<table class='properties'>"); + doc.write("<tr><th>Name</th><th>Value</th></tr>"); + for (prop in TestCases[name]) { + doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>"); + } + doc.write("</table>"); + doc.write("</body></html>"); + doc.close(); + win.focus(); + } + ]]> + </script> + </head> + <body> + <xsl:call-template name="pageHeader"/> + <h3>Class <xsl:value-of select="$class.name"/></h3> + + + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="testsuite.test.header"/> + <xsl:apply-templates select="." mode="print.test"/> + </table> + + <h2>Tests</h2> + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="testcase.test.header"/> + <!-- + test can even not be started at all (failure to load the class) + so report the error directly + --> + <xsl:if test="./error"> + <tr class="Error"> + <td colspan="4"><xsl:apply-templates select="./error"/></td> + </tr> + </xsl:if> + <xsl:apply-templates select="./testcase" mode="print.test"/> + </table> + <div class="Properties"> + <a> + <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute> + Properties » + </a> + </div> + <xsl:if test="string-length(./system-out)!=0"> + <div class="Properties"> + <a> + <xsl:attribute name="href">./<xsl:value-of select="@name"/>-out.txt</xsl:attribute> + System.out » + </a> + </div> + </xsl:if> + <xsl:if test="string-length(./system-err)!=0"> + <div class="Properties"> + <a> + <xsl:attribute name="href">./<xsl:value-of select="@name"/>-err.txt</xsl:attribute> + System.err » + </a> + </div> + </xsl:if> + </body> + </html> +</xsl:template> + + <!-- + Write properties into a JavaScript data structure. + This is based on the original idea by Erik Hatcher (ehatcher@apache.org) + --> + <xsl:template match="properties"> + cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array(); + <xsl:for-each select="property"> + <xsl:sort select="@name"/> + cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>'; + </xsl:for-each> + </xsl:template> + + +<!-- ====================================================================== + This page is created for every package. + It prints the name of all classes that belongs to this package. + @param name the package name to print classes. + ====================================================================== --> +<!-- list of classes in a package --> +<xsl:template name="classes.list"> + <xsl:param name="name"/> + <html> + <head> + <title>Unit Test Classes: <xsl:value-of select="$name"/></title> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="$name"/> + </xsl:call-template> + </head> + <body> + <table width="100%"> + <tr> + <td nowrap="nowrap"> + <h2><a href="package-summary.html" target="classFrame"> + <xsl:value-of select="$name"/> + <xsl:if test="$name = ''"><none></xsl:if> + </a></h2> + </td> + </tr> + </table> + + <h2>Classes</h2> + <table width="100%"> + <xsl:for-each select="/testsuites/testsuite[./@package = $name]"> + <xsl:sort select="@name"/> + <tr> + <td nowrap="nowrap"> + <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a> + </td> + </tr> + </xsl:for-each> + </table> + </body> + </html> +</xsl:template> + + +<!-- + Creates an all-classes.html file that contains a link to all package-summary.html + on each class. +--> +<xsl:template match="testsuites" mode="all.classes"> + <html> + <head> + <title>All Unit Test Classes</title> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name"/> + </xsl:call-template> + </head> + <body> + <h2>Classes</h2> + <table width="100%"> + <xsl:apply-templates select="testsuite" mode="all.classes"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + </table> + </body> + </html> +</xsl:template> + +<xsl:template match="testsuite" mode="all.classes"> + <xsl:variable name="package.name" select="@package"/> + <tr> + <td nowrap="nowrap"> + <a target="classFrame"> + <xsl:attribute name="href"> + <xsl:if test="not($package.name='')"> + <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text> + </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text> + </xsl:attribute> + <xsl:value-of select="@name"/> + </a> + </td> + </tr> +</xsl:template> + + +<!-- + Creates an html file that contains a link to all package-summary.html files on + each package existing on testsuites. + @bug there will be a problem here, I don't know yet how to handle unnamed package :( +--> +<xsl:template match="testsuites" mode="all.packages"> + <html> + <head> + <title>All Unit Test Packages</title> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name"/> + </xsl:call-template> + </head> + <body> + <h2><a href="overview-summary.html" target="classFrame">Home</a></h2> + <h2>Packages</h2> + <table width="100%"> + <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages"> + <xsl:sort select="@package"/> + </xsl:apply-templates> + </table> + </body> + </html> +</xsl:template> + +<xsl:template match="testsuite" mode="all.packages"> + <tr> + <td nowrap="nowrap"> + <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame"> + <xsl:value-of select="@package"/> + <xsl:if test="@package = ''"><none></xsl:if> + </a> + </td> + </tr> +</xsl:template> + + +<xsl:template match="testsuites" mode="overview.packages"> + <html> + <head> + <title>Unit Test Results: Summary</title> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name"/> + </xsl:call-template> + </head> + <body> + <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute> + <xsl:call-template name="pageHeader"/> + <h2>Summary</h2> + <xsl:variable name="testCount" select="sum(testsuite/@tests)"/> + <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/> + <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/> + <xsl:variable name="timeCount" select="sum(testsuite/@time)"/> + <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/> + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <tr valign="top"> + <th>Tests</th> + <th>Failures</th> + <th>Errors</th> + <th>Success rate</th> + <th>Time</th> + </tr> + <tr valign="top"> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="$errorCount > 0">Error</xsl:when> + <xsl:when test="$failureCount > 0">Failure</xsl:when> + <xsl:otherwise>Pass</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <td><xsl:value-of select="$testCount"/></td> + <td><xsl:value-of select="$failureCount"/></td> + <td><xsl:value-of select="$errorCount"/></td> + <td> + <xsl:call-template name="display-percent"> + <xsl:with-param name="value" select="$successRate"/> + </xsl:call-template> + </td> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="$timeCount"/> + </xsl:call-template> + </td> + </tr> + </table> + <table border="0" width="95%"> + <tr> + <td style="text-align: justify;"> + Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated. + </td> + </tr> + </table> + + <h2>Packages</h2> + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="testsuite.test.header"/> + <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> + <xsl:sort select="@package" order="ascending"/> + <!-- get the node set containing all testsuites that have the same package --> + <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/> + <tr valign="top"> + <!-- display a failure if there is any failure/error in the package --> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="sum($insamepackage/@errors) > 0">Error</xsl:when> + <xsl:when test="sum($insamepackage/@failures) > 0">Failure</xsl:when> + <xsl:otherwise>Pass</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <td><a href="./{translate(@package,'.','/')}/package-summary.html"> + <xsl:value-of select="@package"/> + <xsl:if test="@package = ''"><none></xsl:if> + </a></td> + <td><xsl:value-of select="sum($insamepackage/@tests)"/></td> + <td><xsl:value-of select="sum($insamepackage/@errors)"/></td> + <td><xsl:value-of select="sum($insamepackage/@failures)"/></td> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="sum($insamepackage/@time)"/> + </xsl:call-template> + </td> + <td><xsl:value-of select="$insamepackage/@timestamp"/></td> + <td><xsl:value-of select="$insamepackage/@hostname"/></td> + </tr> + </xsl:for-each> + </table> + </body> + </html> +</xsl:template> + + +<xsl:template name="package.summary"> + <xsl:param name="name"/> + <html> + <head> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="$name"/> + </xsl:call-template> + </head> + <body> + <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute> + <xsl:call-template name="pageHeader"/> + <h3>Package <xsl:value-of select="$name"/></h3> + + <!--table border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="class.metrics.header"/> + <xsl:apply-templates select="." mode="print.metrics"/> + </table--> + + <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/> + <xsl:if test="count($insamepackage) > 0"> + <h2>Classes</h2> + <p> + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="testsuite.test.header"/> + <xsl:apply-templates select="$insamepackage" mode="print.test"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + </table> + </p> + </xsl:if> + </body> + </html> +</xsl:template> + + +<!-- + transform string like a.b.c to ../../../ + @param path the path to transform into a descending directory path +--> +<xsl:template name="path"> + <xsl:param name="path"/> + <xsl:if test="contains($path,'.')"> + <xsl:text>../</xsl:text> + <xsl:call-template name="path"> + <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param> + </xsl:call-template> + </xsl:if> + <xsl:if test="not(contains($path,'.')) and not($path = '')"> + <xsl:text>../</xsl:text> + </xsl:if> +</xsl:template> + + +<!-- create the link to the stylesheet based on the package name --> +<xsl:template name="create.stylesheet.link"> + <xsl:param name="package.name"/> + <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link> +</xsl:template> + + +<!-- Page HEADER --> +<xsl:template name="pageHeader"> + <h1>Unit Test Results</h1> + <table width="100%"> + <tr> + <td align="left"></td> + <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://jakarta.apache.org/">Ant</a>.</td> + </tr> + </table> + <hr size="1"/> +</xsl:template> + +<!-- class header --> +<xsl:template name="testsuite.test.header"> + <tr valign="top"> + <th width="80%">Name</th> + <th>Tests</th> + <th>Errors</th> + <th>Failures</th> + <th nowrap="nowrap">Time(s)</th> + <th nowrap="nowrap">Time Stamp</th> + <th>Host</th> + </tr> +</xsl:template> + +<!-- method header --> +<xsl:template name="testcase.test.header"> + <tr valign="top"> + <th>Name</th> + <th>Status</th> + <th width="80%">Type</th> + <th nowrap="nowrap">Time(s)</th> + </tr> +</xsl:template> + + +<!-- class information --> +<xsl:template match="testsuite" mode="print.test"> + <tr valign="top"> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="@errors[.> 0]">Error</xsl:when> + <xsl:when test="@failures[.> 0]">Failure</xsl:when> + <xsl:otherwise>Pass</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td> + <td><xsl:apply-templates select="@tests"/></td> + <td><xsl:apply-templates select="@errors"/></td> + <td><xsl:apply-templates select="@failures"/></td> + <td><xsl:call-template name="display-time"> + <xsl:with-param name="value" select="@time"/> + </xsl:call-template> + </td> + <td><xsl:apply-templates select="@timestamp"/></td> + <td><xsl:apply-templates select="@hostname"/></td> + </tr> +</xsl:template> + +<xsl:template match="testcase" mode="print.test"> + <tr valign="top"> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="error">Error</xsl:when> + <xsl:when test="failure">Failure</xsl:when> + <xsl:otherwise>TableRowColor</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <td><xsl:value-of select="@name"/></td> + <xsl:choose> + <xsl:when test="failure"> + <td>Failure</td> + <td><xsl:apply-templates select="failure"/></td> + </xsl:when> + <xsl:when test="error"> + <td>Error</td> + <td><xsl:apply-templates select="error"/></td> + </xsl:when> + <xsl:otherwise> + <td>Success</td> + <td></td> + </xsl:otherwise> + </xsl:choose> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="@time"/> + </xsl:call-template> + </td> + </tr> +</xsl:template> + + +<!-- Note : the below template error and failure are the same style + so just call the same style store in the toolkit template --> +<xsl:template match="failure"> + <xsl:call-template name="display-failures"/> +</xsl:template> + +<xsl:template match="error"> + <xsl:call-template name="display-failures"/> +</xsl:template> + +<!-- Style for the error and failure in the testcase template --> +<xsl:template name="display-failures"> + <xsl:choose> + <xsl:when test="not(@message)">N/A</xsl:when> + <xsl:otherwise> + <xsl:value-of select="@message"/> + </xsl:otherwise> + </xsl:choose> + <!-- display the stacktrace --> + <br/><br/> + <code> + <xsl:call-template name="br-replace"> + <xsl:with-param name="word" select="."/> + </xsl:call-template> + </code> + <!-- the latter is better but might be problematic for non-21" monitors... --> + <!--pre><xsl:value-of select="."/></pre--> +</xsl:template> + +<xsl:template name="JS-escape"> + <xsl:param name="string"/> + <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/> + <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/> + <xsl:value-of select="$tmp2"/> +</xsl:template> + + +<!-- + template that will convert a carriage return into a br tag + @param word the text from which to convert CR to BR tag +--> +<xsl:template name="br-replace"> + <xsl:param name="word"/> + <xsl:param name="br"><br/></xsl:param> + <xsl:value-of select='stringutils:replace(string($word),"
",$br)'/> +</xsl:template> + +<xsl:template name="display-time"> + <xsl:param name="value"/> + <xsl:value-of select="format-number($value,'0.000')"/> +</xsl:template> + +<xsl:template name="display-percent"> + <xsl:param name="value"/> + <xsl:value-of select="format-number($value,'0.00%')"/> +</xsl:template> +</xsl:stylesheet> diff --git a/lib/ant/etc/junit-frames.xsl b/lib/ant/etc/junit-frames.xsl new file mode 100644 index 000000000..229e8dd87 --- /dev/null +++ b/lib/ant/etc/junit-frames.xsl @@ -0,0 +1,712 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:lxslt="http://xml.apache.org/xslt" + xmlns:redirect="http://xml.apache.org/xalan/redirect" + xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils" + extension-element-prefixes="redirect"> +<xsl:output method="html" indent="yes" encoding="US-ASCII"/> +<xsl:decimal-format decimal-separator="." grouping-separator=","/> +<!-- + Copyright 2001-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<!-- + + Sample stylesheet to be used with Ant JUnitReport output. + + It creates a set of HTML files a la javadoc where you can browse easily + through all packages and classes. + +--> +<xsl:param name="output.dir" select="'.'"/> + + +<xsl:template match="testsuites"> + <!-- create the index.html --> + <redirect:write file="{$output.dir}/index.html"> + <xsl:call-template name="index.html"/> + </redirect:write> + + <!-- create the stylesheet.css --> + <redirect:write file="{$output.dir}/stylesheet.css"> + <xsl:call-template name="stylesheet.css"/> + </redirect:write> + + <!-- create the overview-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-summary.html"> + <xsl:apply-templates select="." mode="overview.packages"/> + </redirect:write> + + <!-- create the all-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-frame.html"> + <xsl:apply-templates select="." mode="all.packages"/> + </redirect:write> + + <!-- create the all-classes.html at the root --> + <redirect:write file="{$output.dir}/allclasses-frame.html"> + <xsl:apply-templates select="." mode="all.classes"/> + </redirect:write> + + <!-- process all packages --> + <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> + <xsl:call-template name="package"> + <xsl:with-param name="name" select="@package"/> + </xsl:call-template> + </xsl:for-each> +</xsl:template> + + +<xsl:template name="package"> + <xsl:param name="name"/> + <xsl:variable name="package.dir"> + <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if> + <xsl:if test="$name = ''">.</xsl:if> + </xsl:variable> + <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> --> + <!-- create a classes-list.html in the package directory --> + <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html"> + <xsl:call-template name="classes.list"> + <xsl:with-param name="name" select="$name"/> + </xsl:call-template> + </redirect:write> + + <!-- create a package-summary.html in the package directory --> + <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html"> + <xsl:call-template name="package.summary"> + <xsl:with-param name="name" select="$name"/> + </xsl:call-template> + </redirect:write> + + <!-- for each class, creates a @name.html --> + <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten --> + <xsl:for-each select="/testsuites/testsuite[@package = $name]"> + <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}.html"> + <xsl:apply-templates select="." mode="class.details"/> + </redirect:write> + <xsl:if test="string-length(./system-out)!=0"> + <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-out.txt"> + <xsl:value-of select="./system-out" /> + </redirect:write> + </xsl:if> + <xsl:if test="string-length(./system-err)!=0"> + <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-err.txt"> + <xsl:value-of select="./system-err" /> + </redirect:write> + </xsl:if> + </xsl:for-each> +</xsl:template> + +<xsl:template name="index.html"> +<html> + <head> + <title>Unit Test Results.</title> + </head> + <frameset cols="20%,80%"> + <frameset rows="30%,70%"> + <frame src="overview-frame.html" name="packageListFrame"/> + <frame src="allclasses-frame.html" name="classListFrame"/> + </frameset> + <frame src="overview-summary.html" name="classFrame"/> + <noframes> + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + </noframes> + </frameset> +</html> +</xsl:template> + +<!-- this is the stylesheet css to use for nearly everything --> +<xsl:template name="stylesheet.css"> +body { + font:normal 68% verdana,arial,helvetica; + color:#000000; +} +table tr td, table tr th { + font-size: 68%; +} +table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; +} +table.details tr td{ + background:#eeeee0; +} + +p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; +} +h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica +} +h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica +} +h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica +} +h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +.Error { + font-weight:bold; color:red; +} +.Failure { + font-weight:bold; color:purple; +} +.Properties { + text-align:right; +} +</xsl:template> + + +<!-- ====================================================================== + This page is created for every testsuite class. + It prints a summary of the testsuite and detailed information about + testcase methods. + ====================================================================== --> +<xsl:template match="testsuite" mode="class.details"> + <xsl:variable name="package.name" select="@package"/> + <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable> + <html> + <head> + <title>Unit Test Results: <xsl:value-of select="$class.name"/></title> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="$package.name"/> + </xsl:call-template> + <script type="text/javascript" language="JavaScript"> + var TestCases = new Array(); + var cur; + <xsl:apply-templates select="properties"/> + </script> + <script type="text/javascript" language="JavaScript"><![CDATA[ + function displayProperties (name) { + var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1'); + var doc = win.document.open(); + doc.write("<html><head><title>Properties of " + name + "</title>"); + doc.write("<style type=\"text/css\">"); + doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }"); + doc.write("table tr td, table tr th { font-size: 68%; }"); + doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }"); + doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }"); + doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }"); + doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }"); + doc.write("</style>"); + doc.write("</head><body>"); + doc.write("<h3>Properties of " + name + "</h3>"); + doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>"); + doc.write("<table class='properties'>"); + doc.write("<tr><th>Name</th><th>Value</th></tr>"); + for (prop in TestCases[name]) { + doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>"); + } + doc.write("</table>"); + doc.write("</body></html>"); + doc.close(); + win.focus(); + } + ]]> + </script> + </head> + <body> + <xsl:call-template name="pageHeader"/> + <h3>Class <xsl:value-of select="$class.name"/></h3> + + + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="testsuite.test.header"/> + <xsl:apply-templates select="." mode="print.test"/> + </table> + + <h2>Tests</h2> + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="testcase.test.header"/> + <!-- + test can even not be started at all (failure to load the class) + so report the error directly + --> + <xsl:if test="./error"> + <tr class="Error"> + <td colspan="4"><xsl:apply-templates select="./error"/></td> + </tr> + </xsl:if> + <xsl:apply-templates select="./testcase" mode="print.test"/> + </table> + <div class="Properties"> + <a> + <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute> + Properties » + </a> + </div> + <xsl:if test="string-length(./system-out)!=0"> + <div class="Properties"> + <a> + <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-out.txt</xsl:attribute> + System.out » + </a> + </div> + </xsl:if> + <xsl:if test="string-length(./system-err)!=0"> + <div class="Properties"> + <a> + <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-err.txt</xsl:attribute> + System.err » + </a> + </div> + </xsl:if> + </body> + </html> +</xsl:template> + + <!-- + Write properties into a JavaScript data structure. + This is based on the original idea by Erik Hatcher (ehatcher@apache.org) + --> + <xsl:template match="properties"> + cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array(); + <xsl:for-each select="property"> + <xsl:sort select="@name"/> + cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>'; + </xsl:for-each> + </xsl:template> + + +<!-- ====================================================================== + This page is created for every package. + It prints the name of all classes that belongs to this package. + @param name the package name to print classes. + ====================================================================== --> +<!-- list of classes in a package --> +<xsl:template name="classes.list"> + <xsl:param name="name"/> + <html> + <head> + <title>Unit Test Classes: <xsl:value-of select="$name"/></title> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="$name"/> + </xsl:call-template> + </head> + <body> + <table width="100%"> + <tr> + <td nowrap="nowrap"> + <h2><a href="package-summary.html" target="classFrame"> + <xsl:value-of select="$name"/> + <xsl:if test="$name = ''"><none></xsl:if> + </a></h2> + </td> + </tr> + </table> + + <h2>Classes</h2> + <table width="100%"> + <xsl:for-each select="/testsuites/testsuite[./@package = $name]"> + <xsl:sort select="@name"/> + <tr> + <td nowrap="nowrap"> + <a href="{@id}_{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a> + </td> + </tr> + </xsl:for-each> + </table> + </body> + </html> +</xsl:template> + + +<!-- + Creates an all-classes.html file that contains a link to all package-summary.html + on each class. +--> +<xsl:template match="testsuites" mode="all.classes"> + <html> + <head> + <title>All Unit Test Classes</title> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name"/> + </xsl:call-template> + </head> + <body> + <h2>Classes</h2> + <table width="100%"> + <xsl:apply-templates select="testsuite" mode="all.classes"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + </table> + </body> + </html> +</xsl:template> + +<xsl:template match="testsuite" mode="all.classes"> + <xsl:variable name="package.name" select="@package"/> + <tr> + <td nowrap="nowrap"> + <a target="classFrame"> + <xsl:attribute name="href"> + <xsl:if test="not($package.name='')"> + <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text> + </xsl:if><xsl:value-of select="@id"/>_<xsl:value-of select="@name"/><xsl:text>.html</xsl:text> + </xsl:attribute> + <xsl:value-of select="@name"/> + </a> + </td> + </tr> +</xsl:template> + + +<!-- + Creates an html file that contains a link to all package-summary.html files on + each package existing on testsuites. + @bug there will be a problem here, I don't know yet how to handle unnamed package :( +--> +<xsl:template match="testsuites" mode="all.packages"> + <html> + <head> + <title>All Unit Test Packages</title> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name"/> + </xsl:call-template> + </head> + <body> + <h2><a href="overview-summary.html" target="classFrame">Home</a></h2> + <h2>Packages</h2> + <table width="100%"> + <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages"> + <xsl:sort select="@package"/> + </xsl:apply-templates> + </table> + </body> + </html> +</xsl:template> + +<xsl:template match="testsuite" mode="all.packages"> + <tr> + <td nowrap="nowrap"> + <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame"> + <xsl:value-of select="@package"/> + <xsl:if test="@package = ''"><none></xsl:if> + </a> + </td> + </tr> +</xsl:template> + + +<xsl:template match="testsuites" mode="overview.packages"> + <html> + <head> + <title>Unit Test Results: Summary</title> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name"/> + </xsl:call-template> + </head> + <body> + <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute> + <xsl:call-template name="pageHeader"/> + <h2>Summary</h2> + <xsl:variable name="testCount" select="sum(testsuite/@tests)"/> + <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/> + <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/> + <xsl:variable name="timeCount" select="sum(testsuite/@time)"/> + <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/> + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <tr valign="top"> + <th>Tests</th> + <th>Failures</th> + <th>Errors</th> + <th>Success rate</th> + <th>Time</th> + </tr> + <tr valign="top"> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="$errorCount > 0">Error</xsl:when> + <xsl:when test="$failureCount > 0">Failure</xsl:when> + <xsl:otherwise>Pass</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <td><xsl:value-of select="$testCount"/></td> + <td><xsl:value-of select="$failureCount"/></td> + <td><xsl:value-of select="$errorCount"/></td> + <td> + <xsl:call-template name="display-percent"> + <xsl:with-param name="value" select="$successRate"/> + </xsl:call-template> + </td> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="$timeCount"/> + </xsl:call-template> + </td> + + </tr> + </table> + <table border="0" width="95%"> + <tr> + <td style="text-align: justify;"> + Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated. + </td> + </tr> + </table> + + <h2>Packages</h2> + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="testsuite.test.header"/> + <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> + <xsl:sort select="@package" order="ascending"/> + <!-- get the node set containing all testsuites that have the same package --> + <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/> + <tr valign="top"> + <!-- display a failure if there is any failure/error in the package --> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="sum($insamepackage/@errors) > 0">Error</xsl:when> + <xsl:when test="sum($insamepackage/@failures) > 0">Failure</xsl:when> + <xsl:otherwise>Pass</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <td><a href="./{translate(@package,'.','/')}/package-summary.html"> + <xsl:value-of select="@package"/> + <xsl:if test="@package = ''"><none></xsl:if> + </a></td> + <td><xsl:value-of select="sum($insamepackage/@tests)"/></td> + <td><xsl:value-of select="sum($insamepackage/@errors)"/></td> + <td><xsl:value-of select="sum($insamepackage/@failures)"/></td> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="sum($insamepackage/@time)"/> + </xsl:call-template> + </td> + </tr> + </xsl:for-each> + </table> + </body> + </html> +</xsl:template> + + +<xsl:template name="package.summary"> + <xsl:param name="name"/> + <html> + <head> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="$name"/> + </xsl:call-template> + </head> + <body> + <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute> + <xsl:call-template name="pageHeader"/> + <h3>Package <xsl:value-of select="$name"/></h3> + + <!--table border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="class.metrics.header"/> + <xsl:apply-templates select="." mode="print.metrics"/> + </table--> + + <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/> + <xsl:if test="count($insamepackage) > 0"> + <h2>Classes</h2> + <p> + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="testsuite.test.header"/> + <xsl:apply-templates select="$insamepackage" mode="print.test"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + </table> + </p> + </xsl:if> + </body> + </html> +</xsl:template> + + +<!-- + transform string like a.b.c to ../../../ + @param path the path to transform into a descending directory path +--> +<xsl:template name="path"> + <xsl:param name="path"/> + <xsl:if test="contains($path,'.')"> + <xsl:text>../</xsl:text> + <xsl:call-template name="path"> + <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param> + </xsl:call-template> + </xsl:if> + <xsl:if test="not(contains($path,'.')) and not($path = '')"> + <xsl:text>../</xsl:text> + </xsl:if> +</xsl:template> + + +<!-- create the link to the stylesheet based on the package name --> +<xsl:template name="create.stylesheet.link"> + <xsl:param name="package.name"/> + <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link> +</xsl:template> + + +<!-- Page HEADER --> +<xsl:template name="pageHeader"> + <h1>Unit Test Results</h1> + <table width="100%"> + <tr> + <td align="left"></td> + <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://jakarta.apache.org/">Ant</a>.</td> + </tr> + </table> + <hr size="1"/> +</xsl:template> + +<!-- class header --> +<xsl:template name="testsuite.test.header"> + <tr valign="top"> + <th width="80%">Name</th> + <th>Tests</th> + <th>Errors</th> + <th>Failures</th> + <th nowrap="nowrap">Time(s)</th> + </tr> +</xsl:template> + +<!-- method header --> +<xsl:template name="testcase.test.header"> + <tr valign="top"> + <th>Name</th> + <th>Status</th> + <th width="80%">Type</th> + <th nowrap="nowrap">Time(s)</th> + </tr> +</xsl:template> + + +<!-- class information --> +<xsl:template match="testsuite" mode="print.test"> + <tr valign="top"> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="@errors[.> 0]">Error</xsl:when> + <xsl:when test="@failures[.> 0]">Failure</xsl:when> + <xsl:otherwise>Pass</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <td><a href="{@id}_{@name}.html"><xsl:value-of select="@name"/></a></td> + <td><xsl:apply-templates select="@tests"/></td> + <td><xsl:apply-templates select="@errors"/></td> + <td><xsl:apply-templates select="@failures"/></td> + <td><xsl:call-template name="display-time"> + <xsl:with-param name="value" select="@time"/> + </xsl:call-template> + </td> + </tr> +</xsl:template> + +<xsl:template match="testcase" mode="print.test"> + <tr valign="top"> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="error">Error</xsl:when> + <xsl:when test="failure">Failure</xsl:when> + <xsl:otherwise>TableRowColor</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <td><xsl:value-of select="@name"/></td> + <xsl:choose> + <xsl:when test="failure"> + <td>Failure</td> + <td><xsl:apply-templates select="failure"/></td> + </xsl:when> + <xsl:when test="error"> + <td>Error</td> + <td><xsl:apply-templates select="error"/></td> + </xsl:when> + <xsl:otherwise> + <td>Success</td> + <td></td> + </xsl:otherwise> + </xsl:choose> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="@time"/> + </xsl:call-template> + </td> + </tr> +</xsl:template> + + +<!-- Note : the below template error and failure are the same style + so just call the same style store in the toolkit template --> +<xsl:template match="failure"> + <xsl:call-template name="display-failures"/> +</xsl:template> + +<xsl:template match="error"> + <xsl:call-template name="display-failures"/> +</xsl:template> + +<!-- Style for the error and failure in the testcase template --> +<xsl:template name="display-failures"> + <xsl:choose> + <xsl:when test="not(@message)">N/A</xsl:when> + <xsl:otherwise> + <xsl:value-of select="@message"/> + </xsl:otherwise> + </xsl:choose> + <!-- display the stacktrace --> + <br/><br/> + <code> + <xsl:call-template name="br-replace"> + <xsl:with-param name="word" select="."/> + </xsl:call-template> + </code> + <!-- the latter is better but might be problematic for non-21" monitors... --> + <!--pre><xsl:value-of select="."/></pre--> +</xsl:template> + +<xsl:template name="JS-escape"> + <xsl:param name="string"/> + <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/> + <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/> + <xsl:value-of select="$tmp2"/> +</xsl:template> + + +<!-- + template that will convert a carriage return into a br tag + @param word the text from which to convert CR to BR tag +--> +<xsl:template name="br-replace"> + <xsl:param name="word"/> + <xsl:param name="br"><br/></xsl:param> + <xsl:value-of select='stringutils:replace(string($word),"
",$br)'/> +</xsl:template> + +<xsl:template name="display-time"> + <xsl:param name="value"/> + <xsl:value-of select="format-number($value,'0.000')"/> +</xsl:template> + +<xsl:template name="display-percent"> + <xsl:param name="value"/> + <xsl:value-of select="format-number($value,'0.00%')"/> +</xsl:template> +</xsl:stylesheet> + diff --git a/lib/ant/etc/junit-noframes.xsl b/lib/ant/etc/junit-noframes.xsl new file mode 100644 index 000000000..25487f8fd --- /dev/null +++ b/lib/ant/etc/junit-noframes.xsl @@ -0,0 +1,461 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:lxslt="http://xml.apache.org/xslt" + xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"> +<xsl:output method="html" indent="yes" encoding="US-ASCII" + doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" /> +<xsl:decimal-format decimal-separator="." grouping-separator="," /> +<!-- + Copyright 2001-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<!-- + + Sample stylesheet to be used with Ant JUnitReport output. + + It creates a non-framed report that can be useful to send via + e-mail or such. + + @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/> + @author Erik Hatcher <a href="mailto:ehatcher@apache.org"/> + +--> +<xsl:template match="testsuites"> + <html> + <head> + <title>Unit Test Results</title> + <style type="text/css"> + body { + font:normal 68% verdana,arial,helvetica; + color:#000000; + } + table tr td, table tr th { + font-size: 68%; + } + table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; + } + table.details tr td{ + background:#eeeee0; + } + + p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; + } + h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica + } + h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica + } + h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica + } + h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + .Error { + font-weight:bold; color:red; + } + .Failure { + font-weight:bold; color:purple; + } + .Properties { + text-align:right; + } + </style> + <script type="text/javascript" language="JavaScript"> + var TestCases = new Array(); + var cur; + <xsl:for-each select="./testsuite"> + <xsl:apply-templates select="properties"/> + </xsl:for-each> + + </script> + <script type="text/javascript" language="JavaScript"><![CDATA[ + function displayProperties (name) { + var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1'); + var doc = win.document.open(); + doc.write("<html><head><title>Properties of " + name + "</title>"); + doc.write("<style>") + doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }"); + doc.write("table tr td, table tr th { font-size: 68%; }"); + doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }"); + doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }"); + doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }"); + doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }"); + doc.write("</style>"); + doc.write("</head><body>"); + doc.write("<h3>Properties of " + name + "</h3>"); + doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>"); + doc.write("<table class='properties'>"); + doc.write("<tr><th>Name</th><th>Value</th></tr>"); + for (prop in TestCases[name]) { + doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>"); + } + doc.write("</table>"); + doc.write("</body></html>"); + doc.close(); + win.focus(); + } + ]]> + </script> + </head> + <body> + <a name="top"></a> + <xsl:call-template name="pageHeader"/> + + <!-- Summary part --> + <xsl:call-template name="summary"/> + <hr size="1" width="95%" align="left"/> + + <!-- Package List part --> + <xsl:call-template name="packagelist"/> + <hr size="1" width="95%" align="left"/> + + <!-- For each package create its part --> + <xsl:call-template name="packages"/> + <hr size="1" width="95%" align="left"/> + + <!-- For each class create the part --> + <xsl:call-template name="classes"/> + + </body> + </html> +</xsl:template> + + + + <!-- ================================================================== --> + <!-- Write a list of all packages with an hyperlink to the anchor of --> + <!-- of the package name. --> + <!-- ================================================================== --> + <xsl:template name="packagelist"> + <h2>Packages</h2> + Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers. + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="testsuite.test.header"/> + <!-- list all packages recursively --> + <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> + <xsl:sort select="@package"/> + <xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/> + <xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/> + <xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/> + <xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/> + <xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/> + + <!-- write a summary for the package --> + <tr valign="top"> + <!-- set a nice color depending if there is an error/failure --> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="$failureCount > 0">Failure</xsl:when> + <xsl:when test="$errorCount > 0">Error</xsl:when> + </xsl:choose> + </xsl:attribute> + <td><a href="#{@package}"><xsl:value-of select="@package"/></a></td> + <td><xsl:value-of select="$testCount"/></td> + <td><xsl:value-of select="$errorCount"/></td> + <td><xsl:value-of select="$failureCount"/></td> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="$timeCount"/> + </xsl:call-template> + </td> + </tr> + </xsl:for-each> + </table> + </xsl:template> + + + <!-- ================================================================== --> + <!-- Write a package level report --> + <!-- It creates a table with values from the document: --> + <!-- Name | Tests | Errors | Failures | Time --> + <!-- ================================================================== --> + <xsl:template name="packages"> + <!-- create an anchor to this package name --> + <xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> + <xsl:sort select="@package"/> + <a name="{@package}"></a> + <h3>Package <xsl:value-of select="@package"/></h3> + + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="testsuite.test.header"/> + + <!-- match the testsuites of this package --> + <xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/> + </table> + <a href="#top">Back to top</a> + <p/> + <p/> + </xsl:for-each> + </xsl:template> + + <xsl:template name="classes"> + <xsl:for-each select="testsuite"> + <xsl:sort select="@name"/> + <!-- create an anchor to this class name --> + <a name="{@name}"></a> + <h3>TestCase <xsl:value-of select="@name"/></h3> + + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="testcase.test.header"/> + <!-- + test can even not be started at all (failure to load the class) + so report the error directly + --> + <xsl:if test="./error"> + <tr class="Error"> + <td colspan="4"><xsl:apply-templates select="./error"/></td> + </tr> + </xsl:if> + <xsl:apply-templates select="./testcase" mode="print.test"/> + </table> + <div class="Properties"> + <a> + <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute> + Properties » + </a> + </div> + <p/> + + <a href="#top">Back to top</a> + </xsl:for-each> + </xsl:template> + + <xsl:template name="summary"> + <h2>Summary</h2> + <xsl:variable name="testCount" select="sum(testsuite/@tests)"/> + <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/> + <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/> + <xsl:variable name="timeCount" select="sum(testsuite/@time)"/> + <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/> + <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> + <tr valign="top"> + <th>Tests</th> + <th>Failures</th> + <th>Errors</th> + <th>Success rate</th> + <th>Time</th> + </tr> + <tr valign="top"> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="$failureCount > 0">Failure</xsl:when> + <xsl:when test="$errorCount > 0">Error</xsl:when> + </xsl:choose> + </xsl:attribute> + <td><xsl:value-of select="$testCount"/></td> + <td><xsl:value-of select="$failureCount"/></td> + <td><xsl:value-of select="$errorCount"/></td> + <td> + <xsl:call-template name="display-percent"> + <xsl:with-param name="value" select="$successRate"/> + </xsl:call-template> + </td> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="$timeCount"/> + </xsl:call-template> + </td> + + </tr> + </table> + <table border="0" width="95%"> + <tr> + <td style="text-align: justify;"> + Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated. + </td> + </tr> + </table> + </xsl:template> + + <!-- + Write properties into a JavaScript data structure. + This is based on the original idea by Erik Hatcher (ehatcher@apache.org) + --> + <xsl:template match="properties"> + cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array(); + <xsl:for-each select="property"> + <xsl:sort select="@name"/> + cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>'; + </xsl:for-each> + </xsl:template> + +<!-- Page HEADER --> +<xsl:template name="pageHeader"> + <h1>Unit Test Results</h1> + <table width="100%"> + <tr> + <td align="left"></td> + <td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://jakarta.apache.org/ant'>Ant</a>.</td> + </tr> + </table> + <hr size="1"/> +</xsl:template> + +<xsl:template match="testsuite" mode="header"> + <tr valign="top"> + <th width="80%">Name</th> + <th>Tests</th> + <th>Errors</th> + <th>Failures</th> + <th nowrap="nowrap">Time(s)</th> + </tr> +</xsl:template> + +<!-- class header --> +<xsl:template name="testsuite.test.header"> + <tr valign="top"> + <th width="80%">Name</th> + <th>Tests</th> + <th>Errors</th> + <th>Failures</th> + <th nowrap="nowrap">Time(s)</th> + </tr> +</xsl:template> + +<!-- method header --> +<xsl:template name="testcase.test.header"> + <tr valign="top"> + <th>Name</th> + <th>Status</th> + <th width="80%">Type</th> + <th nowrap="nowrap">Time(s)</th> + </tr> +</xsl:template> + + +<!-- class information --> +<xsl:template match="testsuite" mode="print.test"> + <tr valign="top"> + <!-- set a nice color depending if there is an error/failure --> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="@failures[.> 0]">Failure</xsl:when> + <xsl:when test="@errors[.> 0]">Error</xsl:when> + </xsl:choose> + </xsl:attribute> + + <!-- print testsuite information --> + <td><a href="#{@name}"><xsl:value-of select="@name"/></a></td> + <td><xsl:value-of select="@tests"/></td> + <td><xsl:value-of select="@errors"/></td> + <td><xsl:value-of select="@failures"/></td> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="@time"/> + </xsl:call-template> + </td> + </tr> +</xsl:template> + +<xsl:template match="testcase" mode="print.test"> + <tr valign="top"> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="failure | error">Error</xsl:when> + </xsl:choose> + </xsl:attribute> + <td><xsl:value-of select="@name"/></td> + <xsl:choose> + <xsl:when test="failure"> + <td>Failure</td> + <td><xsl:apply-templates select="failure"/></td> + </xsl:when> + <xsl:when test="error"> + <td>Error</td> + <td><xsl:apply-templates select="error"/></td> + </xsl:when> + <xsl:otherwise> + <td>Success</td> + <td></td> + </xsl:otherwise> + </xsl:choose> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="@time"/> + </xsl:call-template> + </td> + </tr> +</xsl:template> + + +<xsl:template match="failure"> + <xsl:call-template name="display-failures"/> +</xsl:template> + +<xsl:template match="error"> + <xsl:call-template name="display-failures"/> +</xsl:template> + +<!-- Style for the error and failure in the tescase template --> +<xsl:template name="display-failures"> + <xsl:choose> + <xsl:when test="not(@message)">N/A</xsl:when> + <xsl:otherwise> + <xsl:value-of select="@message"/> + </xsl:otherwise> + </xsl:choose> + <!-- display the stacktrace --> + <code> + <br/><br/> + <xsl:call-template name="br-replace"> + <xsl:with-param name="word" select="."/> + </xsl:call-template> + </code> + <!-- the later is better but might be problematic for non-21" monitors... --> + <!--pre><xsl:value-of select="."/></pre--> +</xsl:template> + +<xsl:template name="JS-escape"> + <xsl:param name="string"/> + <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/> + <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/> + <xsl:value-of select="$tmp2"/> +</xsl:template> + + +<!-- + template that will convert a carriage return into a br tag + @param word the text from which to convert CR to BR tag +--> +<xsl:template name="br-replace"> + <xsl:param name="word"/> + <xsl:param name="br"><br/></xsl:param> + <xsl:value-of select='stringutils:replace(string($word),"
",$br)'/> +</xsl:template> + +<xsl:template name="display-time"> + <xsl:param name="value"/> + <xsl:value-of select="format-number($value,'0.000')"/> +</xsl:template> + +<xsl:template name="display-percent"> + <xsl:param name="value"/> + <xsl:value-of select="format-number($value,'0.00%')"/> +</xsl:template> + +</xsl:stylesheet> + diff --git a/lib/ant/etc/log.xsl b/lib/ant/etc/log.xsl new file mode 100644 index 000000000..227279027 --- /dev/null +++ b/lib/ant/etc/log.xsl @@ -0,0 +1,210 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> +<xsl:output method="html" indent="yes" encoding="US-ASCII"/> +<!-- + Copyright 2000-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + +<!-- + + The purpose have this XSL is to provide a nice way to look at the output + from the Ant XmlLogger (ie: ant -listener org.apache.tools.ant.XmlLogger ) + + @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a> + +--> +<xsl:decimal-format decimal-separator="." grouping-separator="," /> + +<xsl:template match="/"> +<html> + <head> + <style type="text/css"> + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin: 0; + font:normal 100% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + table.status { + font:bold 80% arial,helvetica,sanserif; + background-color:#525D76; + color:#ffffff; + } + table.log tr td, tr th { + font-size: 80%; + } + .error { + color:red; + } + .warn { + color:brown; + } + .info { + color:gray; + } + .debug{ + color:gray; + } + .failed { + font-size:80%; + background-color: red; + color:#FFFFFF; + font-weight: bold + } + .complete { + font-size:80%; + background-color: #525D76; + color:#FFFFFF; + font-weight: bold + } + .a td { + background: #efefef; + } + .b td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + background: #ccc; + color: black; + } + table, th, td { + border: none + } + h3 { + font:bold 80% arial,helvetica,sanserif; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + </style> + </head> + <body> + <!-- jakarta logo --> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr> + <td valign="top" class="bannercell"> + <a href="http://jakarta.apache.org/"> + <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/> + </a> + </td> + <td style="text-align:right;vertical-align:bottom"> + <a href="http://jakarta.apache.org/ant">Apache Ant</a> + </td> + </tr> + </table> + + <table border="0" width="100%"> + <tr><td><hr noshade="yes" size="1"/></td></tr> + </table> + + <xsl:apply-templates select="build"/> + + <!-- FOOTER --> + <table width="100%"> + <tr><td><hr noshade="yes" size="1"/></td></tr> + <tr><td> + <div align="center"><font color="#525D76" size="-1"><em> + Copyright © 2000-2002, Apache Software Foundation + </em></font></div> + </td></tr> + </table> + </body> +</html> +</xsl:template> + +<xsl:template match="build"> + <!-- build status --> + <table width="100%"> + <xsl:attribute name="class"> + <xsl:if test="@error">failed</xsl:if> + <xsl:if test="not(@error)">complete</xsl:if> + </xsl:attribute> + <tr> + <xsl:if test="@error"> + <td nowrap="yes">Build Failed</td> + </xsl:if> + <xsl:if test="not(@error)"> + <td nowrap="yes">Build Complete</td> + </xsl:if> + <td style="text-align:right" nowrap="yes">Total Time: <xsl:value-of select="@time"/></td> + </tr> + <tr> + <td colspan="2"> + <xsl:if test="@error"> + <tt><xsl:value-of select="@error"/></tt><br/> + <i style="font-size:80%">See the <a href="#stacktrace" alt="Click for details">stacktrace</a>.</i> + </xsl:if> + </td> + </tr> + </table> + <table border="1" cellspacing="2" cellpadding="3" width="100%" style="font-size:80%"> + <tr class="a"><td width="1">ant.file</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.file')], '->')"/></td></tr> + <tr class="b"><td width="1">ant.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.version')], '->')"/></td></tr> + <tr class="a"><td width="1">java.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'java.vm.version')], '->')"/></td></tr> + <tr class="b"><td width="1">os.name</td><td><xsl:value-of select="substring-after(//message[contains(text(),'os.name')], '->')"/></td></tr> + </table> + <!-- build information --> + <h3>Build events</h3> + <table class="log" border="1" cellspacing="2" cellpadding="3" width="100%"> + <tr> + <th nowrap="yes" align="left" width="1%">target</th> + <th nowrap="yes" align="left" width="1%">task</th> + <th nowrap="yes" align="left">message</th> + </tr> + <xsl:apply-templates select=".//message[@priority != 'debug']"/> + </table> + <p> + <!-- stacktrace --> + <xsl:if test="stacktrace"> + <a name="stacktrace"/> + <h3>Error details</h3> + <table width="100%"> + <tr><td> + <pre><xsl:value-of select="stacktrace"/></pre> + </td></tr> + </table> + </xsl:if> + </p> +</xsl:template> + +<!-- report every message but those with debug priority --> +<xsl:template match="message[@priority!='debug']"> + <tr valign="top"> + <!-- alternated row style --> + <xsl:attribute name="class"> + <xsl:if test="position() mod 2 = 1">a</xsl:if> + <xsl:if test="position() mod 2 = 0">b</xsl:if> + </xsl:attribute> + <td nowrap="yes" width="1%"><xsl:value-of select="../../@name"/></td> + <td nowrap="yes" style="text-align:right" width="1%">[ <xsl:value-of select="../@name"/> ]</td> + <td class="{@priority}" nowrap="yes"> + <xsl:value-of select="text()"/> + </td> + </tr> +</xsl:template> + +</xsl:stylesheet> diff --git a/lib/ant/etc/maudit-frames.xsl b/lib/ant/etc/maudit-frames.xsl new file mode 100644 index 000000000..eaaf18081 --- /dev/null +++ b/lib/ant/etc/maudit-frames.xsl @@ -0,0 +1,510 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:lxslt="http://xml.apache.org/xslt" + xmlns:redirect="org.apache.xalan.lib.Redirect" + extension-element-prefixes="redirect"> +<xsl:output method="html" indent="yes" encoding="US-ASCII"/> +<xsl:decimal-format decimal-separator="." grouping-separator="," /> +<!-- + Copyright 2001-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> +<!-- + + Stylesheet to transform an XML file generated by the Ant MAudit task into + a set of JavaDoc-like HTML page to make pages more convenient to be browsed. + + It use the Xalan redirect extension to write to multiple output files. + + @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/> +--> + +<xsl:param name="output.dir" select="'.'"/> + + +<xsl:template match="classes"> + <!-- create the index.html --> + <redirect:write file="{$output.dir}/index.html"> + <xsl:call-template name="index.html"/> + </redirect:write> + + <!-- create the stylesheet.css --> + <redirect:write file="{$output.dir}/stylesheet.css"> + <xsl:call-template name="stylesheet.css"/> + </redirect:write> + + <!-- create the overview-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-summary.html"> + <xsl:apply-templates select="." mode="overview.packages"/> + </redirect:write> + + <!-- create the all-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-frame.html"> + <xsl:apply-templates select="." mode="all.packages"/> + </redirect:write> + + <!-- create the all-classes.html at the root --> + <redirect:write file="{$output.dir}/allclasses-frame.html"> + <xsl:apply-templates select="." mode="all.classes"/> + </redirect:write> + + <!-- process all packages --> + <xsl:for-each select="./class[not(./@package = preceding-sibling::class/@package)]"> + <xsl:call-template name="package"> + <xsl:with-param name="name" select="@package"/> + </xsl:call-template> + </xsl:for-each> +</xsl:template> + + +<xsl:template name="package"> + <xsl:param name="name"/> + <xsl:variable name="package.dir"> + <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if> + <xsl:if test="$name = ''">.</xsl:if> + </xsl:variable> + <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> --> + <!-- create a classes-list.html in the package directory --> + <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html"> + <xsl:call-template name="classes.list"> + <xsl:with-param name="name" select="$name"/> + </xsl:call-template> + </redirect:write> + + <!-- create a package-summary.html in the package directory --> + <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html"> + <xsl:call-template name="package.summary"> + <xsl:with-param name="name" select="$name"/> + </xsl:call-template> + </redirect:write> + + <!-- for each class, creates a @name.html --> + <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten --> + <xsl:for-each select="/classes/class[@package = $name]"> + <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html"> + <xsl:apply-templates select="." mode="class.details"/> + </redirect:write> + </xsl:for-each> +</xsl:template> + +<xsl:template name="index.html"> +<HTML> + <HEAD><TITLE>Audit Results.</TITLE></HEAD> + <FRAMESET cols="20%,80%"> + <FRAMESET rows="30%,70%"> + <FRAME src="overview-frame.html" name="packageListFrame"/> + <FRAME src="allclasses-frame.html" name="classListFrame"/> + </FRAMESET> + <FRAME src="overview-summary.html" name="classFrame"/> + </FRAMESET> + <noframes> + <H2>Frame Alert</H2> + <P> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </P> + </noframes> +</HTML> +</xsl:template> + + +<!-- this is the stylesheet css to use for nearly everything --> +<xsl:template name="stylesheet.css"> + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .a td { + background: #efefef; + } + .b td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } +</xsl:template> + + +<!-- print the violations of the class --> +<xsl:template match="class" mode="class.details"> + <xsl:variable name="package.name" select="@package"/> + <HTML> + <HEAD> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="$package.name"/> + </xsl:call-template> + </HEAD> + <BODY> + <xsl:call-template name="pageHeader"/> + <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3> + + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <xsl:call-template name="class.audit.header"/> + <xsl:apply-templates select="." mode="print.audit"/> + </table> + + <H3>Violations</H3> + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <xsl:call-template name="violation.audit.header"/> + <xsl:apply-templates select="./violation" mode="print.audit"> + <xsl:sort data-type="number" select="@line"/> + </xsl:apply-templates> + </table> + <xsl:call-template name="pageFooter"/> + </BODY> + </HTML> +</xsl:template> + + +<!-- list of classes in a package --> +<xsl:template name="classes.list"> + <xsl:param name="name"/> + <HTML> + <HEAD> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="$name"/> + </xsl:call-template> + </HEAD> + <BODY> + <table width="100%"> + <tr> + <td nowrap="nowrap"> + <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="$name"/></a></H2> + </td> + </tr> + </table> + + <h2>Classes</h2> + <TABLE WIDTH="100%"> + <xsl:apply-templates select="/classes/class[./@package = $name]" mode="classes.list"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + </TABLE> + </BODY> + </HTML> +</xsl:template> +<!-- the class to list --> +<xsl:template match="class" mode="classes.list"> + <tr> + <td nowrap="nowrap"> + <!-- @bug naming to fix for inner classes --> + <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a> + </td> + </tr> +</xsl:template> + + +<!-- + Creates an all-classes.html file that contains a link to all package-summary.html + on each class. +--> +<xsl:template match="classes" mode="all.classes"> + <html> + <head> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name"/> + </xsl:call-template> + </head> + <body> + <h2>Classes</h2> + <table width="100%"> + <xsl:apply-templates select=".//class" mode="all.classes"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + </table> + </body> + </html> +</xsl:template> + +<xsl:template match="class" mode="all.classes"> + <!-- (ancestor::package)[last()] is buggy in MSXML3 ? --> + <xsl:variable name="package.name" select="@package"/> + <tr> + <td nowrap="nowrap"> + <a target="classFrame"> + <xsl:attribute name="href"> + <xsl:if test="not($package.name='')"> + <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text> + </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text> + </xsl:attribute> + <xsl:value-of select="@name"/> + </a> + </td> + </tr> +</xsl:template> + + +<!-- + Creates an html file that contains a link to all package-summary.html files on + each package existing on testsuites. + @bug there will be a problem here, I don't know yet how to handle unnamed package :( +--> +<xsl:template match="classes" mode="all.packages"> + <html> + <head> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name"/> + </xsl:call-template> + </head> + <body> + <h2><a href="overview-summary.html" target="classFrame">Home</a></h2> + <h2>Packages</h2> + <table width="100%"> + <xsl:apply-templates select="class[not(./@package = preceding-sibling::class/@package)]" mode="all.packages"> + <xsl:sort select="@package" order="ascending"/> + </xsl:apply-templates> + </table> + </body> + </html> +</xsl:template> + +<xsl:template match="class" mode="all.packages"> + <tr> + <td nowrap="nowrap"> + <a href="{translate(@package,'.','/')}/package-summary.html" target="classFrame"> + <xsl:value-of select="@package"/> + </a> + </td> + </tr> +</xsl:template> + + +<xsl:template match="classes" mode="overview.packages"> + <html> + <head> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name"/> + </xsl:call-template> + </head> + <body onload="open('allclasses-frame.html','classListFrame')"> + <xsl:call-template name="pageHeader"/> + <h3>Summary</h3> + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <tr> + <th>Audited classes</th> + <th>Reported classes</th> + <th>Violations</th> + </tr> + <tr class="a"> + <td><xsl:value-of select="@audited"/></td> + <td><xsl:value-of select="@reported"/></td> + <td><xsl:value-of select="@violations"/></td> + </tr> + </table> + <table border="0" width="100%"> + <tr> + <td style="text-align: justify;"> + Note: Rules checked have originated from style guidelines suggested by the language designers, + experience from the Java development community and insite experience. Violations are generally + reported with a reference to the <a href="http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html">Java Language Specifications</a> (JLS x.x.x) + and Metamata Audit rules (x.x). + Please consult these documents for additional information about violations. + <p/> + Rules checked also enforce adherence to <a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html">Sun Java coding guidelines</a> in use at Jakarta. + <p/> + One should note that these violations do not necessary underline errors but should be used + as an indication for <i>possible</i> errors. As always, use your best judgment and review + them carefully, it might save you hours of debugging. + </td> + </tr> + </table> + + <h3>Packages</h3> + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <xsl:call-template name="class.audit.header"/> + <xsl:for-each select="class[not(./@package = preceding-sibling::class/@package)]"> + <xsl:sort select="@package" order="ascending"/> + <tr> + <xsl:call-template name="alternate-row"/> + <td><a href="{translate(@package,'.','/')}/package-summary.html"><xsl:value-of select="@package"/></a></td> + <td><xsl:value-of select="sum(/classes/class[./@package = current()/@package]/@violations)"/></td> + </tr> + </xsl:for-each> + </table> + <xsl:call-template name="pageFooter"/> + </body> + </html> +</xsl:template> + + +<xsl:template name="package.summary"> + <xsl:param name="name"/> + <HTML> + <HEAD> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="$name"/> + </xsl:call-template> + </HEAD> + <BODY> + <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute> + <xsl:call-template name="pageHeader"/> + <h3>Package <xsl:value-of select="$name"/></h3> + + <!--table border="0" cellpadding="5" cellspacing="2" width="100%"> + <xsl:call-template name="class.metrics.header"/> + <xsl:apply-templates select="." mode="print.metrics"/> + </table--> + + <xsl:if test="count(/classes/class[./@package = $name]) > 0"> + <H3>Classes</H3> + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <xsl:call-template name="class.audit.header"/> + <xsl:apply-templates select="/classes/class[./@package = $name]" mode="print.audit"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + </table> + </xsl:if> + <xsl:call-template name="pageFooter"/> + </BODY> + </HTML> +</xsl:template> + + +<!-- + transform string like a.b.c to ../../../ + @param path the path to transform into a descending directory path +--> +<xsl:template name="path"> + <xsl:param name="path"/> + <xsl:if test="contains($path,'.')"> + <xsl:text>../</xsl:text> + <xsl:call-template name="path"> + <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param> + </xsl:call-template> + </xsl:if> + <xsl:if test="not(contains($path,'.')) and not($path = '')"> + <xsl:text>../</xsl:text> + </xsl:if> +</xsl:template> + + +<!-- create the link to the stylesheet based on the package name --> +<xsl:template name="create.stylesheet.link"> + <xsl:param name="package.name"/> + <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK> +</xsl:template> + +<!-- Page HEADER --> +<xsl:template name="pageHeader"> + + <!-- jakarta logo --> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr> + <td class="bannercell" rowspan="2"> + <a href="http://jakarta.apache.org/"> + <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/> + </a> + </td> + <td style="text-align:right"><h2>Source Code Audit</h2></td> + </tr> + <tr> + <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Audit</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td> + </tr> + </table> + <hr size="1"/> +</xsl:template> + +<!-- Page HEADER --> +<xsl:template name="pageFooter"> + <table width="100%"> + <tr><td><hr noshade="yes" size="1"/></td></tr> + <tr><td> + <div align="center"><font color="#525D76" size="-1"><em> + Copyright © 1999-2001, Apache Software Foundation + </em></font></div> + </td></tr> + </table> +</xsl:template> + + +<!-- class header --> +<xsl:template name="class.audit.header"> + <tr> + <th width="80%">Name</th> + <th>Violations</th> + </tr> +</xsl:template> + +<!-- method header --> +<xsl:template name="violation.audit.header"> + <tr> + <th>Line</th> + <th>Message</th> + </tr> +</xsl:template> + + +<!-- class information --> +<xsl:template match="class" mode="print.audit"> + <tr> + <xsl:call-template name="alternate-row"/> + <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td> + <td><xsl:apply-templates select="@violations"/></td> + </tr> +</xsl:template> + +<xsl:template match="violation" mode="print.audit"> + <tr> + <xsl:call-template name="alternate-row"/> + <td><xsl:value-of select="@line"/></td> + <td><xsl:apply-templates select="@message"/></td> + </tr> +</xsl:template> + +<!-- alternated row style --> +<xsl:template name="alternate-row"> +<xsl:attribute name="class"> + <xsl:if test="position() mod 2 = 1">a</xsl:if> + <xsl:if test="position() mod 2 = 0">b</xsl:if> +</xsl:attribute> +</xsl:template> + +</xsl:stylesheet> + diff --git a/lib/ant/etc/mmetrics-frames.xsl b/lib/ant/etc/mmetrics-frames.xsl new file mode 100644 index 000000000..f105ea846 --- /dev/null +++ b/lib/ant/etc/mmetrics-frames.xsl @@ -0,0 +1,1033 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:lxslt="http://xml.apache.org/xslt" + xmlns:xalan="http://xml.apache.org/xalan" + xmlns:redirect="org.apache.xalan.lib.Redirect" + exclude-result-prefixes="xalan" + extension-element-prefixes="redirect"> +<xsl:output method="html" indent="yes" encoding="US-ASCII"/> +<xsl:decimal-format decimal-separator="." grouping-separator="," /> +<!-- + Copyright 2001-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> +<!-- + @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/> + --> +<xsl:param name="output.dir" select="'.'"/> + +<!-- default max value for the metrics --> +<xsl:param name="vg.max" select="10"/> +<xsl:param name="loc.max" select="1000"/> +<xsl:param name="dit.max" select="10"/> +<xsl:param name="noa.max" select="250"/> +<xsl:param name="nrm.max" select="50"/> +<xsl:param name="nlm.max" select="250"/> +<xsl:param name="wmc.max" select="250"/> +<xsl:param name="rfc.max" select="50"/> +<xsl:param name="dac.max" select="10"/> +<xsl:param name="fanout.max" select="10"/> +<xsl:param name="cbo.max" select="15"/> +<xsl:param name="lcom.max" select="10"/> +<xsl:param name="nocl.max" select="10"/> + + +<!-- create a tree fragment to speed up processing --> +<xsl:variable name="doctree.var"> + <xsl:element name="classes"> + <xsl:for-each select=".//class"> + <xsl:element name="class"> + <xsl:attribute name="package"> + <xsl:value-of select="(ancestor::package)[last()]/@name"/> + </xsl:attribute> + <xsl:copy-of select="@*"/> + <xsl:attribute name="name"> + <xsl:apply-templates select="." mode="class.name"/> + </xsl:attribute> + <xsl:copy-of select="method"/> + </xsl:element> + </xsl:for-each> + </xsl:element> +</xsl:variable> + +<xsl:variable name="doctree" select="xalan:nodeset($doctree.var)"/> + +<xsl:template match="metrics"> + + <!-- create the index.html --> + <redirect:write file="{$output.dir}/index.html"> + <xsl:call-template name="index.html"/> + </redirect:write> + + <!-- create the stylesheet.css --> + <redirect:write file="{$output.dir}/stylesheet.css"> + <xsl:call-template name="stylesheet.css"/> + </redirect:write> + + <redirect:write file="{$output.dir}/metrics-reference.html"> + <xsl:call-template name="metrics-reference.html"/> + </redirect:write> + + <!-- create the overview-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-summary.html"> + <xsl:apply-templates select="." mode="overview.packages"/> + </redirect:write> + + <!-- create the all-packages.html at the root --> + <redirect:write file="{$output.dir}/overview-frame.html"> + <xsl:apply-templates select="." mode="all.packages"/> + </redirect:write> + + <!-- create the all-classes.html at the root --> + <redirect:write file="{$output.dir}/allclasses-frame.html"> + <xsl:apply-templates select="." mode="all.classes"/> + </redirect:write> + + <!-- process all packages --> + <xsl:apply-templates select=".//package"/> +</xsl:template> + + +<xsl:template match="package"> + <xsl:variable name="package.name" select="@name"/> + <xsl:variable name="package.dir"> + <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="translate($package.name,'.','/')"/></xsl:if> + <xsl:if test="$package.name = 'unnamed package'">.</xsl:if> + </xsl:variable> + <!-- create a classes-list.html in the package directory --> + <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html"> + <xsl:apply-templates select="." mode="classes.list"/> + </redirect:write> + + <!-- create a package-summary.html in the package directory --> + <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html"> + <xsl:apply-templates select="." mode="package.summary"/> + </redirect:write> + + <!-- for each class, creates a @name.html --> + <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten --> + <xsl:for-each select="$doctree/classes/class[@package = current()/@name]"> + <!--Processing <xsl:value-of select="$class.name"/><xsl:text> </xsl:text> --> + <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html"> + <xsl:apply-templates select="." mode="class.details"/> + </redirect:write> + </xsl:for-each> +</xsl:template> + +<!-- little trick to compute the classname for inner and non inner classes --> +<!-- this is all in one line to avoid CRLF in the name --> +<xsl:template match="class" mode="class.name"> + <xsl:if test="parent::class"><xsl:apply-templates select="parent::class" mode="class.name"/>.<xsl:value-of select="@name"/></xsl:if><xsl:if test="not(parent::class)"><xsl:value-of select="@name"/></xsl:if> +</xsl:template> + + +<xsl:template name="index.html"> +<HTML> + <HEAD><TITLE>Metrics Results.</TITLE></HEAD> + <FRAMESET cols="20%,80%"> + <FRAMESET rows="30%,70%"> + <FRAME src="overview-frame.html" name="packageListFrame"/> + <FRAME src="allclasses-frame.html" name="classListFrame"/> + </FRAMESET> + <FRAME src="overview-summary.html" name="classFrame"/> + </FRAMESET> + <noframes> + <H2>Frame Alert</H2> + <P> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </P> + </noframes> +</HTML> +</xsl:template> + +<!-- this is the stylesheet css to use for nearly everything --> +<xsl:template name="metrics-reference.html"> +<html> +<head> +<link title="Style" type="text/css" rel="stylesheet" href="stylesheet.css"/> +</head> +<body style="text-align:justify;"> +<h2>Metrics Reference</h2> +<a href="#V(G)">V(G)</a> | +<a href="#LOC">LOC</a> | +<a href="#DIT">DIT</a> | +<a href="#NOA">NOA</a> | +<a href="#NRM">NRM</a> | +<a href="#NLM">NLM</a> | +<a href="#WMC">WMC</a> | +<a href="#RFC">RFC</a> | +<a href="#DAC">DAC</a> | +<a href="#FANOUT">FANOUT</a> | +<a href="#CBO">CBO</a> | +<a href="#LCOM">LCOM</a> | +<a href="#NOC">NOC</a> + +<a name="V(G)"/> +<h3>Cyclomatic Complexity - V(G)</h3> +This metric was introduced in the 1970s to measure the amount of control +flow complexity or branching complexity in a module such as a +subroutine. It gives the number of paths that may be taken through the +code, and was initially developed to give some measure of the cost of +producing a test case for the module by executing each path. +<p/> +Methods with a high cyclomatic complexity tend to be more difficult to +understand and maintain. In general the more complex the methods of an +application, the more difficult it will be to test it, and this will adversely +affect its reliability. +<p/> +V(G) is a measure of the control flow complexity of a method or +constructor. It counts the number of branches in the body of the method, +defined as: +<ul> +<li>while statements;</li> +<li>if statements;</li> +<li>for statements.</li> +</ul> + +The metric can also be configured to count each case of a switch +statement as well. + +<a name="LOC"/> +<h3>Lines of Code - LOC</h3> + +This is perhaps the simplest of all the metrics to define and compute. +Counting lines has a long history as a software metric dating from before +the rise of structured programming, and it is still in widespread use today. +The size of a method affects the ease with which it can be understood, its +reusability and its maintainability. There are a variety of ways that the size +can be calculated. These include counting all the lines of code, the number +of statements, the blank lines of code, the lines of commentary, and the +lines consisting only of syntax such as block delimiters. +<p/> +This metric can also be used for sizing other constructs as well, for +example, the overall size of a Java class or package can be measured by +counting the number of source lines it consists of. +<p/> +LOC can be used to determine the size of a compilation unit (source file), +class or interface, method, constructor, or field. It can be configured to +ignore: +<ul> +<li>blank lines;</li> +<li>lines consisting only of comments;</li> +<li>lines consisting only of opening and closing braces.</li> +</ul> + +<a name="DIT"/> +<h3>Depth of Inheritance Hierarchy - DIT</h3> + +This metric calculates how far down the inheritance hierarchy a class is +declared. In Java all classes have java.lang.Object as their ultimate +superclass, which is defined to have a depth of 1. So a class that +immediately extends java.lang.Object has a metric value of 2; any of its +subclasses will have a value of 3, and so on. +<p/> +A class that is deep within the tree inherits more methods and state +variables, thereby increasing its complexity and making it difficult to +predict its behavior. It can be harder to understand a system with many +inheritance layers. +<p/> +DIT is defined for classes and interfaces: +<ul> +<li>all interface types have a depth of 1;</li> +<li>the class java.lang.Object has a depth of 1;</li> +<li>all other classes have a depth of 1 + the depth of their super class.</li> +</ul> + +<a name="NOA"/> +<h3>Number of Attributes - NOA</h3> + +The number of distinct state variables in a class serves as one measure of +its complexity. The more state a class represents the more difficult it is to +maintain invariants for it. It also hinders comprehensibility and reuse. +<p/> +In Java, state can be exposed to subclasses through protected fields, which +entails that the subclass also be aware of and maintain any invariants. This +interference with the class's data encapsulation can be a source of defects +and hidden dependencies between the state variables. +<p/> +NOA is defined for classes and interfaces. It counts the number of fields +declared in the class or interface. + +<a name="NRM"/> +<h3>Number of Remote Methods - NRM</h3> + +NRM is defined for classes. A remote method call is defined as an +invocation of a method that is not declared in any of: +<ul> +<li>the class itself;</li> +<li>a class or interface that the class extends or implements;</li> +<li>a class or method that extends the class.</li> +</ul> + +The value is the count of all the remote method calls in all of the methods +and constructors of the class. + +<a name="NLM"/> +<h3>Number of Local Methods - NLM</h3> + +NLM is defined for classes and interfaces. A local method is defined as a +method that is declared in the class or interface. NLM can be configured to +include the local methods of all of the class's superclasses. Methods with +public, protected, package and private visibility can be independently +counted by setting configuration parameters. + +<a name="WMC"/> +<h3>Weighted Methods per Class - WMC</h3> + +If the number of methods in a class can be determined during the design +and modeling phase of a project, it can be used as a predictor of how +much time and effort is needed to develop, debug and maintain it. This +metric can be further refined by incorporating a weighting for the +complexity of each method. The usual weighting is given by the cyclomatic +complexity of the method. +<p/> +The subclasses of a class inherit all of its public and protected methods, +and possibly its package methods as well, so the number of methods a +class has directly impacts the complexity of its subclasses. Classes with +large numbers of methods are often specific to a particular application, +reducing the ability to reuse them. +<p/> +The definition of WMC is based upon NLM, and it provides the same +configuration parameters for counting inherited methods and of varying +visibility. The main difference is that NLM always counts each method as 1, +whereas WMC will weight each method. There are two weighting schemes: +<ul> +<li>V(G) the cyclomatic complexity of the method is used as its weight. + Methods from class files are given a V(G) of 1.</li> +<li>the arity, or the number of parameters of the method are used to + determine the weight.</li> +</ul> + +<a name="RFC"/> +<h3>Response For Class - RFC</h3> + +The response set of a class is the set of all methods that can be invoked as +a result of a message sent to an object of the class. This includes methods +in the class's inheritance hierarchy and methods that can be invoked on +other objects. The Response For Class metric is defined to be size of the +response set for the class. A class which provides a larger response set is +considered to be more complex than one with a smaller response set. +<p/> +One reason for this is that if a method call on a class can result in a large +number of different method calls on the target and other classes, then it +can be harder to test the behavior of the class and debug problems. It will +typically require a deeper understanding of the potential interactions that +objects of the class can have with the rest of the system. +<p/> +RFC is defined as the sum of NLM and NRM for the class. The local methods +include all of the public, protected, package and private methods, but not +methods declared only in a superclass. + +<a name="DAC"/> +<h3>Data Abstraction Coupling - DAC</h3> + +DAC is defined for classes and interfaces. It counts the number of reference +types that are used in the field declarations of the class or interface. The +component types of arrays are also counted. Any field with a type that is +either a supertype or a subtype of the class is not counted. + +<a name="FANOUT"/> +<h3>Fan Out - FANOUT</h3> + +FANOUT is defined for classes and interfaces, constructors and methods. It +counts the number of reference types that are used in: +<ul> +<li>field declarations;</li> +<li>formal parameters and return types;</li> +<li>throws declarations;</li> +<li>local variables.</li> +</ul> + +The component types of arrays are also counted. Any type that is either a +supertype or a subtype of the class is not counted. + +<a name="CBO"/> +<h3>Coupling Between Objects - CBO</h3> + +When one object or class uses another object or class they are said to be +coupled. One major source of coupling is that between a superclass and a +subclass. A coupling is also introduced when a method or field in another +class is accessed, or when an object of another class is passed into or out +of a method invocation. Coupling Between Objects is a measure of the +non-inheritance coupling between two objects. +<p/> +A high value of coupling reduces the modularity of the class and makes +reuse more difficult. The more independent a class is the more likely it is +that it will be possible to reuse it in another part of the system. When a +class is coupled to another class it becomes sensitive to changes in that +class, thereby making maintenance for difficult. In addition, a class that is +overly dependent on other classes can be difficult to understand and test in +isolation. +<p/> +CBO is defined for classes and interfaces, constructors and methods. It +counts the number of reference types that are used in: +<ul> +<li>field declarations</li> +<li>formal parameters and return types</li> +<li>throws declarations</li> +<li>local variables</li> +</ul> + +It also counts: +<ul> +<li>types from which field and method selections are made</li> +</ul> + +The component types of arrays are also counted. Any type that is either a +supertype or a subtype of the class is not counted. + +<a name="LCOM"/> +<h3>Lack of Cohesion Of Methods - LCOM</h3> + +The cohesion of a class is the degree to which its methods are related to +each other. It is determined by examining the pattern of state variable +accesses within the set of methods. If all the methods access the same state +variables then they have high cohesion; if they access disjoint sets of +variables then the cohesion is low. An extreme example of low cohesion +would be if none of the methods accessed any of the state variables. + +If a class exhibits low method cohesion it indicates that the design of the +class has probably been partitioned incorrectly, and could benefit by being +split into more classes with individually higher cohesion. On the other +hand, a high value of cohesion (a low lack of cohesion) implies that the +class is well designed. A cohesive class will tend to provide a high degree +of encapsulation, whereas a lack of cohesion decreases encapsulation and +increases complexity. +<p/> +Another form of cohesion that is useful for Java programs is cohesion +between nested and enclosing classes. A nested class that has very low +cohesion with its enclosing class would probably better designed as a peer +class rather than a nested class. +<p/> +LCOM is defined for classes. Operationally, LCOM takes each pair of +methods in the class and determines the set of fields they each access. If +they have disjoint sets of field accesses increase the count P by one. If they +share at least one field access then increase Q by one. After considering +each pair of methods, +LCOM = (P > Q) ? (P - Q) : 0 +<p/> +Indirect access to fields via local methods can be considered by setting a +metric configuration parameter. + +<a name="NOC"/> +<h3>Number Of Classes - NOC</h3> + +The overall size of the system can be estimated by calculating the number +of classes it contains. A large system with more classes is more complex +than a smaller one because the number of potential interactions between +objects is higher. This reduces the comprehensibility of the system which +in turn makes it harder to test, debug and maintain. +<p/> +If the number of classes in the system can be projected during the initial +design phase of the project it can serve as a base for estimating the total +effort and cost of developing, debugging and maintaining the system. +<p/> +The NOC metric can also usefully be applied at the package and class level +as well as the total system. +<p/> +NOCL is defined for class and interfaces. It counts the number of classes or +interfaces that are declared. This is usually 1, but nested class declarations +will increase this number. +</body> +</html> +</xsl:template> + +<!-- this is the stylesheet css to use for nearly everything --> +<xsl:template name="stylesheet.css"> + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .a td { + background: #efefef; + } + .b td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + .Error { + font-weight:bold; color:red; + } + +</xsl:template> + +<!-- print the metrics of the class --> +<xsl:template match="class" mode="class.details"> + <!--xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/--> + <xsl:variable name="package.name" select="@package"/> + <HTML> + <HEAD> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="$package.name"/> + </xsl:call-template> + </HEAD> + <BODY> + <xsl:call-template name="pageHeader"/> + + <H3>Class <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3> + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <xsl:call-template name="all.metrics.header"/> + <xsl:apply-templates select="." mode="print.metrics"/> + </table> + + <H3>Methods</H3> + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <xsl:call-template name="method.metrics.header"/> + <xsl:apply-templates select="method" mode="print.metrics"/> + </table> + + <xsl:call-template name="pageFooter"/> + </BODY> + </HTML> +</xsl:template> + + +<!-- list of classes in a package --> +<xsl:template match="package" mode="classes.list"> + <HTML> + <HEAD> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="@name"/> + </xsl:call-template> + </HEAD> + <BODY> + <table width="100%"> + <tr> + <td nowrap="nowrap"> + <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2> + </td> + </tr> + </table> + + <H2>Classes</H2> + <TABLE WIDTH="100%"> + <!-- xalan-nodeset:nodeset for Xalan 1.2.2 --> + <xsl:for-each select="$doctree/classes/class[@package = current()/@name]"> + <xsl:sort select="@name"/> + <tr> + <td nowrap="nowrap"> + <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a> + </td> + </tr> + </xsl:for-each> + </TABLE> + </BODY> + </HTML> +</xsl:template> + + +<!-- + Creates an all-classes.html file that contains a link to all package-summary.html + on each class. +--> +<xsl:template match="metrics" mode="all.classes"> + <html> + <head> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="''"/> + </xsl:call-template> + </head> + <body> + <h2>Classes</h2> + <table width="100%"> + <xsl:for-each select="$doctree/classes/class"> + <xsl:sort select="@name"/> + <xsl:apply-templates select="." mode="all.classes"/> + </xsl:for-each> + </table> + </body> + </html> +</xsl:template> + +<xsl:template match="class" mode="all.classes"> + <xsl:variable name="package.name" select="@package"/> + <xsl:variable name="class.name" select="@name"/> + <tr> + <td nowrap="nowrap"> + <a target="classFrame"> + <xsl:attribute name="href"> + <xsl:if test="not($package.name='unnamed package')"> + <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text> + </xsl:if> + <xsl:value-of select="$class.name"/><xsl:text>.html</xsl:text> + </xsl:attribute> + <xsl:value-of select="$class.name"/> + </a> + </td> + </tr> +</xsl:template> + +<!-- + Creates an html file that contains a link to all package-summary.html files on + each package existing on testsuites. + @bug there will be a problem here, I don't know yet how to handle unnamed package :( +--> +<xsl:template match="metrics" mode="all.packages"> + <html> + <head> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="./package/@name"/> + </xsl:call-template> + </head> + <body> + <h2><a href="overview-summary.html" target="classFrame">Home</a></h2> + <h2>Packages</h2> + <table width="100%"> + <xsl:apply-templates select=".//package[not(./@name = 'unnamed package')]" mode="all.packages"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + </table> + </body> + </html> +</xsl:template> + +<xsl:template match="package" mode="all.packages"> + <tr> + <td nowrap="nowrap"> + <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame"> + <xsl:value-of select="@name"/> + </a> + </td> + </tr> +</xsl:template> + + +<xsl:template match="metrics" mode="overview.packages"> + <html> + <head> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="''"/> + </xsl:call-template> + </head> + <body onload="open('allclasses-frame.html','classListFrame')"> + <xsl:call-template name="pageHeader"/> + <h3>Summary</h3> + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <tr> + <th><a href="metrics-reference.html#V(G)">V(G)</a></th> + <th><a href="metrics-reference.html#LOC">LOC</a></th> + <th><a href="metrics-reference.html#DIT">DIT</a></th> + <th><a href="metrics-reference.html#NOA">NOA</a></th> + <th><a href="metrics-reference.html#NRM">NRM</a></th> + <th><a href="metrics-reference.html#NLM">NLM</a></th> + <th><a href="metrics-reference.html#WMC">WMC</a></th> + <th><a href="metrics-reference.html#RFC">RFC</a></th> + <th><a href="metrics-reference.html#DAC">DAC</a></th> + <th><a href="metrics-reference.html#FANOUT">FANOUT</a></th> + <th><a href="metrics-reference.html#CBO">CBO</a></th> + <th><a href="metrics-reference.html#LCOM">LCOM</a></th> + <th><a href="metrics-reference.html#NOCL">NOCL</a></th> + </tr> + <xsl:apply-templates select="." mode="print.metrics"/> + </table> + <table border="0" width="100%"> + <tr> + <td style="text-align: justify;"> + Note: Metrics evaluate the quality of software by analyzing the program source and quantifying + various kind of complexity. Complexity is a common source of problems and defects in software. + High complexity makes it more difficult to develop, understand, maintain, extend, test and debug + a program. + <p/> + The primary use of metrics is to focus your attention on those parts of code that potentially are + complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial + actions. + For additional information about metrics and their meaning, please consult + Metamata Metrics manual. + </td> + </tr> + </table> + + <h3>Packages</h3> + <table border="0" cellpadding="5" cellspacing="2" width="100%"> + <xsl:call-template name="all.metrics.header"/> + <xsl:for-each select=".//package[not(@name = 'unnamed package')]"> + <xsl:sort select="@name" order="ascending"/> + <xsl:apply-templates select="." mode="print.metrics"/> + </xsl:for-each> + </table> + <!-- @bug there could some classes at this level (classes in unnamed package) --> + <xsl:call-template name="pageFooter"/> + </body> + </html> +</xsl:template> + +<xsl:template match="package" mode="package.summary"> + <HTML> + <HEAD> + <xsl:call-template name="create.stylesheet.link"> + <xsl:with-param name="package.name" select="@name"/> + </xsl:call-template> + </HEAD> + <body onload="open('package-frame.html','classListFrame')"> + <xsl:call-template name="pageHeader"/> + <!-- create an anchor to this package name --> + <h3>Package <xsl:value-of select="@name"/></h3> + + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <xsl:call-template name="all.metrics.header"/> + <xsl:apply-templates select="." mode="print.metrics"/> + </table> + + <table border="0" width="100%"> + <tr> + <td style="text-align: justify;"> + Note: Metrics evaluate the quality of software by analyzing the program source and quantifying + various kind of complexity. Complexity is a common source of problems and defects in software. + High complexity makes it more difficult to develop, understand, maintain, extend, test and debug + a program. + <p/> + The primary use of metrics is to focus your attention on those parts of code that potentially are + complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial + actions. + For additional information about metrics and their meaning, please consult + Metamata Metrics manual. + </td> + </tr> + </table> + + <xsl:variable name="classes-in-package" select="$doctree/classes/class[@package = current()/@name]"/> + <xsl:if test="count($classes-in-package) > 0"> + <H3>Classes</H3> + <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> + <xsl:call-template name="all.metrics.header"/> + <xsl:for-each select="$classes-in-package"> + <xsl:sort select="@name"/> + <xsl:apply-templates select="." mode="print.metrics"/> + </xsl:for-each> + </table> + </xsl:if> + + <xsl:call-template name="pageFooter"/> + </body> + </HTML> +</xsl:template> + + +<!-- + transform string like a.b.c to ../../../ + @param path the path to transform into a descending directory path +--> +<xsl:template name="path"> + <xsl:param name="path"/> + <xsl:if test="contains($path,'.')"> + <xsl:text>../</xsl:text> + <xsl:call-template name="path"> + <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param> + </xsl:call-template> + </xsl:if> + <xsl:if test="not(contains($path,'.')) and not($path = '')"> + <xsl:text>../</xsl:text> + </xsl:if> +</xsl:template> + + +<!-- create the link to the stylesheet based on the package name --> +<xsl:template name="create.stylesheet.link"> + <xsl:param name="package.name"/> + <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK> +</xsl:template> + + +<!-- Page Header --> +<xsl:template name="pageHeader"> + + <!-- jakarta logo --> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr> + <td class="bannercell" rowspan="2"> + <a href="http://jakarta.apache.org/"> + <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/> + </a> + </td> + <td style="text-align:right"><h2>Source Code Metrics</h2></td> + </tr> + <tr> + <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Metrics</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td> + </tr> + </table> + <hr size="1"/> +</xsl:template> + +<!-- Page Footer --> +<xsl:template name="pageFooter"> + <table width="100%"> + <tr><td><hr noshade="yes" size="1"/></td></tr> + <tr><td> + <div align="center"><font color="#525D76" size="-1"><em> + Copyright © 1999-2001, Apache Software Foundation + </em></font></div> + </td></tr> + </table> +</xsl:template> + +<!-- class header --> +<xsl:template name="all.metrics.header"> + <tr> + <th width="80%">Name</th> + <th nowrap="nowrap">V(G)</th> + <th>LOC</th> + <th>DIT</th> + <th>NOA</th> + <th>NRM</th> + <th>NLM</th> + <th>WMC</th> + <th>RFC</th> + <th>DAC</th> + <th>FANOUT</th> + <th>CBO</th> + <th>LCOM</th> + <th>NOCL</th> + </tr> +</xsl:template> + +<!-- method header --> +<xsl:template name="method.metrics.header"> + <tr> + <th width="80%">Name</th> + <th nowrap="nowrap">V(G)</th> + <th>LOC</th> + <th>FANOUT</th> + <th>CBO</th> + </tr> +</xsl:template> + +<!-- method information --> +<xsl:template match="method" mode="print.metrics"> + <tr> + <xsl:call-template name="alternate-row"/> + <td><xsl:apply-templates select="@name"/></td> + <td><xsl:apply-templates select="@vg"/></td> + <td><xsl:apply-templates select="@loc"/></td> + <td><xsl:apply-templates select="@fanout"/></td> + <td><xsl:apply-templates select="@cbo"/></td> + </tr> +</xsl:template> + +<!-- class information --> +<xsl:template match="class" mode="print.metrics"> + <tr> + <xsl:call-template name="alternate-row"/> + <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td> + <td><xsl:apply-templates select="@vg"/></td> + <td><xsl:apply-templates select="@loc"/></td> + <td><xsl:apply-templates select="@dit"/></td> + <td><xsl:apply-templates select="@noa"/></td> + <td><xsl:apply-templates select="@nrm"/></td> + <td><xsl:apply-templates select="@nlm"/></td> + <td><xsl:apply-templates select="@wmc"/></td> + <td><xsl:apply-templates select="@rfc"/></td> + <td><xsl:apply-templates select="@dac"/></td> + <td><xsl:apply-templates select="@fanout"/></td> + <td><xsl:apply-templates select="@cbo"/></td> + <td><xsl:apply-templates select="@lcom"/></td> + <td><xsl:apply-templates select="@nocl"/></td> + </tr> +</xsl:template> + +<xsl:template match="file|package" mode="print.metrics"> + <tr> + <xsl:call-template name="alternate-row"/> + <td> + <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame"> + <xsl:value-of select="@name"/> + </a> + </td> + <td><xsl:apply-templates select="@vg"/></td> + <td><xsl:apply-templates select="@loc"/></td> + <td><xsl:apply-templates select="@dit"/></td> + <td><xsl:apply-templates select="@noa"/></td> + <td><xsl:apply-templates select="@nrm"/></td> + <td><xsl:apply-templates select="@nlm"/></td> + <td><xsl:apply-templates select="@wmc"/></td> + <td><xsl:apply-templates select="@rfc"/></td> + <td><xsl:apply-templates select="@dac"/></td> + <td><xsl:apply-templates select="@fanout"/></td> + <td><xsl:apply-templates select="@cbo"/></td> + <td><xsl:apply-templates select="@lcom"/></td> + <td><xsl:apply-templates select="@nocl"/></td> + </tr> +</xsl:template> + +<xsl:template match="metrics" mode="print.metrics"> + <tr> + <xsl:call-template name="alternate-row"/> + <!-- the global metrics is the top package metrics --> + <td><xsl:apply-templates select="./package/@vg"/></td> + <td><xsl:apply-templates select="./package/@loc"/></td> + <td><xsl:apply-templates select="./package/@dit"/></td> + <td><xsl:apply-templates select="./package/@noa"/></td> + <td><xsl:apply-templates select="./package/@nrm"/></td> + <td><xsl:apply-templates select="./package/@nlm"/></td> + <td><xsl:apply-templates select="./package/@wmc"/></td> + <td><xsl:apply-templates select="./package/@rfc"/></td> + <td><xsl:apply-templates select="./package/@dac"/></td> + <td><xsl:apply-templates select="./package/@fanout"/></td> + <td><xsl:apply-templates select="./package/@cbo"/></td> + <td><xsl:apply-templates select="./package/@lcom"/></td> + <td><xsl:apply-templates select="./package/@nocl"/></td> + </tr> +</xsl:template> + +<!-- alternated row style --> +<xsl:template name="alternate-row"> +<xsl:attribute name="class"> + <xsl:if test="position() mod 2 = 1">a</xsl:if> + <xsl:if test="position() mod 2 = 0">b</xsl:if> +</xsl:attribute> +</xsl:template> + + +<!-- how to display the metrics with their max value --> +<!-- @todo the max values must be external to the xsl --> + + <xsl:template match="@vg"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$vg.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@loc"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$loc.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@dit"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$dit.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@noa"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$noa.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@nrm"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$nrm.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@nlm"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$nlm.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@wmc"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$wmc.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@rfc"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$rfc.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@dac"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$dac.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@fanout"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$fanout.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@cbo"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$cbo.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@lcom"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$lcom.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="@nocl"> + <xsl:call-template name="display-value"> + <xsl:with-param name="value" select="current()"/> + <xsl:with-param name="max" select="$nocl.max"/> + </xsl:call-template> + </xsl:template> + + <xsl:template name="display-value"> + <xsl:param name="value"/> + <xsl:param name="max"/> + <xsl:if test="$value > $max"> + <xsl:attribute name="class">Error</xsl:attribute> + </xsl:if> + <xsl:value-of select="$value"/> + </xsl:template> + +</xsl:stylesheet> + diff --git a/lib/ant/etc/tagdiff.xsl b/lib/ant/etc/tagdiff.xsl new file mode 100644 index 000000000..12a1e6f75 --- /dev/null +++ b/lib/ant/etc/tagdiff.xsl @@ -0,0 +1,177 @@ +<!-- + Copyright 2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> +<!-- a stylesheet to display changelogs ala netbeans --> +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + version="1.0"> + <xsl:param name="title"/> + <xsl:param name="module"/> + <xsl:param name="cvsweb"/> + + <xsl:output method="html" indent="yes"/> + + <!-- Copy standard document elements. Elements that + should be ignored must be filtered by apply-templates + tags. --> + <xsl:template match="*"> + <xsl:copy> + <xsl:copy-of select="attribute::*[. != '']"/> + <xsl:apply-templates/> + </xsl:copy> + </xsl:template> + + <xsl:template match="tagdiff"> + <HTML> + <HEAD> + <TITLE><xsl:value-of select="$title"/></TITLE> + </HEAD> + <BODY link="#000000" alink="#000000" vlink="#000000" text="#000000"> + <style type="text/css"> + body, p { + font-family: verdana,arial,helvetica; + font-size: 80%; + color:#000000; + } + .dateAndAuthor { + font-family: verdana,arial,helvetica; + font-size: 80%; + font-weight: bold; + text-align:left; + background:#a6caf0; + } + tr, td{ + font-family: verdana,arial,helvetica; + font-size: 80%; + background:#eeeee0; + } + </style> + <h1> + <a name="top"><xsl:value-of select="$title"/></a> + </h1> + Tagdiff between <xsl:value-of select="@startTag"/> <xsl:value-of select="@startDate"/> and + <xsl:value-of select="@endTag"/> <xsl:value-of select="@endDate"/> + <p align="right">Designed for use with <a href="http://ant.apache.org/">Ant</a>.</p> + <hr size="2"/> + <a name="TOP"/> + <table width="100%"> + <tr> + <td align="right"> + <a href="#New">New Files</a> | + <a href="#Modified">Modified Files</a> | + <a href="#Removed">Removed Files</a> + </td> + </tr> + </table> + <TABLE BORDER="0" WIDTH="100%" CELLPADDING="3" CELLSPACING="1"> + <xsl:call-template name="show-entries"> + <xsl:with-param name="title">New Files</xsl:with-param> + <xsl:with-param name="anchor">New</xsl:with-param> + <xsl:with-param name="entries" select=".//entry[file/revision][not(file/prevrevision)]"/> + </xsl:call-template> + + <xsl:call-template name="show-entries"> + <xsl:with-param name="title">Modified Files</xsl:with-param> + <xsl:with-param name="anchor">Modified</xsl:with-param> + <xsl:with-param name="entries" select=".//entry[file/revision][file/prevrevision]"/> + </xsl:call-template> + + <xsl:call-template name="show-entries"> + <xsl:with-param name="title">Removed Files</xsl:with-param> + <xsl:with-param name="anchor">Removed</xsl:with-param> + <xsl:with-param name="entries" select=".//entry[not(file/revision)][not(file/prevrevision)]"/> + </xsl:call-template> + </TABLE> + + </BODY> + </HTML> + </xsl:template> + + <xsl:template name="show-entries"> + <xsl:param name="title"/> + <xsl:param name="anchor"/> + <xsl:param name="entries"/> + <TR> + <TD colspan="2" class="dateAndAuthor"> + <a> + <xsl:attribute name="name"><xsl:value-of select="$anchor"/></xsl:attribute> + <xsl:value-of select="$title"/> - <xsl:value-of select="count($entries)"/> entries + </a> + <a href="#TOP">(back to top)</a> + </TD> + </TR> + <TR> + <TD width="20"> + <xsl:text> </xsl:text> + </TD> + <TD> + <ul> + <xsl:apply-templates select="$entries"/> + </ul> + </TD> + </TR> + </xsl:template> + + <xsl:template match="entry"> + <xsl:apply-templates select="file"/> + </xsl:template> + + <xsl:template match="date"> + <i><xsl:value-of select="."/></i> + </xsl:template> + + <xsl:template match="time"> + <i><xsl:value-of select="."/></i> + </xsl:template> + + <xsl:template match="author"> + <i> + <a> + <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute> + <xsl:value-of select="."/> + </a> + </i> + </xsl:template> + + <xsl:template match="file"> + <li> + <a target="_new"> + <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" /></xsl:attribute> + <xsl:value-of select="name" /> + </a> + <xsl:if test="string-length(prevrevision) > 0 or string-length(revision) > 0"> + <xsl:text> </xsl:text> + <a target="_new"> + <xsl:choose> + <xsl:when test="string-length(prevrevision) = 0 "> + <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&content-type=text/x-cvsweb-markup</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&r2=<xsl:value-of select="prevrevision"/>&diff_format=h</xsl:attribute> + </xsl:otherwise> + </xsl:choose> (<xsl:value-of select="revision"/>) + </a> + </xsl:if> + </li> + </xsl:template> + + <!-- Any elements within a msg are processed, + so that we can preserve HTML tags. --> + <xsl:template match="msg"> + <b><xsl:apply-templates/></b> + </xsl:template> + +</xsl:stylesheet> diff --git a/lib/ant/lib/README b/lib/ant/lib/README new file mode 100644 index 000000000..38fa1fa90 --- /dev/null +++ b/lib/ant/lib/README @@ -0,0 +1,14 @@ +Please refer to the Ant manual under Installing Ant / Library +Dependencies for a list of the jar requirements for various optional +tasks and features. + +This directory contains xercesImpl.jar from the 2.6.2 release of +Apache Xerces. For more information or newer releases see +<http://xml.apache.org/xerces2-j/>. See the file LICENSE.xerces for +the terms of distribution. + +It also contains xml-apis.jar from the 2.6.2 release of Apache Xerces. +For more information or newer releases see +<http://xml.apache.org/commons/>. See the files LICENSE.dom and +LICENSE.sax for the terms of distribution. + diff --git a/lib/ant/lib/ant-antlr.jar b/lib/ant/lib/ant-antlr.jar Binary files differnew file mode 100644 index 000000000..eb7b13fca --- /dev/null +++ b/lib/ant/lib/ant-antlr.jar diff --git a/lib/ant/lib/ant-apache-bcel.jar b/lib/ant/lib/ant-apache-bcel.jar Binary files differnew file mode 100644 index 000000000..f30afa60a --- /dev/null +++ b/lib/ant/lib/ant-apache-bcel.jar diff --git a/lib/ant/lib/ant-apache-bsf.jar b/lib/ant/lib/ant-apache-bsf.jar Binary files differnew file mode 100644 index 000000000..3e6f9de0e --- /dev/null +++ b/lib/ant/lib/ant-apache-bsf.jar diff --git a/lib/ant/lib/ant-apache-log4j.jar b/lib/ant/lib/ant-apache-log4j.jar Binary files differnew file mode 100644 index 000000000..967585690 --- /dev/null +++ b/lib/ant/lib/ant-apache-log4j.jar diff --git a/lib/ant/lib/ant-apache-oro.jar b/lib/ant/lib/ant-apache-oro.jar Binary files differnew file mode 100644 index 000000000..3feec40c0 --- /dev/null +++ b/lib/ant/lib/ant-apache-oro.jar diff --git a/lib/ant/lib/ant-apache-regexp.jar b/lib/ant/lib/ant-apache-regexp.jar Binary files differnew file mode 100644 index 000000000..9de8413dd --- /dev/null +++ b/lib/ant/lib/ant-apache-regexp.jar diff --git a/lib/ant/lib/ant-apache-resolver.jar b/lib/ant/lib/ant-apache-resolver.jar Binary files differnew file mode 100644 index 000000000..0cca33a5f --- /dev/null +++ b/lib/ant/lib/ant-apache-resolver.jar diff --git a/lib/ant/lib/ant-commons-logging.jar b/lib/ant/lib/ant-commons-logging.jar Binary files differnew file mode 100644 index 000000000..feccf3ecb --- /dev/null +++ b/lib/ant/lib/ant-commons-logging.jar diff --git a/lib/ant/lib/ant-commons-net.jar b/lib/ant/lib/ant-commons-net.jar Binary files differnew file mode 100644 index 000000000..c43696a91 --- /dev/null +++ b/lib/ant/lib/ant-commons-net.jar diff --git a/lib/ant/lib/ant-icontract.jar b/lib/ant/lib/ant-icontract.jar Binary files differnew file mode 100644 index 000000000..218023dd8 --- /dev/null +++ b/lib/ant/lib/ant-icontract.jar diff --git a/lib/ant/lib/ant-jai.jar b/lib/ant/lib/ant-jai.jar Binary files differnew file mode 100644 index 000000000..d52167471 --- /dev/null +++ b/lib/ant/lib/ant-jai.jar diff --git a/lib/ant/lib/ant-javamail.jar b/lib/ant/lib/ant-javamail.jar Binary files differnew file mode 100644 index 000000000..3aa28d88e --- /dev/null +++ b/lib/ant/lib/ant-javamail.jar diff --git a/lib/ant/lib/ant-jdepend.jar b/lib/ant/lib/ant-jdepend.jar Binary files differnew file mode 100644 index 000000000..532c817d3 --- /dev/null +++ b/lib/ant/lib/ant-jdepend.jar diff --git a/lib/ant/lib/ant-jmf.jar b/lib/ant/lib/ant-jmf.jar Binary files differnew file mode 100644 index 000000000..43ea62165 --- /dev/null +++ b/lib/ant/lib/ant-jmf.jar diff --git a/lib/ant/lib/ant-jsch.jar b/lib/ant/lib/ant-jsch.jar Binary files differnew file mode 100644 index 000000000..059c81f36 --- /dev/null +++ b/lib/ant/lib/ant-jsch.jar diff --git a/lib/ant/lib/ant-junit.jar b/lib/ant/lib/ant-junit.jar Binary files differnew file mode 100644 index 000000000..7f508c33c --- /dev/null +++ b/lib/ant/lib/ant-junit.jar diff --git a/lib/ant/lib/ant-launcher.jar b/lib/ant/lib/ant-launcher.jar Binary files differnew file mode 100644 index 000000000..5355cccf4 --- /dev/null +++ b/lib/ant/lib/ant-launcher.jar diff --git a/lib/ant/lib/ant-netrexx.jar b/lib/ant/lib/ant-netrexx.jar Binary files differnew file mode 100644 index 000000000..392dc66f7 --- /dev/null +++ b/lib/ant/lib/ant-netrexx.jar diff --git a/lib/ant/lib/ant-nodeps.jar b/lib/ant/lib/ant-nodeps.jar Binary files differnew file mode 100644 index 000000000..5f0a54c7e --- /dev/null +++ b/lib/ant/lib/ant-nodeps.jar diff --git a/lib/ant/lib/ant-starteam.jar b/lib/ant/lib/ant-starteam.jar Binary files differnew file mode 100644 index 000000000..baefc8cba --- /dev/null +++ b/lib/ant/lib/ant-starteam.jar diff --git a/lib/ant/lib/ant-stylebook.jar b/lib/ant/lib/ant-stylebook.jar Binary files differnew file mode 100644 index 000000000..b797bcce2 --- /dev/null +++ b/lib/ant/lib/ant-stylebook.jar diff --git a/lib/ant/lib/ant-swing.jar b/lib/ant/lib/ant-swing.jar Binary files differnew file mode 100644 index 000000000..251c0c173 --- /dev/null +++ b/lib/ant/lib/ant-swing.jar diff --git a/lib/ant/lib/ant-trax.jar b/lib/ant/lib/ant-trax.jar Binary files differnew file mode 100644 index 000000000..e827e295a --- /dev/null +++ b/lib/ant/lib/ant-trax.jar diff --git a/lib/ant/lib/ant-vaj.jar b/lib/ant/lib/ant-vaj.jar Binary files differnew file mode 100644 index 000000000..1efcef5b1 --- /dev/null +++ b/lib/ant/lib/ant-vaj.jar diff --git a/lib/ant/lib/ant-weblogic.jar b/lib/ant/lib/ant-weblogic.jar Binary files differnew file mode 100644 index 000000000..bcd303ce3 --- /dev/null +++ b/lib/ant/lib/ant-weblogic.jar diff --git a/lib/ant/lib/ant-xalan1.jar b/lib/ant/lib/ant-xalan1.jar Binary files differnew file mode 100644 index 000000000..e21dbd196 --- /dev/null +++ b/lib/ant/lib/ant-xalan1.jar diff --git a/lib/ant/lib/ant-xslp.jar b/lib/ant/lib/ant-xslp.jar Binary files differnew file mode 100644 index 000000000..1eb6dd6ce --- /dev/null +++ b/lib/ant/lib/ant-xslp.jar diff --git a/lib/ant/lib/ant.jar b/lib/ant/lib/ant.jar Binary files differindex 7cf87e838..15aae908a 100644 --- a/lib/ant/lib/ant.jar +++ b/lib/ant/lib/ant.jar diff --git a/lib/ant/lib/junit.jar b/lib/ant/lib/junit.jar Binary files differnew file mode 100644 index 000000000..674d71e89 --- /dev/null +++ b/lib/ant/lib/junit.jar diff --git a/lib/ant/lib/xercesImpl.jar b/lib/ant/lib/xercesImpl.jar Binary files differindex d41cf97ed..f0fb0e89b 100644 --- a/lib/ant/lib/xercesImpl.jar +++ b/lib/ant/lib/xercesImpl.jar diff --git a/lib/ant/lib/xml-apis.jar b/lib/ant/lib/xml-apis.jar Binary files differindex 8331d27f1..2dd837714 100644 --- a/lib/ant/lib/xml-apis.jar +++ b/lib/ant/lib/xml-apis.jar diff --git a/lib/ant/welcome.html b/lib/ant/welcome.html new file mode 100644 index 000000000..1e2a27b94 --- /dev/null +++ b/lib/ant/welcome.html @@ -0,0 +1,352 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> + <TITLE>Welcome to Apache Ant 1.6</TITLE> +</HEAD> +<BODY LANG="en-US" BGCOLOR="#ffffff" DIR="LTR"> +<H1>Welcome to Apache Ant 1.6</H1> +<P><BR><BR> +</P> +<H2>Your life just got better. +</H2> +<P>Not in big ways. Your social life isn't going to be helped, though +with any luck you may now have more time for one. Nor is it going to +take less time to write your Java code -although we note that running +<A HREF="http://xdoclet.sf.net/" TARGET="other">XDoclet</A> under Ant +lets you avoid writing so much code. Nor is a new release of Ant +likely to provide a fundamental kick-start to the currently somewhat +subdued technology and software industries. +</P> +<P>No, Ant1.6 will not fundamentally change your life. But if you do +have to get software out on time -"roughly what you asked for, +roughly when you asked", then Ant1.6 provides lots of little +improvements over the existing version. +</P> +<P>Before we look at those details, lets look at the world of The +Automated Build.</P> +<P>Firstly, we'd like to thank everyone for all those awards that +have been flowing in. The JavaWorld Editors' Choice Award for "Most +Useful Java Community-Developed Technology", The Java +Developer's Journal "Editors Choice Award", and Java Pro +Reader's Choice award for "Most Valuable Java Deployment +Technology." Wow. That's a lot of awards. Aardman Animations +keep all their Wallace and Gromit -related oscars in a cabinet in +their tea room. If the Apache organization had a tea room, those Ant +awards would be forcing all the other (excellent) Apache products to +fight hard for their cabinet space. +</P> +<P>All those awards come for a reason: everyone, at least everyone +working on any project of moderate complexity, needs to control their +build process. Ant is one of the best ways to do it in Java, and, +over the past four years, it has moved from a tool used simply to +build Tomcat cross-platform, to a tool used across many open source +projects, and now to a tool used by almost all Java projects. Indeed, +pretty much the only competitor in the Java space is a sibling +project under the Apache banner, <A HREF="http://maven.apache.org/" TARGET="other">Maven</A>. +One of the obvious signs of Ant's success is that all the popular +IDEs, from the Open Source -Emacs JDE, Eclipse, NetBeans and jEdit - +to the commercial: IntelliJ IDEA, Borland JBuilder- all ship with +built in Ant support. This lets you use your favourite IDE for what +it is good at: editing text, creating Java source, refactoring +existing code, debugging and the like, and you can turn to Ant for +co-ordinating the build-test-deploy/deliver process. That Ant based +process can be triggered from keystrokes in the IDE, command line +invocations for those so inclined, and in automated scheduled builds +so the machines can keep an eye on the engineers. Another sign is how +Ant is helping the Java aisle of bookstores fight back against +attempts by books about Macromedia Flash to take over all the space +-there are now seven or eight books on the subject, with more on the +way. Germany and Korea have their own native language books too, +which shows how global the tool is -in use and in development terms. +</P> +<P>The other metric of success is the pre-announcement hints from our +distant software colleagues in Redmond, Microsoft, of a new build +tool, "MSBuild", which "might be the single most +important feature innovation in our pipeline", according to one +MS developer. That is surely the greatest metric of success: XML +based build tools are now viewed as so essential to the modern build +process, that Microsoft has to come up with a competitor to Ant to +win Java developers over to .NET. Let's hope they discover we like +ubiquitous JUnit testing too, and refactoring IDEs that create and +run the tests for us. +</P> +<P>Success comes at a price, of course. One price is all those +support calls. We try and stay on top of the bug reports, but one +thing we cannot do is fix inconsistencies or things that seem like +defects if they stand a significant chance of breaking existing +builds. Its sad, but there are lots of little minor faults with Ant +that we don't dare fix because, well, things might break. For +example, why don't if= and unless= clauses also support +<code>if="${property}"</code> clauses? Alternatively, why isn't it an +error to use a property that isn't defined. Everyone that has ever +seen directories called ${build.dir} popping up the source tree will +understand why that behaviour is not always what you want. Well, we +could fix these things, but we won't, because backwards compatibility +is sacred. +</P> +<P>That is the other price of success: all those users who have +existing build files they want to work. And all those IDEs that host +Ant, and who want an easy upgrade to a new version. This means we +have lost a lot of the flexibility we used to have in the early days +of the project, when different versions of Ant could have completely +different property evaluation algorithms and nobody would bat an +eyelid. Now, even the most obscure bug fix ends up generating 'you +broke my build complaints'. +</P> +<P>This explains why there will not be the 'incompatible upgrade' +version of Ant, Ant2.0, that has long been discussed on our web site. +</P> +<H2>Where is Ant2.0?</H2> +<P>For years we have been discussing Ant2.0, the complete rewrite +version that would be cleaner and faster, and slightly incompatible +with Ant1.x. It would be the opportunity to take the lessons from the +1.x line, and support them cleanly. We even got as far as having +multiple implementations of new Ant engines in the CVS repository, +especially Mutant and Myrmidion. But we always seemed to have a hard +time making progress -everyone was too busy using and firefighting +Ant1.x that nobody got time to work on the 2.x codebase. Which is a +shame, as all the proposals had interesting ideas.</P> +<P>After Ant1.5 shipped, the future of Ant effectively resolved into +one of evolution rather than revolution. There will be no Ant2.0 with +a complete new engine underneath. There will be no need to run XSL +transforms over existing build files to move them to the Ant2.0 +world. Instead Ant1.x is getting better underneath the build file +-improving its internal design while retaining five-nines backwards +compatibility with existing build files. +</P> +<P>And that is what we have been up to.</P> +<P>Under the hood, Ant1.6 contains some of the most major reworkings +of the core Ant system yet seen. We haven't finished yet, and are +holding back some of the more visible developments so we can see what +works before their release in a product forces us to maintain them. +But the underlying parts of Ant are now set up for the next stage in +development. +</P> +<P>Whether we call the next version of Ant 1.7 or 2.0 is something we +have yet to decide. Maybe we should call it 3.0 just to surprise +people.</P> +<H2>What has changed</H2> +<P>Look at the <A HREF="WHATSNEW" TARGET="other">WHATSNEW</A> +document to get a full list of changes. Here are some of the core +conceptual differences.</P> +<H3>No more Java1.1</H3> +<P>We got fed up of jumping through reflection hoops to do everything +from weak references to setting file timestamps. After consultation +with the Ant user mail list, Ant1.6 only runs on Java1.2 or later. It +can still cross compile to Java1.1 if that is what you have to do. We +haven't completely purged all 1.1 references in the docs, or 1.1 +support from the source, but that will come over time.</P> +<H3>New classloader use.</H3> +<P>This is going to make people nervous. If there is one thing Java +developers have learned over time, only the very naive, the very +brave, or the very competent do things with classloaders. We will let +the Ant users decide what category to put us in, but before everyone +panics, Costin, of Tomcat fame, did a lot of the work here. You don't +write application servers without understanding classloaders inside +and out. +</P> +<P>The impact of these changes will trickle out over Ant versions. In +1.6, the key features are +</P> +<OL> + <LI><P>We have got rid of the bit in the batch file/shell script + that built up a really big classpath environment variable from + everything in ANT_HOME/lib. Now that is done in a launcher class + that does the work then calls tools.ant.Main as before.</P> + <LI><P>You can add new library directories to that classloader with + the -lib option on the command line. This option is interpreted by + the launcher class, so will not work with IDEs and other apps that + use the inner entry point.</P> + <LI><P>We have broken up optional.jar into many-many jar files, such + as ant-commons-logging.jar, ant-xalan2.jar, etc etc, and a + nodeps.jar for optional stuff without any dependencies. This creates + a lot of jar files.</P> + <LI><P>You can now <taskdef> existing tasks -like <junit>- + by including the specific ant jar <I>and</I> the dependent libraries + (i.e. junit.jar) in the declaration. This solves the problem of + ANT_HOME/lib needing to contain every jar possibly needed by every + user/project. You still have to declare the tasks one by one, + something we will fix in Ant1.7</P> +</OL> +<H3>Adapters</H3> +<P>These are Java classes that <I>adapt</I>> arbitrary Java +classes into ant tasks or types. There has always been some of this +stuff inside Ant, but now you can <taskdef> a task by naming +not just the implementation class, but the adapter class. An adapter +is essentially a meta task implementation -something that can be used +to create new tasks dynamically. Which, when you consider that the +core of Ant is fundamentally an XML to java mapping system and a +simple workflow engine, may let you do very unusual things with Ant. +</P> +<H3>Antlib: Ant libraries</H3> +<P>This is something we will expand in future. Till now you could +declare tasks and types with <taskdef> and <typedef>. If +they were in a jar, you could write a properties file and name the +resource path of the file in the jar. If you wanted to have both +tasks and types, you had name a shared classloader. If you wanted to +add more things -such as conditions or mappers, you were out of luck.</P> +<P>Antlibs are Ant Libraries, JAR files containing the code to extend +Ant, and an XML description file to describe how Ant is extended. +Before anyone panics at 'yet another XML descriptor syntax' to learn: +you may already know the syntax. We call it "Ant build files". +Actually it is a subset: it can only contain those task declarations +that are derived from org.apache.tools.ant.taskdefs.AntlibDefinition. +That includes <taskdef> and <typedef>, and <I>any other +task you choose to derive. </I>We are experimenting with scripting +and some kind of task predefinition declarations in antlibs. With the +latter, you will be able to write a predefined task -such as a +<javac> derivative with the compiler options set, and then use +it any of your build files. This is all too experimental to get into +Ant1.6 -expect it in the successor. For now, start using antlibs and +use the <taskdef> task to load them into your projects.</P> +<H3>XML Namespace aware</H3> +<P>Ant finally adopts XML namespaces. This is to address build file +scalability; antlibs can be imported into their own namespaces, and +so you can avoid namespace clashes with other libraries. If you do +not know what namespaces are, do not worry -they are not compulsory.</P> + +<h3>All tasks can go in at the toplevel</h3> +<p> + +Prior to Ant1.6, only three tasks were allowed outside +targets : <taskdef>,<typedef> and <property>. +Ant 1.6 puts an end to this distinction; anything can go in at the top +level. This is partly because there were many more tasks that merited the +option based on the original rationale of "global initialization tasks": +<import> and <antlib> were the new additions, but existing +tasks like <condition>, <available>, <xmlproperties> +and <loadproperties> had equal rights. +</p> +<p> +Rather that expand the set slightly, now all tasks are allowed outside +targets. This gives external tasks the same rights as built in code, +eliminates sporadic bug reports, and annoying error messages. It gives +users the ability to write build files without any targets at all; the +top-level declarations are processed in sequence. +</p> + +On a style note, we strongly advocate using this feature carefully. It +is best if zero-side-effect, initialization-only tasks get put into the +top level. Remember also that all top level statements are processed in +order, before any targets are executed. Even tasks at the end of the +file will get executed before targets declared above them. + +<H2>New Tasks</H2> +<P>As usual, the task base is growing and expanding. These days the +ant core is resisting adopting many of the highly worthy donations of +tasks from people, because they make maintenance and firefighting +worse. Our current stance is that except in special circumstances, +Ant tasks to support third party open source projects, should live +with the projects themselves. This keeps them in sync with the +libraries they integrate with, avoids GPL/Apache licensing issues, +and reduces the Ant team's support workload, letting them focus on +the core. The antlib mechanism is intended to make it easier for +people to load tasks from libraries for this very reason.</P> +<P>That said, we are pleased to introduce many new tasks. Of +particular interest may be the SSH tasks, which let one deploy code +to remote servers securely. Now you really can do live updates with +Ant -if the operations team will let you. The other one that is quite +interesting is <subant>. This is an extension of the <ant> +task, to take an entire fileset of directories and run their build +files. This is incredibly useful in very large projects. This does +not mean that we are advocating the many-build-file development +pattern, but in a sufficiently complex project it happens anyway. +<subant> keeps things manageable.</P> +<H2>What else</H2> +<P>So, what is new in Ant1.6? Lots of stuff. You will have to look at +the <A HREF="WHATSNEW">whatsnew</A> file to see, but here are some +key points. +</P> +<OL> + <LI><P STYLE="margin-bottom: 0in">Bug fixes. We know, some things + were broken in 1.5. In ant1.6 we have moved the bugs, fixing the + ones we could, and no doubt adding different ones. Hopefully the + total bug count has decreased. + </P> + <LI><P STYLE="margin-bottom: 0in">New platforms: Open VMS and HP's + NonStop Kernel (Tandem) OS. OpenVMS is very different from the rest; + Read the <exec> task documentation carefully. + </P> + <LI><P STYLE="margin-bottom: 0in">Spawning. <java> and <exec> + started applications can outlive Ant if you set spawn=true. Note + that the moment you do so, Ant cannot bind to their input or output, + for obvious reasons. + </P> + <LI><P>Synchronisation with Java versions (heh, thought by moving + javah's entry point that you could hide from us? Think again).</P> + <LI><P>Synchronization with third party libraries. Of special note: + we have moved to the Apache commons-net.jar, the successor to + NetComponents for telnet and FTP as well as Apache BSF, the + successor to IBM BSF, for script.</P> +</OL> +<P>There are many more enhancements, so we hope you will find your +build projects easier. We have, as usual, jumped through hoops to +keep existing builds working. If your build file stops working, and +it isn't something listed on the 'changes that may break your build' +part of the WHATSNEW file, or something we know about on bugzilla, +please don't hesitate to file a new bug report, preferably one with a +replicable test and a patch to fix the problem. Please, please, +please, do a search on bugzilla first. You do not want to be the +seventy-third person to complain that Ant1.6 doesn't do something +that it should. +</P> +<P>Thanks, +</P> +<P>The Ant development team. +</P> +<H3>Acknowledgements</H3> +<UL> + <LI><P>Many thanks for Antoine to being the build manager for this + release! + </P> + <LI><P>Thank you to everyone who supplies the components we use in + Ant, particularly JUnit, commons-logging, log4J, bcel, ORO, Xerces, and Xalan. + </P> + <LI><P>Everyone who has supplied bug reports, especially those with + patches and tests.</P> + <LI><P>IDE projects who incorporate Ant into their products. Not + only does this help Ant's success, you find lots of interesting + integration defects. Special mention to the Eclipse team for fixing + our memory leaks :)</P> +</UL> +<H3>Call to Action</H3> + +<P> + +It is an interesting time for Java. .NET is a serious challenger, and +will get better. A core strength of Java over .NET is its community. It +is the community that gave the world leading edge development tools and +other core components: Ant, JUnit, XDoclet, hsqldb, Hibernate, Struts, +etc. These things weren't created by JCP committees, or built according +to the strategic vision of a Fortune 100 company. They were written by +Java developers, for Java developers, usually to meet their own tactical +goals. + +</P> + +<P>If Java is to survive -and we think it ought to- everyone who can +needs to become active members of that community. It could be helping +with Ant, but it could just as easily be helping with any other open +source Java project, be hosted by Apache, FSF, Sourceforge or someone +else, be it server-side, client-side or mobile-side. It could be an +existing project, or it could be your own idea as to how things could +be better. The key is: things will only be better if you put in the +time to make it so. +</P> +<H3>Call to Inaction</H3> +<P>A special message to whoever it is in charge of commands in +tools.jar: stop moving your entry points! In Ant1.5 we had to deal +with the 'classic' javac entry point going away in Java1.4.0, +seemingly coming back later. In Java 1.4.2, the javah entry point +moved. The traditional command line invocation mechanism has been +replaced by hosted invocation -Ant, Maven, IDEs, etc, and moving +entry points around breaks these host applications. Even if we get a +bug fix out in Ant a few weeks after the Java release, it takes +months for this to trickle down to end users, especially via IDEs and +other distributions. For example, Sun's own Java Web Services +Developer Pack ships with Ant1.5.1, and so cannot run <javah> +on a 1.4.2 installation. +</P> +</BODY> +</HTML>
\ No newline at end of file |