From ant-user-return-21130-qmlist-jakarta-archive-ant-user=jakarta.apache.org@jakarta.apache.org Tue May 28 23:26:19 2002 Return-Path: Delivered-To: apmail-jakarta-ant-user-archive@apache.org Received: (qmail 9739 invoked from network); 28 May 2002 23:26:19 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 28 May 2002 23:26:19 -0000 Received: (qmail 1669 invoked by uid 97); 28 May 2002 23:26:13 -0000 Delivered-To: qmlist-jakarta-archive-ant-user@jakarta.apache.org Received: (qmail 1651 invoked by uid 97); 28 May 2002 23:26:12 -0000 Mailing-List: contact ant-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Ant Users List" Reply-To: "Ant Users List" Delivered-To: mailing list ant-user@jakarta.apache.org Received: (qmail 15653 invoked by uid 98); 28 May 2002 17:23:56 -0000 X-Antivirus: nagoya (v4198 created Apr 24 2002) Message-ID: From: Alexey Solofnenko To: Ant Users List Subject: Problem: ANT and continuous developers build process Date: Tue, 28 May 2002 10:21:30 -0700 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N Hello, In my latest project we use both MAKE and ANT. We found that ANT can = more reliable compile java classes, create archives and even faster then OS delete files (especially if there is antivirus active and the files on = a dynamic ClearCase view). However there is one feature of MAKE that can = leave ANT only for small task execution =E2=80=93 it is very simple to make = MAKE work well with development build. Let me explain =E2=80=93 people, especially = during development, usually do not build their project from scratch =E2=80=93 = they change something, compile, then change something else, then compile again, = and, usually, to make the build system more reliable, the build makes more = than it is required. Lets look, for example, at =E2=80=9Cinstallation = image=E2=80=9D target. The target usually includes wiping the whole image directory (because we do = not want to install obsolete files) and then recreating it. But it should = be executed only if one of =E2=80=9Ccompile=E2=80=9D targets were executed = and something was actually =E2=80=9Ccompiled=E2=80=9D and not just in the current build, = but in any build made after the previous image was created! Unfortunately it is very = difficult to do it in ANT. In MAKE it can be done easily by converting all PHONY = targets into real ones, specifying their real dependencies (not just other = ex-PHONY targets) and adding =E2=80=9Ctouch=E2=80=9D at the end. No double = maintenance, no hassle. In ANT all targets are =E2=80=9CPHONY=E2=80=9D. Tasks deal with = dependencies themselves, but they do not report if anything was changed.=20 That means we have to use double target sets - recursive and non = recursive like: but this is a bad idea, because "theoretically" ANT does not guarantee = that classes target will be executed before install-image-only (and there = will be a problem in parallel ANT). The only way to fix it is to use or , but they do not check what targets were executed already. = Too much trouble... So, why not to create a set of special properties like ${build.timestamps.install-image} (to indicate when at least one file = was modified during the target execution), make them automatically = persistent and add special attributes to targets like: or Sincerely, Alexey Solofnenko. -- { http://trelony.cjb.net/ } Alexey N. Solofnenko { http://www.inventigo.com/ } Inventigo LLC Pleasant Hill, CA (GMT-8 usually) -- To unsubscribe, e-mail: For additional commands, e-mail: