Archive

Archive for November, 2008

The next generation of build tools for Eclipse plugins and RCP applications

Build automation has always been considered painful, especially for complex builds. So, it seemed like a good idea to change that and come up with a solution that would be easy to use. I want to introduce you to Tycho, the next generation of Maven plugins and tools for building Eclipse plugins and RCP applications.

Read more…

m2eclipse , ,

Nine Reasons to Use a Repository Manager: Sonatype Nexus

I’m surprised at the number of organizations out there that use a tool that depends on the Maven Repository, but haven’t yet adopted a repository manager. It could be that no one has made the argument for it. No one has stood up on a platform and called people’s attention to the benefits of using a repository manager. The responses I’ve always heard from organizations that don’t use a Maven repository manager are along the lines of: “We don’t need to get that complex…,” or “Central’s fine, we don’t need to host the entire repository locally…”

Needless to say, there are a few misconceptions floating around about what a good Maven repository “is”. First, it isn’t complex to set up. It will take you a few minutes to download and install Nexus, and we’ve gone out of our way to make it as easy and non-invasive as possible. Second, a repository manager which can cache a remote repository doesn’t cache the entire thing. A good repository manager caches only what you use on an as-needed basis. Here are nine more reasons for people who might be on the fence about a repository manager.

Read more…

Nexus ,

A visual history of Maven 2

This is a visual follow on to my previous post about the Maven version shuffling. As they say, a picture is worth a thousand words:

Click to see full size.

Need I say more?

Maven

Deploying 3rd-party JARs to Maven Repositories with Sonatype Nexus

A common issue in Maven development is the incorporation of 3rd-party JARs into a repository. If you are working with a proprietary database like Oracle, or if you have a vendor that is supplying you with some proprietary 3rd-party JAR that needs to be incorporated into your build, what do you do? How do you get this JAR into a Maven repository that your build can access? This is a common question when people want to start publishing artifacts in a custom repository, and most Maven users might not be aware that repository managers like Sonatype Nexus provide an easy way to deploy these floating, one-off JAR files as well as a way to deploy artifacts from your own build. Read more…

How-To ,

What is Mercury?

Mercury is a serious attempt to:

  • Decouple major Maven components, making them available as stand-alone building blocks rather then having Maven as as one big monolith, not usable outside of its environment.
  • Artifact - clearly separate an Artifact from its metadata.
  • Repository - convert a repository into active component. It used to give back just pathOf(), now it accepts GAV collections and gives back either metadata or full blown Artifacts.
  • Transport - an API in development.
  • DependencyTreeBuilder main API for dependency graph creation and conflict resolution.
  • Decouple container, so that these components are just plain pojos.
  • Introduce Jetty-based HTTP/HTTPS and WebDAV transactional transport layer.
  • Asynchronous downloads and uploads. One of the few successful usages of Java NIO in OSS.
  • Transactional operations - all-or-nothing for file sets.
  • Move integrity control into transport layer, upper level components should not care about these details.
  • Abstract out metadata cache, provide at least one implementation there.
  • Integrate these changes back to Maven 3.x to make it even better platform than it is right now (if it is possible to be better :) )

Currently Mercury can already be used for accessing repositories, and conflict resolution is under testing.

Maven, Mercury ,

Searching with the Sonatype Nexus REST API: Python

This post is a follow-up to the two previous posts on Ruby and Groovy which provided some sample Ruby and Groovy scripts that can be used to list repositories and search for artifacts in a Nexus instance. Today, we’re going to see how to complete the same tasks using the Python scripting language.

The following scripts are in Python and they can be invoked from the command line using python (or jython). For example, if you want to run the quick-search.py script, you would run “jython quick-search.py activemq” to search for artfiacts that contain the string “activemq”. I tested these Python scripts using the latest Jython 2.5b0 distribution with version 1.2.6 of the jython-elementtree project at Google Code.  Go to the Jython page, download Jython 2.5b0, and then following the instructions on the jython-elementtree project list to check out the ElementTree library from source control and install it in your own Jython installation.  These scripts don’t require Jython, the could run in any Python 2.5 implementation. Read more…

How-To , , ,

Mercury event framework design notes

For a long time I’ve been perplexed by what is going inside Maven, what’s there under the hood. Later I started learning the code and it gave me some perspective. Then I wrote a chunk of code - Mercury, but the exact understanding of what is happening inside is still hard to grasp: the code base is rather big and logic rather complex for a human mind to follow all the details.

All that, plus the necessity to provide tool integration, led to the idea to introduce an event framework into Mercury. All major processing object implement EventGenerator interface, that allows client code to register MercuryEventListener implementations and unRegister them as well. Read more…

Maven, Mercury

Searching with the Sonatype Nexus REST API: Groovy

This post is a follow-up to the previous post which provided some sample Ruby scripts that can be used to list repositories and search for artifacts in a Nexus instance.   Today, we’re going to see how to complete the same tasks using the Groovy scripting language.   The Groovy scripting language is a scripting language that has gained popularity due to the ease of integration with the JVM.

The following scripts are in Groovy and they can be invoked from the command line using groovy.  For example, if you want to run the QuickSearch.groovy script, you would run “groovy QuickSearch.groovy activemq” to search for artfiacts that contain the string “activemq”.   I tested these Ruby scripts using the latest Groovy 1.5.7 distribution.  Go to the Groovy page, click on Download, and download the Cross-platform Installer, this will install Groovy on your machine and also tell you what you’ll need to add to your PATH. Read more…

How-To , , ,

Announcing Nexus Maven Repository Manager Pro Beta

The Nexus team has been hard at work producing a new plugin model for Nexus that allows us to create some new and exciting Professional features on top of the OSS core. The first release of Nexus Pro will contain 4 new plugins:

Staging and Promotion

Staging and promotion is designed to allow projects to be deployed to independent, temporary repositories. The contents of this repository is then evaluated and eventually either promoted or deleted. When promoted, it is merged in with a target repository and all appropriate metadata is updated. This implementation of Staging and Promotion requires no changes on the Maven side other than updating your distributionManagementUrl. Read more…

Maven, News, Nexus

Searching with the Sonatype Nexus REST API: Ruby

When you search for artifacts using http://repository.sonatype.org, the browser is querying the Nexus repository using a REST API.   In this post, I’m going to show you some simple Ruby scripts which you can use to search the Maven repository without loading up the Nexus web interface.  You might find these scripts more convenient and more customizable, and you should feel free to copy and modify them for your own use.

The following scripts are in Ruby and they use the REXML XML processor and the Net:HTTP library.  Both of these libraries are available in the Ruby standard library.   I tested these Ruby scripts using the latest JRuby release.  If you want to try these scripts out on your own, they will run in any standard Ruby interpreter without requiring any extra RubyGems. Read more…

How-To , ,