Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Ok, that was a bad example. It was far too much a programmer point of view rather than a user's. Plus it lost formatting. Let me try again with a (hopefully) clearer example of what I think you are talking about. ... Based on the dependencies in the resources, Ant could run separate build threads (or on different machines) for each of the simple-lib resources following the artifact patterns. I changed mail-lib to a different artifact pattern (one that would presumably include checking out, compiling, and running unit tests and possibly generate a code coverage report) but I didn't bother showing it. Since the ant-build relies on the others, it couldn't be scheduled until the others had finished (or had generated all the artifacts needed for a particular stage of the ant build). Substitutions for properties in the targets would come from the tags and attributes from the artifacts and resources that were applied to the particular target, much like parameters in macros. Resources could override targets and other things in artifacts as needed, and be arbitrarily complex in terms of the resources they described which means targets that worked this way would need a way of combining artifact information with multiple paths. You could even imagine the command line supporting this style for calling build targets, like: ant zip-lib - build the zip-lib ant zip-lib:update-java-src - Do everything up to an update to the source code on the zip-lib ant zip-lib::update-java-src - Only do an update on the Java source assuming the previous steps have run or perhaps the syntax would be separate flags: ant -resource=zip-lib -up-to=update-java-src ant -resource=zip-lib -only=update-java-src Anyway, this is obviously sketchy but I put it up for discussion. Is this the kind of thing you guys have been talking about, or have I missed the mark? On 2/21/2012 12:22 PM, Bruce Atherton wrote: It sounds like you are both are on a similar wavelength. Let me see if I understand. A new style of build (while maintaining the old style, of course) would be to declare some combination of resources to have similar states and transitions between states. So something like this (just as an example of a made-up syntax): detect="${no-java-src-present}"> detect="${java-src-present}"> and so on. The statechanges here are single steps from state to state, but presumably the from and to statechanges could be many steps away and Ant would find the best (for some value of best - fewest nodes, least cost?) DAG from one to the other. Then to run the build you identify some combination of resources and states you want to end up in gathered together in another target or something similar. Is that the idea? On 2/19/2012 1:26 PM, Dominique Devienne wrote: On Sat, Feb 18, 2012 at 11:02 AM, Gilles Scokart wrote: For me, one feature for a 2,0 would be a different style of dependency tree that would allow better parallel execution (on the same machine, or why not on distributed machines). Agreed. I was in fact thinking of this one as well when I wrote my "integrated build generator/manipulator". I see the 'targets' being more declarative, becoming a state transition saying : I need this resources in that state, I will use this other resources (and I don't want the to change during my execution, and I will produce this other resources in that other state. Yep, with the modulo that I see 'targets' in a fine-grained way, i.e. you know the graph of actions to transition all input files/resources and come up with the optimum way to achieve the stated goals given the hardware resources (single cpu computer, multi-core computer, grid of computers). That's basically Makefile territory in a way, and similar to what Peter's does as well. Right now Ant's targets typically deal with "macro" dependencies (build all .class file before building all .jar ones), and not "micro" dependencies at the file level, so the opportunities to do stuff in parallel are lessened IMHO. One reason Ant doesn't care much about this kind of parallelism is that Javac is fast-enough and cannot be distributed really, and it's the compilation of native languages like C++ that benefit most from those, and that's not Ant's territory in fact. The dependency tree would be an logical engine finding the shortest path to go to the desired state, using parallel/distributed processing when possible. That's what I miss with existing build system : I want to go as quickly as possible to a desired build state (from a current state). Have you read the 4 part series about how Google does its builds? Below's a link to part#4. --DD http://google-engtools.blogspot.com/2011/10/build-in-cloud-distributing-build.html --
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
It sounds like you are both are on a similar wavelength. Let me see if I understand. A new style of build (while maintaining the old style, of course) would be to declare some combination of resources to have similar states and transitions between states. So something like this (just as an example of a made-up syntax): detect="${no-java-src-present}"> detect="${java-src-present}"> and so on. The statechanges here are single steps from state to state, but presumably the from and to statechanges could be many steps away and Ant would find the best (for some value of best - fewest nodes, least cost?) DAG from one to the other. Then to run the build you identify some combination of resources and states you want to end up in gathered together in another target or something similar. Is that the idea? On 2/19/2012 1:26 PM, Dominique Devienne wrote: On Sat, Feb 18, 2012 at 11:02 AM, Gilles Scokart wrote: For me, one feature for a 2,0 would be a different style of dependency tree that would allow better parallel execution (on the same machine, or why not on distributed machines). Agreed. I was in fact thinking of this one as well when I wrote my "integrated build generator/manipulator". I see the 'targets' being more declarative, becoming a state transition saying : I need this resources in that state, I will use this other resources (and I don't want the to change during my execution, and I will produce this other resources in that other state. Yep, with the modulo that I see 'targets' in a fine-grained way, i.e. you know the graph of actions to transition all input files/resources and come up with the optimum way to achieve the stated goals given the hardware resources (single cpu computer, multi-core computer, grid of computers). That's basically Makefile territory in a way, and similar to what Peter's does as well. Right now Ant's targets typically deal with "macro" dependencies (build all .class file before building all .jar ones), and not "micro" dependencies at the file level, so the opportunities to do stuff in parallel are lessened IMHO. One reason Ant doesn't care much about this kind of parallelism is that Javac is fast-enough and cannot be distributed really, and it's the compilation of native languages like C++ that benefit most from those, and that's not Ant's territory in fact. The dependency tree would be an logical engine finding the shortest path to go to the desired state, using parallel/distributed processing when possible. That's what I miss with existing build system : I want to go as quickly as possible to a desired build state (from a current state). Have you read the 4 part series about how Google does its builds? Below's a link to part#4. --DD http://google-engtools.blogspot.com/2011/10/build-in-cloud-distributing-build.html - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
On Sat, Feb 18, 2012 at 11:02 AM, Gilles Scokart wrote: > For me, one feature for a 2,0 would be a different style of dependency > tree that would allow better parallel execution (on the same machine, > or why not on distributed machines). Agreed. I was in fact thinking of this one as well when I wrote my "integrated build generator/manipulator". > I see the 'targets' being more declarative, becoming a state > transition saying : I need this resources in that state, I will use > this other resources (and I don't want the to change during my > execution, and I will produce this other resources in that other > state. Yep, with the modulo that I see 'targets' in a fine-grained way, i.e. you know the graph of actions to transition all input files/resources and come up with the optimum way to achieve the stated goals given the hardware resources (single cpu computer, multi-core computer, grid of computers). That's basically Makefile territory in a way, and similar to what Peter's does as well. Right now Ant's targets typically deal with "macro" dependencies (build all .class file before building all .jar ones), and not "micro" dependencies at the file level, so the opportunities to do stuff in parallel are lessened IMHO. One reason Ant doesn't care much about this kind of parallelism is that Javac is fast-enough and cannot be distributed really, and it's the compilation of native languages like C++ that benefit most from those, and that's not Ant's territory in fact. > The dependency tree would be an logical engine finding the shortest > path to go to the desired state, using parallel/distributed processing > when possible. > > That's what I miss with existing build system : I want to go as > quickly as possible to a desired build state (from a current state). Have you read the 4 part series about how Google does its builds? Below's a link to part#4. --DD http://google-engtools.blogspot.com/2011/10/build-in-cloud-distributing-build.html - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
For me, one feature for a 2,0 would be a different style of dependency tree that would allow better parallel execution (on the same machine, or why not on distributed machines). I see the 'targets' being more declarative, becoming a state transition saying : I need this resources in that state, I will use this other resources (and I don't want the to change during my execution, and I will produce this other resources in that other state. The dependency tree would be an logical engine finding the shortest path to go to the desired state, using parallel/distributed processing when possible. That's what I miss with existing build system : I want to go as quickly as possible to a desired build state (from a current state). Gilles Scokart On 17 February 2012 20:07, Bruce Atherton wrote: > It doesn't require a rewrite, but a rewrite could simplify integrating a > usecase like this as well as integrating other features that we already have > into it and making them simpler and unified inthe code. I agree the usecase > is an excellent one which could simplify the lives of exactly the type of > users I am talking about. > > It sounds like you are suggesting that the dependency tree be extensible and > modifiable, perhaps manipulable, within targets as well so long as that part > of the tree hasn't run yet. In a sense that is what macros do because they > allow you to swap in some static block of tasks to replace a single task. > There is also the feature from EasyAnt for changing target dependencies. But > what I'm hearing is that you want more flexibility than that. > > Something to walk the existing dependency tree, perhaps, with conditional > behaviors to modify the metadata on existing element such as dependencies > and if/unless, replacing the element with another or a subtree (perhaps > itself dynamically walked and created), adding branches, perhaps deleting > elements or subtrees. Kind of like what we can do with a tree of files and > directories already. Does that sound like what the design you'd like to see > would have? > > And perhaps it could encompass providing both the macro and target > dependency changes to the tree as well, along with any other code we have > that alters the dependency tree. I'm not sure which of the various ways to > call back into Ant do this. I'm sure there are other examples in the > codebase. > > I'm not familiar enough with this part of the code any more to know whether > there is already a single elegant solution in Ant 1 that all the code which > modifies the dependency tree shares, but given our BC requirements I doubt > it. > > One example of a FileSystemProvider that Java 7 suggests in its API docs is > a "memory" file system, one identified by the URL "memory://". Perhaps our > dependency tree could be a kind of file system, then we could reuse vast > swathes of code we already have, both in the standard class libraries and in > Ant itself. Just an idea off the top of my head. > > > On 2/17/2012 5:53 AM, Dominique Devienne wrote: >> >> 2012/2/17 Bruce Atherton: >>> >>> A lot of companies have their own, internally written build file >>> generators >>> just so their build systems are consistent and exactly what they want. >>> Our >>> Related Projects and External Tools page has some of these that were made >>> public, I suspect. >>> >>> Surely there is a better way than requiring users of Ant to write >>> generators >>> to deal with the complexity and keep it customized. >> >> At one point I did write a build(s) (XSLT-based) generator >> specifically for a large and hairy project. Later I rewrote the whole >> thing with macrodefs. But my point is that I don't view build >> generators as bad, in fact it often helps IMHO to have a declarative >> custom DSL (in XML in my case, so read "DSL" with a grain of salt) >> that's used as the input for generating Ant build fragments, and have >> those fragments be able to "insert" them into the target graph. I've >> also long felt Ant needed generalized if/unless/os (and my own >> extensions like ifTrue, unlessTrue, when) on any "XML tag" (or >> UnknownElement if you prefer), just read the recent "add if/unless to >> 's" thread. is nice, but you can't use >> it for arbitrary, *and conditional*, XML "fragments" inside tasks. All >> those things you can often do more easily with a generator, but that's >> often cumbersome, doesn't play well with IDEs, etc... I guess I'm >> saying I've often wished for generator-like features as a built-in >> part of Ant. Do you see what I'm saying? Ant now does late >> "conversion" from UnkownElement to actual configuration of the Java >> code it maps to, and a way to influence/transform that almost AST-like >> graph would make Ant more powerful and flexible, perhaps at the >> expense of creating "dialects" unreadable to someone not familiar with >> them. Given Ant's XML roots, perhaps a tighter built-in integration >> with XSLT to dynamically "rewrite" the build at runtime/buildtime >> wou
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
It doesn't require a rewrite, but a rewrite could simplify integrating a usecase like this as well as integrating other features that we already have into it and making them simpler and unified inthe code. I agree the usecase is an excellent one which could simplify the lives of exactly the type of users I am talking about. It sounds like you are suggesting that the dependency tree be extensible and modifiable, perhaps manipulable, within targets as well so long as that part of the tree hasn't run yet. In a sense that is what macros do because they allow you to swap in some static block of tasks to replace a single task. There is also the feature from EasyAnt for changing target dependencies. But what I'm hearing is that you want more flexibility than that. Something to walk the existing dependency tree, perhaps, with conditional behaviors to modify the metadata on existing element such as dependencies and if/unless, replacing the element with another or a subtree (perhaps itself dynamically walked and created), adding branches, perhaps deleting elements or subtrees. Kind of like what we can do with a tree of files and directories already. Does that sound like what the design you'd like to see would have? And perhaps it could encompass providing both the macro and target dependency changes to the tree as well, along with any other code we have that alters the dependency tree. I'm not sure which of the various ways to call back into Ant do this. I'm sure there are other examples in the codebase. I'm not familiar enough with this part of the code any more to know whether there is already a single elegant solution in Ant 1 that all the code which modifies the dependency tree shares, but given our BC requirements I doubt it. One example of a FileSystemProvider that Java 7 suggests in its API docs is a "memory" file system, one identified by the URL "memory://". Perhaps our dependency tree could be a kind of file system, then we could reuse vast swathes of code we already have, both in the standard class libraries and in Ant itself. Just an idea off the top of my head. On 2/17/2012 5:53 AM, Dominique Devienne wrote: 2012/2/17 Bruce Atherton: A lot of companies have their own, internally written build file generators just so their build systems are consistent and exactly what they want. Our Related Projects and External Tools page has some of these that were made public, I suspect. Surely there is a better way than requiring users of Ant to write generators to deal with the complexity and keep it customized. At one point I did write a build(s) (XSLT-based) generator specifically for a large and hairy project. Later I rewrote the whole thing with macrodefs. But my point is that I don't view build generators as bad, in fact it often helps IMHO to have a declarative custom DSL (in XML in my case, so read "DSL" with a grain of salt) that's used as the input for generating Ant build fragments, and have those fragments be able to "insert" them into the target graph. I've also long felt Ant needed generalized if/unless/os (and my own extensions like ifTrue, unlessTrue, when) on any "XML tag" (or UnknownElement if you prefer), just read the recent "add if/unless to 's" thread. is nice, but you can't use it for arbitrary, *and conditional*, XML "fragments" inside tasks. All those things you can often do more easily with a generator, but that's often cumbersome, doesn't play well with IDEs, etc... I guess I'm saying I've often wished for generator-like features as a built-in part of Ant. Do you see what I'm saying? Ant now does late "conversion" from UnkownElement to actual configuration of the Java code it maps to, and a way to influence/transform that almost AST-like graph would make Ant more powerful and flexible, perhaps at the expense of creating "dialects" unreadable to someone not familiar with them. Given Ant's XML roots, perhaps a tighter built-in integration with XSLT to dynamically "rewrite" the build at runtime/buildtime would be one way to achieve what I envision (notwithstanding the talks of non-XML front-ends of course). Stepping of my soapbox now :) What I'm saying has nothing to do with Java7, nor necessarily require a rewrite either. --DD - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
2012/2/17 Bruce Atherton : > A lot of companies have their own, internally written build file generators > just so their build systems are consistent and exactly what they want. Our > Related Projects and External Tools page has some of these that were made > public, I suspect. > > Surely there is a better way than requiring users of Ant to write generators > to deal with the complexity and keep it customized. At one point I did write a build(s) (XSLT-based) generator specifically for a large and hairy project. Later I rewrote the whole thing with macrodefs. But my point is that I don't view build generators as bad, in fact it often helps IMHO to have a declarative custom DSL (in XML in my case, so read "DSL" with a grain of salt) that's used as the input for generating Ant build fragments, and have those fragments be able to "insert" them into the target graph. I've also long felt Ant needed generalized if/unless/os (and my own extensions like ifTrue, unlessTrue, when) on any "XML tag" (or UnknownElement if you prefer), just read the recent "add if/unless to 's " thread. is nice, but you can't use it for arbitrary, *and conditional*, XML "fragments" inside tasks. All those things you can often do more easily with a generator, but that's often cumbersome, doesn't play well with IDEs, etc... I guess I'm saying I've often wished for generator-like features as a built-in part of Ant. Do you see what I'm saying? Ant now does late "conversion" from UnkownElement to actual configuration of the Java code it maps to, and a way to influence/transform that almost AST-like graph would make Ant more powerful and flexible, perhaps at the expense of creating "dialects" unreadable to someone not familiar with them. Given Ant's XML roots, perhaps a tighter built-in integration with XSLT to dynamically "rewrite" the build at runtime/buildtime would be one way to achieve what I envision (notwithstanding the talks of non-XML front-ends of course). Stepping of my soapbox now :) What I'm saying has nothing to do with Java7, nor necessarily require a rewrite either. --DD - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
On 2/16/2012 2:36 PM, Nicolas Lalevée wrote: Le 16 févr. 2012 à 20:47, Bruce Atherton a écrit : I'd hope to go further than that in backwards compatibility. I work with a lot of companies that are: a) resistant to learning new things unless there is a good reason for it (such as the migration from Apache HTTP Server from 1.x to 2.x to resolve security issues) b) have a number of separate Ant build scripts that follow different standards in different areas of the company, particularly if they have and c) need to have a justification to allocate resources to upgrade and change a working build to use new features, which standardizing builds across the organization using new features in a major release that simplify the build system may offer them. I don't know conclusion you're having there. Such companies shouldn't worry about any new major version, because they actually do want to stick with the old one for stability purpose. I guess that the companies which would be troubled is the ones which want to keep up with the releases, migrations from one version to another should not be too painful. No, you are right that these companies need a good reason to upgrade. What I am saying is that the pain that is caused by trying to make minor modifications to large complicated build systems, combined with having multiple large build systems that do very different things and the difficulty in dealing with these major changes in operating, is the thing that can cause at least some of them to dedicate the resources to standardize on something simpler. But I haven't found any that are interested in considering a new build system. They know Ant. Any upgrades they want to do in their own time. That is why I think backward compatibility is so important. They can roll out an upgrade to Ant 2, make sure everything works as expected, and then in their own time roll out a simplified, standardized build to each of the systems they are currently running it. Well, again, I think it's already there, no need to wait for an Ant 2.0 :) If you add the groovy-front.jar in Ant's boot classpath, write a build.groovy, then a launch of ant with no parameter on the command line will execute your groovy build script. See ProjectHelperRepository.getProjectHelperForBuildFile(Resource) I've got a lot of customers with the kinds of Ant build systems I am talking about. Precisely zero of them use anything other than an XML format for the build. Downloading extra bits to do funky things is not in their DNA. Some of them are forbidden to use Ant Contrib because it hasn't been through a security audit. I used to think we are living in a Maven world and that Ant was fine being just in maintenance mode. Since I've been helping these customers integrate my product with their systems, including their build systems, I've come to realize that there is still a very strong need for Ant out there, and that they are hurting from the complexity of it. Some of the complexity is from build systems that were written pre-macrodef and they haven't seen that one feature as compelling enough to commit to a rewrite. Some use macros, though, and things are still pretty complicated. I think this is Ant's market: places that don't want the dependency features of Maven and require complete control over exactly how their build is done. A lot of companies have their own, internally written build file generators just so their build systems are consistent and exactly what they want. Our Related Projects and External Tools page has some of these that were made public, I suspect. Surely there is a better way than requiring users of Ant to write generators to deal with the complexity and keep it customized. - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Le 16 févr. 2012 à 20:49, Mansour Al Akeel a écrit : > 2012/2/16 Nicolas Lalevée > >> >> >> I cannot talk about Gradle because I never really understand the real >> motive apart from the apparent cool groovy language features. >> >> On the other hand, Easyant is about using Ant on steroïds. The idea is >> basically sharing Ant build scripts. >> Each time I have to make a build of a Java webapp, I don't write my >> build.xml from scratch each time. I look up for an old project I used to >> work on, I copy its build and keep the interesting parts, I rehack the >> build scripts. So with some convention and for very similar projects, we >> could share theses scripts. Easyant does "just" this with Ivy. >> > > I used gradle and don't see the reason for it except for the multi module > support. And yes, it's slow. For a continuous build like (on file change, > compile, build, and let jrebel reload), It's to slow for me. > > I understand that easyant makes reusable build available, but I think the > multi project support (in gradle), the groovy feature (in gradle), and the > reusable tasks (in easyant), can all be done with antlib. Why did their > teams created a new build system, rather than antlib ? Easyant doesn't per se provide reusable tasks, that is effectively the role of antlibs, but it better provides a standard build workflow, it provides targets. Extension points which makes target reusable were introduced in Ant after some prototyping in Easyant actually. I guess that a proper multi project support involves some build workflow management, so working with targets. I doubt it is feasible with just antlibs. Nicolas - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Le 16 févr. 2012 à 21:08, Bruce Atherton a écrit : > It has but not for quite a long time. Look in the archives from 2001 to 2003 > for "Mutant"[1] which Conor proposed, and "Myrmidon"[2] which Peter Donald > proposed back in 2000. You can still find them in the svn repository[3], [4]. > > I think there was so much discussion on a new design of Ant that everyone > just got exhausted talking about it. As I recall what finally brought it to a > halt was Costin Manolache saying "Just refactor what you have while retaining > backward compatibility." > > The general agreements that I remember, although I haven't trawled the > mailing list to find references, were that backward binary compatibility > could only be broken through an Ant 2.0 release, and that Ant 2.0 should do > everything in its power to be build file compatible. The thinking then was an > XSLT file could be provided if necessary although at this point I think we > could provide an task even if it just ran an XSLT, should > that prove necessary. But I don't think it should be required if possible, at > least not for several minor releases. I agree, the build file should be maintained compatible. As I wrote earlier a "version" tag should do the trick if new features need to break it a little bit, no version tag would mean it is a <2.0 build file. > This is a new group of Ant developers, though, and they may make different > decisions than the ones back then did. If we find volunteers willing to step > forward to help with the code. I can do the infrastructure things like > setting up a place to put everything in subversion, perhaps in > ant/sandbox/{some code name}. Any suggestions? All I can think of is pezant > or something similarly punny. It could just be ant2proposal. If it goes further, I will be happy to keep a eye around and discuss about it but I won't be able to write any code. Nicolas - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Le 16 févr. 2012 à 20:47, Bruce Atherton a écrit : > I'd hope to go further than that in backwards compatibility. I work with a > lot of companies that are: > >a) resistant to learning new things unless there is a good reason for it > (such as the migration from Apache HTTP Server from 1.x to 2.x to resolve > security issues) > >b) have a number of separate Ant build scripts that follow different > standards in different areas of the company, particularly if they have > > and c) need to have a justification to allocate resources to upgrade and > change a working build to use new features, which standardizing builds across > the organization using new features in a major release that simplify the > build system may offer them. I don't know conclusion you're having there. Such companies shouldn't worry about any new major version, because they actually do want to stick with the old one for stability purpose. I guess that the companies which would be troubled is the ones which want to keep up with the releases, migrations from one version to another should not be too painful. > You are right about the plugin parser architecture in Ant 1.x, but one of the > problems with it is that there is nothing shipped by default. What I meant > was that I would love it if Ant 2 also represented a point where new builds > could think about using a new build format automatically, just based on file > extension or a flag on the command line. That might encourage new projects to > adopt it. Well, again, I think it's already there, no need to wait for an Ant 2.0 :) If you add the groovy-front.jar in Ant's boot classpath, write a build.groovy, then a launch of ant with no parameter on the command line will execute your groovy build script. See ProjectHelperRepository.getProjectHelperForBuildFile(Resource) Nicolas - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
It has but not for quite a long time. Look in the archives from 2001 to 2003 for "Mutant"[1] which Conor proposed, and "Myrmidon"[2] which Peter Donald proposed back in 2000. You can still find them in the svn repository[3], [4]. I think there was so much discussion on a new design of Ant that everyone just got exhausted talking about it. As I recall what finally brought it to a halt was Costin Manolache saying "Just refactor what you have while retaining backward compatibility." The general agreements that I remember, although I haven't trawled the mailing list to find references, were that backward binary compatibility could only be broken through an Ant 2.0 release, and that Ant 2.0 should do everything in its power to be build file compatible. The thinking then was an XSLT file could be provided if necessary although at this point I think we could provide an task even if it just ran an XSLT, should that prove necessary. But I don't think it should be required if possible, at least not for several minor releases. This is a new group of Ant developers, though, and they may make different decisions than the ones back then did. If we find volunteers willing to step forward to help with the code. I can do the infrastructure things like setting up a place to put everything in subversion, perhaps in ant/sandbox/{some code name}. Any suggestions? All I can think of is pezant or something similarly punny. It could just be ant2proposal. As for whether it is a runtime issue, as far as I know the only problem with libraries is the bootstrap build. If Ant 2's bootstrap build is done by Ant 1 there is no problem with adding any libraries you want to the core of Ant 2. If it is self-hosted then Ant 2 needs to be capable of running without any external libraries. This is why the Ant 1.x codebase has a Java tar and zip and bzip2 implementation hosted within it, even though Apache Commons has superior implementations of all of them. Ant source is distributed in these formats so Ant needs a bootstrap way to get at it. Stefan maintains the compress AntLib for exactly this reason, so Ant can have access to a really good, full featured compression library. [1] http://marc.info/?l=ant-dev&m=98934355711364&w=2 [2] http://marc.info/?l=ant-dev&m=97593652718829&w=2 [3] http://svn.apache.org/viewvc/ant/core/tags/ANT_152_FINAL/proposal/mutant/ [4] http://svn.apache.org/viewvc/ant/core/tags/ANT_141/proposal/myrmidon/ On 2/13/2012 1:30 PM, Mansour Al Akeel wrote: interesting info. It looks like the idea of the redesign has been discussed a lot in the past. Another good point, is to have ant independent of any external libraries. However, I am wondering if this applies to run time environment ? For example, writing a core ant (mainly build.xml parser), as an osgi bundle. And collection of bundles for Javac, Java, Copy,... etc. would: 1- be independent of any external libraries and relies on JRE to build. 2- allow integration with IDEs. 3- allow to compile and build the build system, without a build system (ie, using bootstrap). or like you said "self-building". Would this be acceptable idea ? A core bundle, and extra bundles for basic tasks. A bundle for ivy (maybe). We can even have a bundle to install additional bundles remotely And with Java7 NIO the performance will be fine. comments ? - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
On Thu, Feb 16, 2012 at 2:49 PM, Mansour Al Akeel wrote: > > > > 2012/2/16 Nicolas Lalevée > > > > implementation are, but a 1s launch (bash script and jvm launch included) > > would be to too long for me. > > > Agreed. > > And this is why I suggested java plugin framework in a previous email > (assuming it is faster than OSGI). I read that there are some fast OSGI > implementations. Didn't try anything yet. > I'm neither an OSGi fan or bigot, but in my experience OSGi itself, as a specification, does not imply poor performance. There are some aspects of the OSGi runtime package wiring specification that are NP-complete, but this typically doesn't hurt real performance unless you have a system of thousands of bundles like Eclipse. I would hope something like Ant never got that far. In particular, loading the actual OSGi runtime is very fast, on the order of milliseconds. Keep in mind that the original OSGi runtime environment was (and still is) embedded systems with limited memory and CPU. How the application is designed, such as the degree of modularity, is ultimately the biggest determinant of performance. To that end I don't know if we could compare an (as yet unknown) standard Java modularity system) to OSGi, but I would be surprised if the native system was significantly more performant--unless it gave up some of the invaluable features that OSGi provides. As an aside, and speaking of Eclipse, you would want to keep in mind how to embed an Ant containing an OSGi runtime inside Eclipse. This isn't impossible, but it could lead to some interesting classloader hierarchies. Rich
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Oops, accidental deletion. On 2/16/2012 11:47 AM, Bruce Atherton wrote: b) have a number of separate Ant build scripts that follow different standards in different areas of the company, particularly if they have acquired other companies with their own Ant builds. - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
2012/2/16 Nicolas Lalevée > > > I cannot talk about Gradle because I never really understand the real > motive apart from the apparent cool groovy language features. > > On the other hand, Easyant is about using Ant on steroïds. The idea is > basically sharing Ant build scripts. > Each time I have to make a build of a Java webapp, I don't write my > build.xml from scratch each time. I look up for an old project I used to > work on, I copy its build and keep the interesting parts, I rehack the > build scripts. So with some convention and for very similar projects, we > could share theses scripts. Easyant does "just" this with Ivy. > I used gradle and don't see the reason for it except for the multi module support. And yes, it's slow. For a continuous build like (on file change, compile, build, and let jrebel reload), It's to slow for me. I understand that easyant makes reusable build available, but I think the multi project support (in gradle), the groovy feature (in gradle), and the reusable tasks (in easyant), can all be done with antlib. Why did their teams created a new build system, rather than antlib ? This is my question. > > > Is there something wrong with antlib ? Would OSGI be more convenient and > > appealing for programmers to create and contribute their plugins rather > > than writing their own build system ? Derivatives of eclipse exists, but > > mainly they are just bundles of different plugins. Is this because it's > > OSGI ? > > I like this idea of using of modular framework to handle properly > modularity. > But what I wouldn't like is having a longer bootstrapping of Ant. For > instance gradle is boring long to launch, even for printing the inline > help. The groovy frontend of Ant suffers for the same issues, unusable for > me. I don't have much experience with OSGi systems, I don't know how fast > some > > 2012/2/16 Nicolas Lalevée > > implementation are, but a 1s launch (bash script and jvm launch included) > would be to too long for me. > > And this is why I suggested java plugin framework in a previous email (assuming it is faster than OSGI). I read that there are some fast OSGI implementations. Didn't try anything yet. > Nicolas > > > - > To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org > For additional commands, e-mail: dev-h...@ant.apache.org > >
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
I'd hope to go further than that in backwards compatibility. I work with a lot of companies that are: a) resistant to learning new things unless there is a good reason for it (such as the migration from Apache HTTP Server from 1.x to 2.x to resolve security issues) b) have a number of separate Ant build scripts that follow different standards in different areas of the company, particularly if they have and c) need to have a justification to allocate resources to upgrade and change a working build to use new features, which standardizing builds across the organization using new features in a major release that simplify the build system may offer them. You are right about the plugin parser architecture in Ant 1.x, but one of the problems with it is that there is nothing shipped by default. What I meant was that I would love it if Ant 2 also represented a point where new builds could think about using a new build format automatically, just based on file extension or a flag on the command line. That might encourage new projects to adopt it. On 2/16/2012 10:57 AM, Nicolas Lalevée wrote: Le 14 févr. 2012 à 20:02, Bruce Atherton a écrit : On 2/14/2012 6:13 AM, Stefan Bodewig wrote: This will lead us to the discussion of what Ant2 would be. A rewritten Ant that remains compatible (or mostly so) on the build file level or something quite different? My opinion. I think we need at least an option for being backwards compatible at the build file level and it should be the default for quite a while after an initial 2.0 release. A simple trick can be a declaration of a "version" attribute which would declare the minimum Ant version required to run the build file, and also declare how it should be interpreted. This is how it works for the ivy.xml for instance. I'd hope, though, that a redesign would have a fully pluggable parser so that even with the first release there was an option to use something other than XML. I think you can already today, there are some experiments which show it works [1] [2]. The names of the classes of Ant may not be explicit, but I think the abstraction is there. Nicolas [1] http://svn.apache.org/repos/asf/ant/sandbox/javafront/ [2] http://svn.apache.org/repos/asf/ant/sandbox/groovyfront/ - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Le 15 févr. 2012 à 20:05, Mansour Al Akeel a écrit : > Another thing I don't understand about the current Ant. Why there are > derivatives from ant and they are gaining popularity ? I am talking about > gradle and easyant. > > Gradle adds mutli project support, and easyant sets some conventions (I > didn't use it). I am wondering what makes the author go with a new build > system, if things like this can be done with antlib. And why would users > switch to these systems. I like writing my custom tasks and wrap them in an > antlib. But why others are not doing the same to add multi project support, > or set some conventions ? I cannot talk about Gradle because I never really understand the real motive apart from the apparent cool groovy language features. On the other hand, Easyant is about using Ant on steroïds. The idea is basically sharing Ant build scripts. Each time I have to make a build of a Java webapp, I don't write my build.xml from scratch each time. I look up for an old project I used to work on, I copy its build and keep the interesting parts, I rehack the build scripts. So with some convention and for very similar projects, we could share theses scripts. Easyant does "just" this with Ivy. > Is there something wrong with antlib ? Would OSGI be more convenient and > appealing for programmers to create and contribute their plugins rather > than writing their own build system ? Derivatives of eclipse exists, but > mainly they are just bundles of different plugins. Is this because it's > OSGI ? I like this idea of using of modular framework to handle properly modularity. But what I wouldn't like is having a longer bootstrapping of Ant. For instance gradle is boring long to launch, even for printing the inline help. The groovy frontend of Ant suffers for the same issues, unusable for me. I don't have much experience with OSGi systems, I don't know how fast some implementation are, but a 1s launch (bash script and jvm launch included) would be to too long for me. Nicolas - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Le 14 févr. 2012 à 20:02, Bruce Atherton a écrit : > On 2/14/2012 6:13 AM, Stefan Bodewig wrote: >> >> This will lead us to the discussion of what Ant2 would be. A rewritten >> Ant that remains compatible (or mostly so) on the build file level or >> something quite different? >> > > My opinion. > > I think we need at least an option for being backwards compatible at the > build file level and it should be the default for quite a while after an > initial 2.0 release. A simple trick can be a declaration of a "version" attribute which would declare the minimum Ant version required to run the build file, and also declare how it should be interpreted. This is how it works for the ivy.xml for instance. > I'd hope, though, that a redesign would have a fully pluggable parser so that > even with the first release there was an option to use something other than > XML. I think you can already today, there are some experiments which show it works [1] [2]. The names of the classes of Ant may not be explicit, but I think the abstraction is there. Nicolas [1] http://svn.apache.org/repos/asf/ant/sandbox/javafront/ [2] http://svn.apache.org/repos/asf/ant/sandbox/groovyfront/ - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
On 2/15/2012 5:48 PM, Bruce Atherton wrote: I've read a blog post that said that one of the requirements that has been adopted is OSGI compatibility... Here is the post I mentioned: http://osgithoughts.blogspot.com/2011/05/java-se-8-modularity-requirements.html It brings up a good point: a system architected with modularity in mind is fundamentally different from a system that isn't. Ant 1.x is modular, but there are many different kinds of modularity introduced over time and it can be hard to keep track of which files need to be modified to add a particular build file element. Some are pluggable, some load from a properties list, etc. Sometimes, particularly for backward API compatibility, you need to add a new element to more than one place and it can be easy to miss one. Having a single module system for the whole system that is compatible with what is expected in Java 8, with the option of plugging OSGI in to replace it, seems like a good solution to me. When Java 8 is the lowest supported JVM of Ant 2 (sometime 5 years from now based on previous experience) we can drop our solution and use whatever is bundled as the default. - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Those changes you have sound useful. Good luck with getting them cleared, I'm sure a number of people would appreciate having access to those hooks. I think adding the standard packaging and deployment mechanism of Java 8 to Antlibs once 8 comes out makes a lot of sense. Once that happens someone could give the results from testing with some of the standard JARs that Ant Users prefer. Or perhaps the JRE will bundle one that everyone uses by default. That is if it makes it into the release. JSR 277 and JSR 294 had high hopes to start that process but they are both now marked as inactive. Project Jigsaw[1] appears to be an important target for Java 8[2] and I've read a blog post that said that one of the requirements that has been adopted is OSGI compatibility. So hopefully it will. [1] http://openjdk.java.net/projects/jigsaw/ [2] http://openjdk.java.net/projects/jdk8/ On 2/15/2012 4:05 PM, Jeffrey E Care wrote: The only problem I have with the antlib mechanism is that you have to specifically call out the antlib(s) you want to use. That's not a problem in build.xmls, as I would think that most people would want the namespace binding; but consider things like version information& diagnostics providers: presently there's no hook for an antlib to contribute to the version information or diags, even if the JAR containing the antlib is in Ant's lib directory (or elsewhere on the classpath). Fortunately for these cases META-INF/services provides a good enough mechanism. I have a contribution for Ant that will add hook points for antlibs to contribute to the version info& diags but I can't seem to get it cleared through IBM legal :( I don't know of a compelling reason to add a heavyweight plugin mechanism like OSGi. -- JEC - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Mansour Al Akeel wrote on 02/15/2012 02:05:28 PM: > Is there something wrong with antlib ? Would OSGI be more convenient and > appealing for programmers to create and contribute their plugins rather > than writing their own build system ? Derivatives of eclipse exists, but > mainly they are just bundles of different plugins. Is this because it's > OSGI ? The only problem I have with the antlib mechanism is that you have to specifically call out the antlib(s) you want to use. That's not a problem in build.xmls, as I would think that most people would want the namespace binding; but consider things like version information & diagnostics providers: presently there's no hook for an antlib to contribute to the version information or diags, even if the JAR containing the antlib is in Ant's lib directory (or elsewhere on the classpath). Fortunately for these cases META-INF/services provides a good enough mechanism. I have a contribution for Ant that will add hook points for antlibs to contribute to the version info & diags but I can't seem to get it cleared through IBM legal :( I don't know of a compelling reason to add a heavyweight plugin mechanism like OSGi. -- JEC
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Another thing I don't understand about the current Ant. Why there are derivatives from ant and they are gaining popularity ? I am talking about gradle and easyant. Gradle adds mutli project support, and easyant sets some conventions (I didn't use it). I am wondering what makes the author go with a new build system, if things like this can be done with antlib. And why would users switch to these systems. I like writing my custom tasks and wrap them in an antlib. But why others are not doing the same to add multi project support, or set some conventions ? Is there something wrong with antlib ? Would OSGI be more convenient and appealing for programmers to create and contribute their plugins rather than writing their own build system ? Derivatives of eclipse exists, but mainly they are just bundles of different plugins. Is this because it's OSGI ? This is really another reason that makes me think about forking ant beside introducing NIO2. I agree with Jesse, there's inconsistency dealing with different Resource. With regard to backward compatibility, It is good idea to keep it as "Nice to have", and try to maintain it as much as possible. The one thing I am confident it's critical, is the simplicity. For example, I came back to ant because I wanted to write a task that will be triggered when a file changes. I was not able to do this with gradle: http://forums.gradle.org/gradle/topics/runnig_task_programmatically probably it's a bit early to start thinking about a rewrite. But just to check available ideas. On Tue, Feb 14, 2012 at 2:35 PM, Bruce Atherton wrote: > > > On 2/13/2012 2:55 PM, Jesse Glick wrote: > >> On 02/13/2012 01:25 PM, Bruce Atherton wrote: >> >>> could Java 7 and NIO 2.0 be a good reason to create Ant 2.0? >>> >> >> While the new java.nio.file.* APIs are indeed valuable for a tool like >> Ant, I hardly think a fork or major rewrite is required to take advantage >> of them. As Stefan pointed out, it would be as easy as creating a new >> FileUtils subclass, and for now compiling it conditionally. >> > > Required, no. If there is not enough interest in creating an Ant 2 then > everything will be fine staying with Ant 1.x. We've been doing it through > massive changes in the Java libraries and we can keep doing it the same > way. If there aren't enough people interested in doing the work then we > should just drop it. > > But I've talked about a few of the advantages I see in dropping backward > API compatibility and doing a major refactoring. Let me list a few more. > > My biggest problem with Ant is the many ways that files are dealt with. It > is all over the map. This isn't anyone's fault, it happened because of > hysterical porpoises, but both our users and ourselves have to deal with > the fallout. > > Users have to deal with understanding the differences between paths and > filelists and filesets and dirsets and resources. They have to come to > grips with how and don't work like selectors. Filters > aren't much better since there are different ways that they can work. > > We have it a bit easier because under the covers most things have been > normalized. Resources, for example. But thanks to API compatibility that > brings its own problems. For example, we have two completely separate yet > very similar set of classes for Selectors, one for FileSelectors and one > for ResourceSelectors. Fix a bug in one, did you remember to fix it in the > other? Does it matter if users of the FileSelector APIs still have the bug? > > Or look at the utility classes. How many methods, or lines of extra code > in methods that should be relatively simple, are devoted to dealing with > edge cases and these hangers on from our past? > > All of these things were an itch bad enough that I started to scratch it, > but for now I won't be doing any coding at all for a while. Maybe, though, > there are others who are as bothered by these things as I am who are > looking for a scratching post. > > > > --**--**- > To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org > For additional commands, e-mail: dev-h...@ant.apache.org > >
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
On 2/13/2012 2:55 PM, Jesse Glick wrote: On 02/13/2012 01:25 PM, Bruce Atherton wrote: could Java 7 and NIO 2.0 be a good reason to create Ant 2.0? While the new java.nio.file.* APIs are indeed valuable for a tool like Ant, I hardly think a fork or major rewrite is required to take advantage of them. As Stefan pointed out, it would be as easy as creating a new FileUtils subclass, and for now compiling it conditionally. Required, no. If there is not enough interest in creating an Ant 2 then everything will be fine staying with Ant 1.x. We've been doing it through massive changes in the Java libraries and we can keep doing it the same way. If there aren't enough people interested in doing the work then we should just drop it. But I've talked about a few of the advantages I see in dropping backward API compatibility and doing a major refactoring. Let me list a few more. My biggest problem with Ant is the many ways that files are dealt with. It is all over the map. This isn't anyone's fault, it happened because of hysterical porpoises, but both our users and ourselves have to deal with the fallout. Users have to deal with understanding the differences between paths and filelists and filesets and dirsets and resources. They have to come to grips with how and don't work like selectors. Filters aren't much better since there are different ways that they can work. We have it a bit easier because under the covers most things have been normalized. Resources, for example. But thanks to API compatibility that brings its own problems. For example, we have two completely separate yet very similar set of classes for Selectors, one for FileSelectors and one for ResourceSelectors. Fix a bug in one, did you remember to fix it in the other? Does it matter if users of the FileSelector APIs still have the bug? Or look at the utility classes. How many methods, or lines of extra code in methods that should be relatively simple, are devoted to dealing with edge cases and these hangers on from our past? All of these things were an itch bad enough that I started to scratch it, but for now I won't be doing any coding at all for a while. Maybe, though, there are others who are as bothered by these things as I am who are looking for a scratching post. - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
On 2/14/2012 6:13 AM, Stefan Bodewig wrote: This will lead us to the discussion of what Ant2 would be. A rewritten Ant that remains compatible (or mostly so) on the build file level or something quite different? My opinion. I think we need at least an option for being backwards compatible at the build file level and it should be the default for quite a while after an initial 2.0 release. I'd hope, though, that a redesign would have a fully pluggable parser so that even with the first release there was an option to use something other than XML. I actually think build file compatibility should be a feature of the first alpha. Here is how I thought it might be achieved using the change in namespace that would allow Ant1 and Ant2 to coexist: Phase 1: Ant 2 handles a tag if it knows how, otherwise passes it to Ant 1. Originally all the infrastructure would call Ant 1 but that would gradually change as more facilities were developed for Ant 2. Phase 2: Ant 2 can do most things, but there are a few concepts and tags that are foreign to it that it needs to pass to Ant 1. Ant 1 comes with Ant 2 but only in the bootstrap form. Phase 3: Ant 2 can emulate enough of Ant 1 that it isn't necessary to ship it, but it is an option for those who want to run in compatibility mode or use an tag or similar. Basically I am talking about an aggressive refactoring with no thought to backwards API compatibility. That compatibility has tied our hands from doing a real refactoring for a decade. I agree with you that our tasks are fully debugged. They should be reused as much as possible. I would imagine that as far as tasks were concerned, a simple massaging before moving them to a new package would be all that was required, to take away cruft and to use a new style for defining tasks. And to move calls to the infrastructure over to the new one. What I started to implement was to make everything that is visible in a build file an immutable property, tasks and selectors and conditions, everything. They would all be POJOs with annotations to indicate how they are exposed to the dependency tree. The annotations would be a dependency on Ant that may not be desirable or possible for legacy classes, so a base proxy class could be extended to provide the annotations and automatically call into a reference POJO for behaviour. Creating a PropertyProxy from the POJOs to make them immutable could likewise be done. Any @Modifiable method on the Task would simply not do anything or throw an exception. Making everything a property would have an effect on what "immutable" means. It would mean that it was not the value of the property that was immutable, but the behaviour. So calling would always set TSTAMP to the current time, and the available task and condition would return true or false depending on whether a file exists at this point in the build. Given how dependencies are currently resolved I can't think of a way this change would affect the ordering of the build. Of course if you set the value to an Ant1 style property the value becomes immutable, so backward compatibility would be maintained. Some might not like this change. Personally, before macros I found far too many "time1", "time2", "thisfileexists1" in my build files. After, the fact I have to create macros to handle this basic functionality is just an irritant. But it is an irritant I would love to see removed from our lives. Anyway, those are my thoughts on backward compatibility. I would love to see more discussion about this. - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
On Tue, Feb 14, 2012 at 8:13 AM, Stefan Bodewig wrote: > On 2012-02-13, Bruce Atherton wrote: > >> I spent some time starting to implement a very simple (only a few >> tasks) new version of Ant that started from Java 7. Personal issues >> have taken me out of the game for a while, but I've still been >> wondering, could Java 7 and NIO 2.0 be a good reason to create Ant >> 2.0? > > There are things in NIO2 that can be added via FileUtils one way or the > other, but it could also make us rethink our concept of Resources > (although nio2's Path looks too limited for that). > > If we really want to take the burden of redesigning Ant on us then it > certainly wouldn't only be NIO2 but also revolutionary things like > generics. OTOH there will always be a reason to wait longer (lambdas, > modules). > > I fully understand that throwing away the existing cruft can set free > new energy. Personally I enjoy working on the Commons Antlib way more > than working on the built-in Zip/Tar tasks because I could design them > from a fresh start while the later have accumulated features with big > care for API backwards compatibility. > > To me the strength of Ant (as it is) is in its tasks. The tasks are > proven pieces of code that have been tested by an incredibly big amount > of people. And even if we have about 200 bug reports open, most tasks > do what they are supposed to do and do so very well. Any rewritten Ant > would have a long way to reach the same level of stability. The same is > true for the Compress Antlib vs the core tasks, of course. > >> It could be a way to sweep away the kind of cruft that is holding up >> the release and to redesign Ant to reflect all the lessons learned >> about how to build software in the last 10 years. > > This will lead us to the discussion of what Ant2 would be. A rewritten > Ant that remains compatible (or mostly so) on the build file level or > something quite different? > It would be very beneficial to have Ant 2 remain compatible at the build file level if for no other reason than to facilitate testing of v2 tasks: AntUnit-based tests should continue to pass, and as we've seen, the vast majority of Ant's unit tests are expressible in the AntUnit style. Agreed that a v2 could allow us to cast off accumulated baggage. The core of the redesign would be the most important thing to get right. I suspect that the concept of a Resource would be closer to the core (hindsight and all that) and would be interface-based. TBH, I've never looked closely at nio1, let alone 2, until just now, but after a quick look at java.nio.file.Path I confess that I don't immediately see what it lacks that we would need. Matt > Stefan > > - > To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org > For additional commands, e-mail: dev-h...@ant.apache.org > - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
On 2012-02-13, Bruce Atherton wrote: > I spent some time starting to implement a very simple (only a few > tasks) new version of Ant that started from Java 7. Personal issues > have taken me out of the game for a while, but I've still been > wondering, could Java 7 and NIO 2.0 be a good reason to create Ant > 2.0? There are things in NIO2 that can be added via FileUtils one way or the other, but it could also make us rethink our concept of Resources (although nio2's Path looks too limited for that). If we really want to take the burden of redesigning Ant on us then it certainly wouldn't only be NIO2 but also revolutionary things like generics. OTOH there will always be a reason to wait longer (lambdas, modules). I fully understand that throwing away the existing cruft can set free new energy. Personally I enjoy working on the Commons Antlib way more than working on the built-in Zip/Tar tasks because I could design them from a fresh start while the later have accumulated features with big care for API backwards compatibility. To me the strength of Ant (as it is) is in its tasks. The tasks are proven pieces of code that have been tested by an incredibly big amount of people. And even if we have about 200 bug reports open, most tasks do what they are supposed to do and do so very well. Any rewritten Ant would have a long way to reach the same level of stability. The same is true for the Compress Antlib vs the core tasks, of course. > It could be a way to sweep away the kind of cruft that is holding up > the release and to redesign Ant to reflect all the lessons learned > about how to build software in the last 10 years. This will lead us to the discussion of what Ant2 would be. A rewritten Ant that remains compatible (or mostly so) on the build file level or something quite different? Stefan - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Bruce Atherton wrote on 02/13/2012 01:25:30 PM: > I actually wanted to discuss Java 7 on the list. I went through its > features a while ago and got really excited when I read through NIO 2.0. > It does so much that Ant has to struggle with, and so much that Ant > can't do. > > I spent some time starting to implement a very simple (only a few tasks) > new version of Ant that started from Java 7. Personal issues have taken > me out of the game for a while, but I've still been wondering, could > Java 7 and NIO 2.0 be a good reason to create Ant 2.0? > > ... > > It could be a way to sweep away the kind of cruft that is holding up the > release and to redesign Ant to reflect all the lessons learned about how > to build software in the last 10 years. Or it could be I'm the only one > who read through the NIO 2.0 features and instantly thought about > rewriting Ant. I think you have to enumerate what you want to accomplish with a complete rewrite and what the compelling reasons are for such an undertaking. I agree that there are many compelling features in NIO 2 that I would like to see leveraged in Ant but I have to say that I'm not seeing a straight line from NIO 2 to a complete rewrite of Ant. For a less drastic approach maybe we could re-write only those tasks that would benefit the most from NIO 2's features. Put them in a different package and perhaps even put them in their own antlib. Putting task implementations to the side, what is there in the core of Ant that would benefit from NIO 2 or other parts of JDK 7?
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
On 02/13/2012 01:25 PM, Bruce Atherton wrote: could Java 7 and NIO 2.0 be a good reason to create Ant 2.0? While the new java.nio.file.* APIs are indeed valuable for a tool like Ant, I hardly think a fork or major rewrite is required to take advantage of them. As Stefan pointed out, it would be as easy as creating a new FileUtils subclass, and for now compiling it conditionally. Whenever we drop JDK 5 and 6 support and require JDK 7 (which BTW is soon to be available for all major platforms when the Mac version is released), it will be simple to make that be the standard impl. - To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
interesting info. It looks like the idea of the redesign has been discussed a lot in the past. Another good point, is to have ant independent of any external libraries. However, I am wondering if this applies to run time environment ? For example, writing a core ant (mainly build.xml parser), as an osgi bundle. And collection of bundles for Javac, Java, Copy,... etc. would: 1- be independent of any external libraries and relies on JRE to build. 2- allow integration with IDEs. 3- allow to compile and build the build system, without a build system (ie, using bootstrap). or like you said "self-building". Would this be acceptable idea ? A core bundle, and extra bundles for basic tasks. A bundle for ivy (maybe). We can even have a bundle to install additional bundles remotely And with Java7 NIO the performance will be fine. comments ? On Mon, Feb 13, 2012 at 4:04 PM, Bruce Atherton wrote: > This brings up a point to consider if a rewrite is desired. Ant has always > avoided relying on external libraries because it is usually the first thing > in the build chain. It can't have any dependencies itself if it is to be > self-building. There are tasks that require external libraries to be > compiled, yes, but they are all optional. That is why there is a bootstrap > build before the full build. The only libraries you can rely on being there > are the ones that ship with the JRE. > > This could change in Ant 2 if people wanted but I think we'd need a > strategy for it. For example, there was a lot of talk at one point about > moving the package name from org.apache.tools.ant.* to org.apache.ant.*. > Doing this would allow both Ant 1.x and Ant 2 to exist in the same program > (like IDEs), and it would allow a bootstrap Ant 1.x to build Ant 2. Doing > that would allow the use of libraries. > > I'm sure there could be other solutions as well, but I don't think anyone > should automatically assume that non-optional libraries will be available > until it is decided that that will happen. Assuming anything happens. > > > On 2/13/2012 12:02 PM, Jeffrey E Care wrote: > >> Mansour Al Akeel wrote on 02/13/2012 >> 01:57:56 PM: >> >> > From: Mansour Al Akeel >> > To: Ant Developers List >> > Cc: Stefan Bodewig >> > Date: 02/13/2012 01:58 PM >> > Subject: Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support >> > >> > Bruce, >> > In fact I was thinking about the same thing. The idea of forking Ant and >> > rewrite parts of it to use Java 7 NIO, and introduce java plugin frame >> > work >> > http://jpf.sourceforge.net/**crossed<http://jpf.sourceforge.net/crossed>my >> > mind few times. >> >> >> Why JPF instead of OSGi or whatever extensibility mechanism is working >> it's way through the JCP for Java 8? IMO the idea of basing an Ant re-write >> on some dubiously supported clone of Eclipse's plugin mechanism from 8 >> years ago isn't very appealing. >> __**__** >> __**__ >> Jeffrey E. (Jeff) Care >> _ca...@us.ibm.com_ <mailto:ca...@us.ibm.com> >> >> IBM WebSphere Application Server >> WAS Release Engineering >> >> >> WebSphere Mosiac >> WebSphere Brandmark >> >> >>
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
This brings up a point to consider if a rewrite is desired. Ant has always avoided relying on external libraries because it is usually the first thing in the build chain. It can't have any dependencies itself if it is to be self-building. There are tasks that require external libraries to be compiled, yes, but they are all optional. That is why there is a bootstrap build before the full build. The only libraries you can rely on being there are the ones that ship with the JRE. This could change in Ant 2 if people wanted but I think we'd need a strategy for it. For example, there was a lot of talk at one point about moving the package name from org.apache.tools.ant.* to org.apache.ant.*. Doing this would allow both Ant 1.x and Ant 2 to exist in the same program (like IDEs), and it would allow a bootstrap Ant 1.x to build Ant 2. Doing that would allow the use of libraries. I'm sure there could be other solutions as well, but I don't think anyone should automatically assume that non-optional libraries will be available until it is decided that that will happen. Assuming anything happens. On 2/13/2012 12:02 PM, Jeffrey E Care wrote: Mansour Al Akeel wrote on 02/13/2012 01:57:56 PM: > From: Mansour Al Akeel > To: Ant Developers List > Cc: Stefan Bodewig > Date: 02/13/2012 01:58 PM > Subject: Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support > > Bruce, > In fact I was thinking about the same thing. The idea of forking Ant and > rewrite parts of it to use Java 7 NIO, and introduce java plugin frame > work http://jpf.sourceforge.net/crossed my mind few times. Why JPF instead of OSGi or whatever extensibility mechanism is working it's way through the JCP for Java 8? IMO the idea of basing an Ant re-write on some dubiously supported clone of Eclipse's plugin mechanism from 8 years ago isn't very appealing. Jeffrey E. (Jeff) Care _ca...@us.ibm.com_ <mailto:ca...@us.ibm.com> IBM WebSphere Application Server WAS Release Engineering WebSphere Mosiac WebSphere Brandmark
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
good point Jeff. I just though about the performance. I am not sure what would be the performance for JPF compared to OSGI. But your are very correct. That's why we discuss this on the mailing list. In all cases, these are just thoughts, and I don't know if there's enough interest in these ideas. On Mon, Feb 13, 2012 at 3:02 PM, Jeffrey E Care wrote: > Mansour Al Akeel wrote on 02/13/2012 01:57:56 > PM: > > > From: Mansour Al Akeel > > To: Ant Developers List > > Cc: Stefan Bodewig > > Date: 02/13/2012 01:58 PM > > Subject: Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support > > > > Bruce, > > In fact I was thinking about the same thing. The idea of forking Ant and > > rewrite parts of it to use Java 7 NIO, and introduce java plugin frame > > work http://jpf.sourceforge.net/ crossed my mind few times. > > Why JPF instead of OSGi or whatever extensibility mechanism is working > it's way through the JCP for Java 8? IMO the idea of basing an Ant re-write > on some dubiously supported clone of Eclipse's plugin mechanism from 8 > years ago isn't very appealing. > > > Jeffrey E. (Jeff) Care > *ca...@us.ibm.com* > IBM WebSphere Application Server > WAS Release Engineering > > [image: WebSphere Mosiac] > [image: WebSphere Brandmark] > >
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Mansour Al Akeel wrote on 02/13/2012 01:57:56 PM: > From: Mansour Al Akeel > To: Ant Developers List > Cc: Stefan Bodewig > Date: 02/13/2012 01:58 PM > Subject: Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support > > Bruce, > In fact I was thinking about the same thing. The idea of forking Ant and > rewrite parts of it to use Java 7 NIO, and introduce java plugin frame > work http://jpf.sourceforge.net/ crossed my mind few times. Why JPF instead of OSGi or whatever extensibility mechanism is working it's way through the JCP for Java 8? IMO the idea of basing an Ant re-write on some dubiously supported clone of Eclipse's plugin mechanism from 8 years ago isn't very appealing. Jeffrey E. (Jeff) Care ca...@us.ibm.com IBM WebSphere Application Server WAS Release Engineering
Re: NIO 2.0 == Ant 2.0? was Re: Java NIO support
Bruce, In fact I was thinking about the same thing. The idea of forking Ant and rewrite parts of it to use Java 7 NIO, and introduce java plugin frame work http://jpf.sourceforge.net/ crossed my mind few times. On Mon, Feb 13, 2012 at 1:25 PM, Bruce Atherton wrote: > I actually wanted to discuss Java 7 on the list. I went through its > features a while ago and got really excited when I read through NIO 2.0. It > does so much that Ant has to struggle with, and so much that Ant can't do. > > I spent some time starting to implement a very simple (only a few tasks) > new version of Ant that started from Java 7. Personal issues have taken me > out of the game for a while, but I've still been wondering, could Java 7 > and NIO 2.0 be a good reason to create Ant 2.0? > > I realize I am violating "Shut up and show me the code". While I > personally won't be able to help much for the foreseeable future, I've seen > communities be revitalized by creating a new codebase. It attracts new > committers who have been annoyed by the previous bug/feature combinations > and get excited about the possibilities of helping to create a new > codebase. Cocoon did it twice, although I wouldn't recommend that because > the people attracted by Cocoon 2.2 went away because they felt their > efforts were wasted thanks to Cocoon 3.0. > > It could be a way to sweep away the kind of cruft that is holding up the > release and to redesign Ant to reflect all the lessons learned about how to > build software in the last 10 years. Or it could be I'm the only one who > read through the NIO 2.0 features and instantly thought about rewriting Ant. > > What do you guys think about it? > > On 2/5/2012 11:25 PM, Stefan Bodewig wrote: > >> On 2012-02-05, Mansour Al Akeel wrote: >> >> I have been looking and developing some custom task for ant, for the last >>> few days. I noticed that ant tasks don't use java.io directly. I am >>> assuming this is due to the way java.io.File behave on different >>> platforms, >>> and the support for patterns etc. >>> >> You must not forget that parts of Ant have been written at a time where >> Java2 was too new to require it as runtime environment. >> >> However, now with java 7, we have the Path class that is very convenient >>> to >>> use. I think having this will make writing tasks easier, by cuting down >>> the >>> steps to convert between ants Path and java.nio.file.Path. >>> Are there any interests ? >>> >> Yes, there is. >> >> Just now we have voted to accept Java5 (yes, 5, not 7) as our minimum >> requirement for Ant's trunk following the upcoming 1.8.3 release. This >> means we can not use Java7 features directly. >> >> One approach that may be possible is to write a FileUtils replacement >> using Java7 features. Almost all file system interactions of Ant go >> through FileUtils and Ant's core could detect at runtime whether Java7 >> is around and use the matching FileUtils class. >> >> Stefan >> >> --**--**- >> To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org >> For additional commands, e-mail: dev-h...@ant.apache.org >> >> > --**--**- > To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org > For additional commands, e-mail: dev-h...@ant.apache.org > >