|
Maven
[
Brett
]
15:18, Thursday, 23 March 2006
Continuum 1.0.3 is just around the corner, and I'm glad to mention a couple of really good improvements have cropped up recently. Apart from the other long list of fixes so far, Emmanuel has been hard at work cleaning up the JDO code, resulting in massive speed improvements on the project page, as well as when queuing and executing builds. Joel and Emmanuel also applied a new skin to the web interface, which you can see below. It's a lot more trim... If you are interested in checking it out, the latest *development* build is available here. This will be the stable release for a little while, as Continuum 1.1 rolls on with the conversion to WebWork2, a number of UI improvements to make it easier to use, integration of Geronimo's GBuild for distributed builds, and a number of other minor features.
[
Brett
]
11:13, Friday, 17 March 2006
I got back into doing a small feature enhancement for Continuum the other day. There was just one problem - after I built Continuum myself and ran it, my machine dropped to a blue screen of death and rebooted. (Yes, I'm back on Windows). This was pretty strange, as running Continuum that others built work just fine, and I really didn't have time to investigate it any further.
[
Brett
]
21:39, Monday, 6 March 2006
TestNG has been on my "must play with that some day" list for quite some time. Though I'm yet to write any significant tests with it, I was lucky to recently get some exposure to it to prod me along. This came in the form of support for Maven 2 contributed by Jesse Kuhnert, who not only did the initial patch but continually and patiently prodded me to look at it. I'd also listened to Cédric's JavaPosse podcast (or at least the first half, it seems to cut all the old ones off in the middle). I'd also started to get the IDEA plugin, assuming I got the right one The main reason I had put it off for so long was that I hadn't yet learned much about actually using TestNG and I knew I was going to have to make some changes to our test runner code called Surefire that has been around a long time and not evolved with the Maven 2 architecture. The patch for TestNG worked out of the box, but didn't (couldn't) integrate with other features. There were some rough edges along the way. Since the patch was using a few internal APIs from TestNG that were public, upgrading through releases that had come since constantly broke the code. Might be time to introduce them to Clirr, another of my favourite new toys :) However, the refactoring is now done and the TestNG code all revisited, and we've landed support that is comparable to JUnit (3) and the basic POJO test runner that is built in. It supports all of the fork modes (none, once for the whole suite, or fork for each test set), but more importantly integrates with anything else in the build lifecycle, such as Cobertura, without any additional configuration. This required very little TestNG specifics, so hopefully the basis is now there for other providers, as we start to see requests for JUnit 4 roll in. This is pretty satisfying, as we get to see the fulfilment of Maven's promised build knowledge reusability in action. Once released, using TestNG tests is just a matter of including: <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>4.6.1</version> <scope>test</scope> <classifier>jdk15</classifier> </dependency> </dependencies>
Another great thing is that you can try out TestNG immediately, even with your JUnit tests in place - the test runner finds each Java file and sets the JUnit flag for tests if appropriate so that they can be mixed in the directory with TestNG tests. There are some instructions for those that might be game enough to test it before the release, but it is not quite there yet and there are still some minor bugs to be resolved. Hopefully, these won't hold it up for too long. All in all, I think this is a great development and I certainly anticipate trying out TestNG on my current project. Just as soon as I get through all the mail I haven't read while I was playing around with it. Technorati Tags: maven
[
Brett
]
22:01, Tuesday, 10 January 2006
Do yourself a favour - check out Jetty6.
Luckily, Jetty6 to the rescue. I've heard much about it recently and I know they just did a Maven 2 plugin that sounded cool. I wasn't really aiming to learn another new technology, but thought it was worth a shot since it was on my todo list and I wasn't getting anywhere. Less than 5 minutes later, the environment is running flawlessly with features I've had to fumble around to set up for other containers in the past:
First, the normal Maven2 stuff: run the archetype command to generate a skeleton webapp project, start adding web content, and run mvn package to build the WAR. I'd done all this before using Tomcat today. Because of the way I was using Tomcat, I wasn't using mvn package, but had used mvn idea:idea to generate the appropriate webapp IDEA module and was letting it do all the exploded webapp creation in the Maven layout, so I could continue to use that as is. To set up Jetty6, I added this to the POM: <plugin> The rest of the defaults were fine. Then: mvn jetty6:runJetty is now sitting on localhost:8080 with the webapp running, listening for changes. This is my ideal set up for development, and I don't see myself going back any time soon. A huge thanks to the Greg and Jan for their work on this. I'm really looking forward to using it some more.
[
Brett
]
11:45, Friday, 6 January 2006
Both Steve and Lars have been talking about how they think Maven repositories could be improved. Lots of good points, lots I agree with, lots I'd have already done if there were more hours in the day :)
The good news is that you can help - we've gotten plenty and have seen quite an improvement since Maven 2.0 was released. There's still work to do, but we are moving forward.
[
Brett
]
06:18, Friday, 21 October 2005
Seems it was the day of the 2.0's. Slightly overdue but worth the wait, Maven 2.0 is now out. See the release notes for a list of changes and new features. This is a significant improvement over 1.0.
[
Brett
]
17:39, Wednesday, 5 October 2005
Maven 2.0 Beta 3 is out. There's plenty happening for Maven right now. This release is the second last beta as we approach the final release in the next couple of weeks. More of the original plugins are now available, and most boast improved functionality on top of the enhancements to the Maven engine itself. If you can't do it with this beta, you won't be able to do it with the final. It's bugfixes, better error reporting and doco from here on out. The web site today sports a new look, much nicer than the boxish default look that has been around for the last couple of years. We knew from Maven 1.0 that people didn't mind delving into the betas to find out what was going on, but given the bad experience many had with them last time around, I expected that it would be a bit quieter for Maven 2.0. I was wrong. We've had a huge amount of interest since the first beta was released - some using the ant tasks, some migrating from ant, some coming from maven 1.x. Hopefully we've given them a better experience this time around, with the releases being very consistent right through the betas. Back in June, JavaOne was indicative of the current trend for Maven. Plenty of folks dropped by the Mergere booth to say hi and let us know how they were using Maven. Glassfish was announced and its use of Maven was a talking point, and the 2 BOF's we held were packed out. What I thought was a dud time turned out to have people sitting on the floor with about 90 people squeezing into the small presentation room on both occasions. And only once was that for the free beer. Maven is popular. As the recent ONJava survey said - 19% of respondants use it. But its still the tool you'll love to hate - as one respondant to the same survey also said. Maven 2.0 will probably be no different, but hopefully this time only due to the fear of change rather than any technical limitations. I hope to write more on that tomorrow.
[
Brett
]
07:59, Wednesday, 28 September 2005
Maven 2.0 Beta 2 is now out Download: http://maven.apache.org/maven2/download.html The main improvements in this release are: * Bug fixes in the reporting API to allow the clover plugin to work in more scenarios This release is considered stable with a feature set comparable to Maven 1.0. Further betas and the final are expected to be backwards compatible, with a primary goal of bugfixes, usability improvements, and documentation. The current roadmap is to make weekly beta releases to encourage faster turnaround for issues found by the This core release is independent of the plugins available. Further releases of plugins will be made separately. We hope you enjoy using Maven! If you have any questions, please consult: * the web site For news and information, see:
[
Brett
]
01:23, Tuesday, 27 September 2005
Now that we're into the end game for Maven 2.0, we'll be producing weekly betas for installation and testing to try and get more timely feedback on fixes, and to avoid people falling back to building from the latest Subversion which is a moving target. Beta-2, out today, contains a number of bugfixes, especially to do with dependency resolution. Beta-3 will focus on polishing up the exception handling and any remaining major issues. Beta-4 is expected to be close to the final release, with all blocking issues fixed. At this point, we're keen to get some stable releases out there - there are lots of people looking to put it into production now so it is time to start locking it down. We also expect to deliver regular releases over the following weeks to resolve any minor issues, while work commences on the 2.1 feature release.
[
Brett
]
04:52, Saturday, 17 September 2005
Maven 2.0 Beta 1 and its sibling dependency management ant tasks are now out! Download it from http://maven.apache.org/maven2/download.html This release includes 206 bug fixes and enhancements since the previous release on 26 June. The main new features in this release are: * Further improved dependency management: full support for dependency ranges This release is considered stable with a feature set comparable to Maven 1.0. Further betas and the final are expected to be backwards compatible, with a primary goal of bugfixes, usability improvements, and documentation. A large number of plugins will be released in the coming week to match the primary Maven 1.0 plugin set. We hope you enjoy using Maven! If you have any questions, please consult: * the web site For news and information, see:
[
Brett
]
17:08, Monday, 12 September 2005
Just pushed out Maven 1.1 Beta 2 to the mirrors. Notable improvements: -> Download This knocks quite a few minutes off the Geronimo build in my environment, so give it a whirl and let us know if it works for you so we can push towards a final 1.1 release!
[
Brett
]
15:03, Thursday, 28 July 2005
This is some of the best news I've had all year :) It seems the next releases of JavaMail and Activation binaries will be available under CDDL, and I hear other spec jars are going down that same path. If I understand the license correctly, this means they can be distributed from the Maven repository at Ibiblio, as long as they carry a notice that indicates where the source can be located. I'll definitely be following this closely. It may even be worth building our own snapshot of these libraries from sources and pushing them up to ibiblio, though personally I'd prefer to wait for an official release rather than risk proliferating a temporary version. Given that Glassfish builds with Maven, maybe we can add them to the list of repository sync partners and releases would be pushed out automatically in the same way as other open source organisations - who knows.
[
Brett
]
15:19, Friday, 24 June 2005
The Apache Maven team are proud to announce the third alpha release of Maven 2.0. Download it from http://maven.apache.org/maven2/download.html This release includes 83 bug fixes and enhancements since the previous release on 13 May. Maven 2.0 is a rewrite of the popular Maven application to achieve a number of goals, and to provide a stable basis to take it into the future. While it can be considered quite stable, and future versions are now expected to retain a high amount of backwards compatibility, this is still a technology preview, and not yet complete or considered ready for a production environment. The main new features in this release are:
This release is very near to being feature complete, and the next release will be a feature complete beta-1. We hope you enjoy using Maven! If you have any questions, please consult: * the web site: http://maven.apache.org/maven2/ For news and information, see: * Maven Blogs: http://www.mavenblogs.com/
[
Brett
]
02:54, Tuesday, 21 June 2005
After finishing up a couple of recent tasks, I came to the realisation that Maven2 has reached the "hump" that you have to live with when writing in revolution mode instead of evolution. I think it is now possible to do everything you could do in Maven 1.0 in Maven 2, as far as the core is concerned (and of course, a whole lot more!) The main change that triggered this for me was the finalisation of the build lifecycle. While we've been adding a lot of new features, this one was important to facilitate some use cases in Maven1 that were previously unavailable to Maven2 plugin writers. This is a good milestone to hit, as the external API for plugin writers has now stabilised and some additional efforts can be put in there to rewrite the popular Maven1 plugins and reports to leverage the improvements of Maven2, so that users can see the same benefits. The Maven 2.0 alpha-3 release is due out on Wednesday, including those changes and more. In addition, the dependency management has started to undergo its usability improvements and will shortly have the version ranges and conflict resolution that has been on the todo list so long. And of course, this will also be available automatically in the Ant tasks (which have already undergone a number of other improvements for this release as well) and the standalone Java code you can use yourself. This is a big release as we are very close to being feature complete for the 2.0 core, and entering beta testing with the July release (that is, bugfixes, cosmetic improvements and above all documentation - avoiding API, usage and metadata changes). So if you've been thinking of trying Maven2 out, watch out for the release this week. We'd love to hear what you think about it and it is the best time to get your feedback in for the 2.0 release cycle.
[
Brett
]
04:56, Friday, 17 June 2005
The Maven 1.1 Beta is now out. Most will be interested in the reduced memory consumption and Ant 1.6 support, but there are a few other updates and bugfixes as well as all the latest stable plugin releases. It appears stable and should be usable today in most places using Maven 1.0.2. From the release notes... http://maven.apache.org/start/download.html This release focuses on the following objectives:
With just a few exceptions, Maven 1.1 is backwards compatible with Maven 1.0. For a full list of changes, please see JIRA. IMPORTANT: You must ensure that Maven 1.1 is first in your path if you want to have it installed side-by-side with Maven 1.0.2 We hope you enjoy using Maven! If you have any questions, please consult:
[
Brett
]
19:12, Tuesday, 14 June 2005
A year ago, I posed the question "Why do you Hate Maven?". A lot of those issues have since been addressed - if not in later Maven 1 releases, in Maven 2. This post inspired a mail on the users list listing some other issues, and whether they saw Maven 2 solving them. It is always good to hear in-depth feedback, both positive experiences and negative ones, that are framed in a way that help shape a better future for Maven. So with that in mind, I thought I'd respond, and since it started in the blogosphere (and the author had originally intended to reply on the blog), I figured I'd respond here too. It was definitely encouraging to note that even with the limitations discovered in Maven 1, those posing such questions still like it, and choose to use it - so its not so much a matter of hating Maven, but more of wishing it did what it does better. Anyway, here goes... ISSUE: Multiproject handling is a "tacked on option" whose interaction with other goals becomes problematic. This is correct here on both counts. Multiple project builds really was just a collection of separate builds. Improvements in Maven2 to cover this include ISSUE: The Clean goal isn't clean. Requires all dependencies to be available before deletion. Again, this is spot on. Maven2 lets each goal declare whether it needs the dependencies, and if so, which set (compile, runtime, or test). ISSUE: The majority of the functionality is undocumented and therefore, inaccessible at speed. With the exception of a _small_ number of _core_ tasks there is almost no documentation. I currently have all the plugins expanded in a subdirectory so that I have an online dictionary of jelly and java code and properties and goals. There is certainly no argument here, and was the topic of a recent blog entry on what might be wrong with Maven's documentation. Poor plugin documentation is a particular problem. I'm hopeful the documentation on the site is enough to get started and perform a reasonable percentage of the main tasks, but delving into advanced topics certainly requires a bit of digging and a post to the users list quite often. The artchitecture is also problematic to document as is: explaining the effects of a postGoal in a particular plugin in Maven1 is particularly challenging, as is comparing the differences between a goal, a jelly tag, or just a property. M2: It may or may not be addressed in M2 but it looks like the basic explanantions of lifecycle are there and it looks like it may be easier for me to help update the documentation built on top of that foundation. M2 is still in its alpha stages, so the documentation can be expected to be lean. We tend to write things as they become stable to avoid writing documentation that will change on experimental features. That stage is now coming to an end, and it is necessary to start fleshing out the main site, and set a good foundation for the reference documentation in the plugins, as well as common uses. In general, how Maven2 works is much more clearly defined and so easier to explain. Definitely yet to be proven whether a good job will be done here, but I think the Maven team have an idea of what is necessary. Ideology This is a tricky one. It would be silly to call them best practices if they weren't really best practices for the real world :) There are two commons causes here. One is a misunderstanding of what Maven's best practices really are. (I'll emphasise this isn't a response to the poster in question, but a general observation). This, again, comes back to a failing in our documentation. But quite often a question on the users list starting out thinking Maven is incapable of working with their project ends with the light bulb appearing above the head as it clicks. The same approach needs to be taken to builds as for coding: you can't start with a solution and try and fit the problem to it, yet it happens all the time. The other is probably integration with existing practices and tools. There are definitely some particular cases where limitations come up, and this is something that needs to be looked at case by case, and how we can better facilitate Maven and those tools working together. Maven does need to be inflexible in some ways to ensure everything works as designed, but this shouldn't really stop something from being done, as long as you are still looking at this from the POV of what you want done, not how to do it. With feedback on what those issues are, hopefull Maven will be a better default fit to more and more real world practices, but still retain the benefits it provides in giving known build patterns. ISSUE: The attaching of the test and install goals in such a way that they cannot be separated easily and cleanly AND The assumption that testing can occur immediately after compilation and installation... without a deployment. The way we have looked to resolve this in m2 is to improve the definition. We have unit tests which are run before packaging as they always have been, and we have what we are calling integration tests that are run after packaging and might require some deployment into the server as is given here. There were a few different reasons to complain about tests being intrinsically hooked into packaging in Maven1 - none of these reasons are valid, that I know of, in Maven2 as those issues have been resolved, without needing to actually prevent the tests being run. ISSUE: The one project, one artifact rule is a great rule for configuration management BUT it puts the onus of managing complexity on the developer rather than the tool. In this case, it really depends on what you are trying to achieve. In Maven, the project is a fundamental unit of work, and has a unique identifier that is used for dependencies as well as building and publishing the project. Now, in the case where you have a group of coupled artifacts, such that there is a "main one" and then a series of others that only exist because of the main one - Maven2 allows that. Examples are an ejb and its client library, a taglib JAR with its tld files, and so on. However, when it comes to building code where they might be separated then Maven's identification relies on being able to tell them apart, so they must be separate projects. These separate projects have their own list of dependencies, which is hopefully smaller given that there is a clear functionality separation, and this makes the final dependency management easier as the closer of a libraries dependencies is more concise and more likely to be correct straight up. To make maintaining these separate projects easier, Maven2 makes use of its multiple project support and better inheritence so that they can all still be worked with together, and keeps the project files quite small and simple to maintain. ISSUE: The versioning of artifacts is VERY much a "one size fits rarely" UNLESS you are in total control of all of your codebase. If there is any place where a specific artifact name doesn't work or cannot contain a version at deployment time (.NET strongly named assemblies come to mind - painfully) then there are rarely workarounds that don't take many hours to implement and integrate into the process. This is one of the more common misconceptions - that the version in the repository has to match the version used when you build. This should not be the case. It is important anything going into Maven's repository has a version so it can tell the difference between two different versions of the same artifact, and to make builds reproducible in the future when that artifact changes. However, no matter how you reference it and it is stored in the repository, this should not affect what it is called when the artifact is actually deployed. Classic cases are DLLs and EARs which rely on specific, unversioned names. ISSUE: Repositories assume WORA semantics for the artifacts. Building systems that require special dependencies for one platform but not for another is problematic. This has been taken care of in recent code in Maven2 which allows defining several build profiles within your project. They are cumulative, and let you specify different dependencies, configuration, and possibly different build processes for different environments. Typical triggers for applying certain profiles are the JDK being used, the target operating system, and whether it is a dev, test, QA or production build. ISSUE: Using multiple source paths in a single projecty is a headache. It has most often come up in the code generation arena but also when dealing with tools that require the source tree to be processed to be available AND cannot filter the source files to be processed by package name. This has been addressed in Maven2, again without comprimising the original encouragement to keep one source tree for one artifact. There is a generate-sources phase in the build process, where you can register any goals that do so, and plug the new directories into the project for compilation automatically. So, all in all there were some great questions here that have probably been answered in pieces over time, but that I'm encouraged to say we are making positive movement in Maven2 without losing sight of the biggest advantages of using Maven in the first place to get understandable, consistent builds based on proven patterns. If anyone has any further feedback on these, or other gripes you've never seen answered, or maybe even some positive encouragement, I'd be happy to take a stab at answering them.
[
Brett
]
18:22, Tuesday, 7 June 2005
The slides from my presentation to the Sydney JUG last week are now online. It's an overview of Maven's concepts, the new features of Maven 2.0, the dependency management tasks for Ant, and a short introduction to Continuum. https://sydneyjug.dev.java.net/files/documents/922/15554/sjug20050601.pdf
[
Brett
]
14:06, Friday, 20 May 2005
I'm still reading recently on a couple of blogs that Maven's documentation is not very good. This is pretty hard to hear, because I rewrote a significant chunk of it at the end of last year :) When I asked the question Why do you Hate Maven? last year, I got some good responses, it led to some changes, and I don't think most of those arguments hold any more. I'm hoping the same can happen with the Maven documentation. Do you think it isn't very good? Is it a preconceived idea from before it was redone? Or is there something seriously wrong with it now? Hard to find information, incomplete, out of date? Is it the main site, or the plugins? I'm the first to admit that we should have hit the ground running with Maven 2.0, but there has been a definite decision to focus on getting top quality docs together during the betas when all the features are stable. So if there are some lessons to be learned, now would be a great time to do it. And if you're going to say you are sick of square, red and grey - I'm with you. It's time for a change :)
[
Brett
]
10:41, Friday, 20 May 2005
The Beanshell support for Maven 2.0 landed earlier this week. All in all quite simple to get going (just a few hours, with no prior beanshell expertise), which bodes well for adding other scripting languages later as all the scaffolding is already there. The following script below is an example:
/**
* Beanshell mojo integration test.
* @goal it0020
*/
import org.apache.maven.plugin.Mojo;
import org.apache.maven.script.beanshell.BeanshellMojoAdapter;
import org.codehaus.plexus.util.FileUtils;
execute()
{
logger.info( "Executing it0020..." );
print( "info level?" );
FileUtils.fileWrite( outDir.getAbsolutePath() + "/out.txt",
"This is a Beanshell test" );
}
/**
* Output directory for files.
*
* @parameter expression="${project.build.directory}" type="java.io.File"
* @required
*/
setOutDir( file )
{
outDir = file;
}
return new BeanshellMojoAdapter( (Mojo) this, this.interpreter );
Each script file contains one "mojo" (a term originally coming from Maven POJO used to describe a single goal within a plugin). Several scripts can be included in a single plugin. The bshdoc comments in here are used to generate a plugin descriptor for Maven, rather than editing the XML by hand. The opening comment gives the description and goal name. The Any Finally, the return statement is required to make sure that Maven gets back the contents with the right interface so it can be executed. Currently, this all needs to be bundled up in a JAR like other plugins. I think that there would be a strong demand to edit on the fly for scripted plugins, so there may need to be development-only support for editing these in place or even into a running instace. It is quite similar to a Java plugin, so it may be that people still opt for those unless they are looking for a way to edit on the fly, have some existing code, or particularly want something loosely typed. Of course, you can also mix and match (eg include Java code, and call that from your beanshell script or vice-versa). Any thoughts? How would others like to see this work?
[
Brett
]
01:30, Saturday, 14 May 2005
The Apache Maven team are proud to announce the second alpha release of Maven 2.0. Download it from http://maven.apache.org/maven2/download.html. Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. This release includes 76 bug fixes and enhancements since the first release on 8 April. Maven 2.0 is a rewrite of the popular Maven application to achieve a number of goals, and to provide a stable basis to take it into the future. While it can be considered quite stable, and future versions are now expected to retain a high amount of backwards compatibility, this is still a technology preview, and not yet complete or considered ready for a production environment. The main new features in this release are: * Basic site generation This release is expected to be much more architecturally stable, making early adoption a possiblity. At this point, there are still only the core plugins available. We hope you enjoy using Maven! If you have any questions, please consult: * the web site: http://maven.apache.org/maven2/ For news and information, see: * Maven Blogs: http://www.mavenblogs.com/
[
Brett
]
16:33, Wednesday, 11 May 2005
Want to automatically update your Maven plugins to the latest versions available? Well, with the Maven 2.0 alpha 2 release coming this week, you can. The introduction of separate release timeframes for plugins some time back was a good move - for example, there have been several individual plugin updates made available since the last Maven 1.0.2 release in December, that users could download as soon as they were ready. But one of the common questions received is how to find out what the latest versions of all the plugins are. To solve this, if a version is not specified Maven will now check daily (by default) for a new version, and download it if it is newer. This uses the same mechanism as for snapshots, so you can also check for updates on demand, and set the update interval to always, daily, interval or never. We hope to allow greater configurability of these updates in the following June release. What about build reproducibility? Obviously this is a concern, and for that reason any plugins related to the build is specified directly in the POM, and you have the ability to specify what version of a plugin you are using. Regardless of what releases are known of, that one will always be used to build your project. This also assists when distributing your project to other people. No more telling them what new plugins they need to install to build! It all happens behind the scenes using the versions specified in the project. Another feature that makes plugin use in Maven 2.0 really easy that you might not have noticed is the transparent discovery. Maven 2.0 actually doesn't come with any plugins installed - yet goals like "idea:idea" will discover and download the IDEA plugin automatically. This relies on a little magic specific to Maven plugins currently, but is also scheduled to be expanded to all plugins in the June release. This really helps with usability in Maven 2.0... but if you've got any additional ideas about how you'd like to get plugin updates, feel free to drop us a line on the users list.
[
Brett
]
13:19, Monday, 2 May 2005
A common sticking point with people looking at Maven is the concept of using a remote web repository (even if they can mirror it in their local network) rather than storing the dependencies in CVS along with their source code. Usually when the arguments here take place, the benefits of putting them into an SCM (such as versioning, access control and auditing) are touted as reasons to store them with the project and live with the downsides of duplication, slower checkouts and updates, and reliance on SCM versioning that can leave you stranded when the files are later deployed and have nothing attached to them to indicate where they came from. It is only the latter problems that Maven attempts to solve by having a repository, so why not have the best of both worlds? I came to think of this when I saw the argument yet again on the users list and thought back to Given it was a Friday, I decided to spare a couple of hours and implemented it. It's pretty rough, but is a working prototype that makes Maven 1.1/2.0 downloads a checkout/update, and deploy is an add/commit. I see this would be useful for snapshot repositories, where you could use one filename instead of transforming the version, so getting the latest would literally be an svn update. I don't know if I'll come to use it myself, but if anyone is interested in testing and working on the functionality, please drop by the developer mailing lists. Working with the new components of Maven makes things like this really easy - in the couple of hours I was able to reuse the existing upload/download mechanism, and wrap it around our SCM handlers, so CVS and SVN could both be plugged in. With a little testing so could clearcase, starteam or perforce which we have alpha providers for, or anything else someone cared to work on (we have had interest in developing a VSS provider, for example). All of this is reusable against all of the Maven plugins, and any related Ant tasks.
[
Brett
]
16:22, Thursday, 14 April 2005
Snapshots were something that I believed to be widely misunderstood in Maven 1.0, and this was because they tended to have a dual purpose. I believe it is now a lot closer to the original intention. Snapshots as DependenciesFrom ther POM writer's perspective using a development library, a dependency always contains SNAPSHOT (eg 2.0-SNAPSHOT). However, snapshots are now deployed to the remote server as numbered versions, never as just the single filename. Repository metadata is used to store the timestamp and build number of the artifact, so that when the project resolves the SNAPSHOT reference, it gets the latest version. This version can later be stored in the POM to ensure a reproducible build, and a user can compare what version they have to the repository version to check if they are the same or not.A big complaint was the frequency of download checks on SNAPSHOTs which can be quite slow - it would happen multiple times within a single Maven instance in some occasions. Maven 2.0 has improved on that - not only is it only checked once per Maven execution, the default is to only check once a day. Of course, the interval is configurable from the POM, and there is also a command line option to force it to check every Maven run as well. This can make it much like CVS updates: just update your dependencies when you are ready to integrate with everyone else. Developing with SnapshotsFor those building the SNAPSHOTs, it is also simpler. You specify something like 2.0-SNAPSHOT in your<version/>
tag (meaning you are working towards 2.0). This need only be changed at the point of release. Installation and deployment takes care of putting it in the right place - there is only one install and one deploy goal, no need to remember to deploy it as a snapshot like in Maven 1.x. Also, it is saved as a single file in the local repository, so you can develop freely without cluttering up your disk (as local installs occur a lot more frequently than remote builds).
How it all worksVincent has spoken before about binary dependencies and how they are useful. Maven 2.0's snapshot handling should make this option a lot more palatable.There is still more work to do to be able to make different versions interact together, but we're well on the way. For those interested, the original design for SNAPSHOT handling in Maven 2.0 is available.
[
Brett
]
03:35, Saturday, 9 April 2005
The first Maven 2.0 Technology Preview release is now out. http://maven.apache.org/maven2/index.html We're looking forward to hearing your feedback, ideas, and (to a lesser extent :) bug reports. If you need help with the release, please consult the documentation frequently as we continue to update it, and subscribe to the users@maven.apache.org mailing list. For more information, please see http://maven.apache.org/maven2/about.html#get-help We welcome contributors to the Maven project - if you are interested in helping out, please see http://maven.apache.org/maven2/about.html#get-involved Thanks to everyone who has worked on this release! -- The Apache Maven Team
[
Brett
]
13:32, Thursday, 31 March 2005
I caught wind of a release of Ivy today, that lists among its new features a new repository for project metadata. Given that they are already using the Maven-developed repository for artifacts at Ibiblio, this struck me as pretty strange. Constructing metadata for over 7000 artifacts by hand is not something I'd want to take on, especially when most of it already exists in the Maven repository. And especially when you are just taking that metadata from the same source. Let's compare an example: Now, the Maven descriptor can describe everything the Ivy one does except for who wrote the ivy descriptor (which doesn't seem all that useful other than for some really basic auditing if it were to be automated). There is a limitation in the POM that some data exists (license) in a super POM not published - but that problem is going to be addressed in the next Maven release, and could certainly be worked around when the metadata is published. We also have metadata for projects like Hibernate that are not built using Maven - it is a requirement of upload to ibiblio. The main difference seems to be the listing of the location of repositories that house the artifact. This seems a bit short sighted... do you add a new repository entry to every descriptor in the repository every time you add a mirror? As a Maven developer, I would have liked to see the Ivy developers approach the Maven project about this and offer to help beef up our metadata, and use it rather than creating a whole new repository. As a user, I'd prefer to get access to new dependencies as soon as they are released or uploaded, rather than having to submit two different requests (one to ibiblio and one to ivyrep). Update: Note that I'm not saying anything about Ivy or Maven's ability to do transitive dependencies - I'm aware that Ivy is doing this and the current release of Maven is not. However there is no reason - that I can see - that Ivy cannot use the existing metadata to implement that feature.
[
Brett
]
17:18, Tuesday, 15 March 2005
The new Maven web site has now gone live at http://maven.apache.org/. After pointing users at the staging site for some time now, this was a long overdue overhaul that hopefully makes documentation easier to find, and more complete. There is still more to come, but all feedback and contributions are welcome. Feel free to comment here, on the Maven Users List, or add patches to JIRA. Sorry - same old colour scheme this time around, but hopefully there'll be something new real soon now.
[
Brett
]
14:04, Saturday, 11 December 2004
Ever seen a really wacky bug that you just couldn't explain? I had one of those panics earlier this week. After releasing Maven 1.0.2 with just a few small fixes discovered in the month since the last release, I was fairly confident that we could now close that branch. To the point that I deleted my branch checkout from my laptop, with CVS HEAD being the code I'd work on permanently. Then after arriving at work the next day, I saw a number of complaints of a regression that caused Maven startup to be very slow. This being in an area of code that hadn't changed. What had gone wrong? Luckily, it turned out that it just went away some hours later. Why? Well, I built the distributions locally, then uploaded them from here. The code in question was checking timestamps - if an installed plugin was newer, unpack it locally and set the timestamp to "now". But I'm at +11 GMT, though apparently .zip and .exe don't record that - just the time. So the rest of the world hadn't caught up. I found it funny in the end. Next time I'll have to build the releases 20 hours in advance :)
[
Brett
]
23:20, Tuesday, 7 December 2004
Ok, so the Maven 1.0.2 release is out, most importantly fixing the property inheritence regression that found its way into Maven 1.0.1 (when you roll up 4 months of bugfixes in one release, I guess you're asking for that to happen :) A quiet release, but that is now the stable version that should persist for the next couple of months. Unless something goes horribly wrong, this will be the last Maven 1.0.x release. Next up: Maven 1.1, which has some nice features coming while building on the current core so that projects will continue to build unmodified (with a few small, documented, exceptions). There will be a lot of changes under the hood too.
[
Brett
]
12:55, Friday, 16 July 2004
Here's something I wrote up a while back for work and have touched up recently that discusses the structure of Maven 1.x. While you wouldn't need it as a general user (although troubleshooting is helpful), its aimed more at someone digging seriously into plugin writing. Definitely rough around the edges, but I hope it helps!
[
Brett
]
01:39, Wednesday, 14 July 2004
The Apache Maven team is pleased to announce the release of Maven 1.0. http://maven.apache.org/start/download.html Maven is a project management and project comprehension tool. Maven is based on the concept of a project object model: builds, documentation creation, site publication, and distribution publication are all controlled from the project object model. Maven also provides tools to create source metrics, change logs based directly on source repository, and source cross-references. New Features * Bundle the Jelly XML tag library for build and for plugin's convenience Fixed bugs * Fix property inheritence under some circumstances Issue: MAVEN-1296. Thanks to Eric Lapierre. Plugin Highlights The latest plugin releases are also included, with bug fixes and some new features. We hope you enjoy using Maven! If you have any questions, please consult: * the FAQ: http://maven.apache.org/faq.html For news and information, see: * Maven Blogs: http://www.mavenblogs.com/ - The Apache Maven Team
[
Brett
]
01:48, Tuesday, 29 June 2004
Maven 1.0 RC4 has been released. Since its been a while since RC3, we snuck in a few useful features and bugfixes. This really is the final release candidate - a couple of bugfixes will be done but 1.0 should follow shortly. Here are the release notes... Maven 1.0 RC4 ReleasedThe Apache Maven team is pleased to announce the release of Maven 1.0 RC4. http://maven.apache.org/start/download.html Maven is a project management and project comprehension tool. Maven is based on the concept of a project object model: builds, documentation creation, site publication, and distribution publication are all controlled from the project Maven 1.0 RC4 is the final release candidate for Maven 1.0 (and this time we New Features* Support NTLM authentication on a remote repository. Issue: MAVEN-1332. Fixed bugs* Sort all installed plugins. Issue: MAVEN-1320. Thanks to Miguel Griffa. Changes* Set maven.plugin.user.dir to ${maven.home.local}/plugins by default, move maven.plugin.unpacked.dir to ${maven.home.local}/cache. Plugin Highlights* The deploy plugin has been merged into the artifact plugin. The artifact plugin is used for all artifact deployments now, and supports the old-style deployment transparently. We hope you enjoy using Maven! If you have any questions, please consult: For news and information, see: - The Apache Maven Team
[
Brett
]
12:13, Monday, 24 May 2004
I was reading dion's response to Howard's Maven post, and saw a comment there that said:
Despite all the complaints about Jelly (most of which come from the Maven developers :), countless people have tried. I don't quite understand that - you shouldn't have to learn Jelly to use Maven. Maybe this is a problem with documentation and something I'm trying to fix right now. I've said previously that JAM looks like a good idea - using what Maven is really about to generate Ant that everyone else understands until Maven can handle some of the things that get tricky (in particular multiple source directory handling is inconsistent in Maven 1.x).
This is good to see. I haven't tried JAM out, but if it does what you need it to do, then I'd say go for it. It's a shame that Maven has come out being perceived as a glue for a bunch of Ant tasks. It's a fair perception, because as I said in my last post, when you give users the option of producing reusable build fragments, it tends to happen real fast, so Maven has a lot of plugins out there. I certainly look forward to a stronger adoption of Maven's concepts of project information structure, and hope that Maven can continue to mature down its current path where it becomes the best tool to manage this information and build with it.
[
Brett
]
13:18, Saturday, 22 May 2004
Howard says he is moving away from Maven, and gives some fair reasons for it, and I thought it was appropriate to respond. Howard starts out by stating what he likes about Maven: For dependencies, a good solution in Ant is later given. I think Howard would agree with me here - if you are using Maven just so you can grab dependencies easily and intend to script the build yourself, then you are wasting your time and should stick with Ant :) For the site - Howard doesn't propose an alternative. I assume he will continue to us Maven to generate that. There is a claim that the documentation has a "large" number of bugs, of which Howard points out just two. The reality of this is that many of these are problems with Jelly itself. As a result, for a long time we have been planning a rewrite of the xdoc plugin that will not use Jelly. This will land shortly after Maven 1.0 is released. While discussing bugs, I'll admit Maven has a huge QA issue. We rely a lot on users to report bugs and submit patches across the areas that we can't cover. I think the approach that has been taken here is sensible. No project is ever going to be bug free, so we focus on fixing the things that can be done This is all just a result of growing too fast, and something that the team are endeavouring to get under control, by getting back to a more simplistic model of what Maven is, and start emphasising that the plugins are somewhat separate to that. Moving on, Howards points on simplicity and consistency are well taken. Funnily enough all the issues he lists here look something like the documentation naviagation that has just been proposed as it is going under a rewrite. Effeciency: Maven has made huge strides in this area, but we have accepted that as long as Jelly is in the core there is going to be a problem here, especially when generating the site. Feedback: I hate NPE's too. I hate it when you get it in Maven deep inside one of the other libraries it is using like velocity. And it's worse for a user. But Maven then explains to the user how to file a bug report, and these issues usually get addressed immediately. We still have work to do here, but I'm not sure what more can be done immediately to help. Howard's Ant example that follows shows just how Ant should be used. I have a couple of issues with the perception here that it is much briefer than Maven: JAM sounds like a better way to do (2) above as it is reusable, but I think if it were as popular as Maven, it would probably suffer the same problems. Anyway, I hope this brings some clarity. Essentially I agree with what Howard has said to some extent, and as far as the issues with Maven go, they have long been recognised and I am happy to say the current Maven roadmap addresses it all. I look forward to seeing it come to fruition.
[
Brett
]
02:28, Friday, 21 May 2004
The Maven team is pleased to announce the Maven 1.0-rc3 release! http://maven.apache.org/start/download.html Maven 1.0 RC3 is the final release candidate for Maven 1.0. Maven is a project management and project comprehension tool. Maven is based Changes in this version include: New Features: o Introduce a backwards compatibility option maven.property.inheritance, Fixed bugs: o Parent project properties are now correctly loaded from |