#!/usr/bin/ruby require 'optparse' $group = nil $artifact = nil $package = nil $archetypeVersion = nil $version = "1.0.0-SNAPSHOT" $offline = false $opts = OptionParser.new do |opts| opts.banner = "Usage: new-project.rb [options]" opts.on("-g", "--group GROUP", "The group id for the new project") do |value| $group = value end opts.on("-a", "--artifact ARTIFACT", "The artifact for the new project") do |value| $artifact = value end opts.on("-p", "--package PACKAGE", "The root package for source code in the new project") do |value| $package = value end opts.on("-v", "--version VERSION", "The version number of the new project") do |value| $version = value end opts.on("-o", "--offline", "Execute Maven in offline mode") { $offline = true } opts.on("-V", "--archetype-version VERSION", "Version of the Tapestry quickstart archetype") do |value| $archetypeVersion = value end opts.on("-h", "--help", "Help for this command") do puts opts exit end end def fail(message) puts "Error: #{message}" puts $opts exit end begin $opts.parse! rescue OptionParser::InvalidOption fail $! end fail "Unexpected command line argument" if ARGV.length > 0 fail "Must specify group" unless $group fail "Must specify artifact" unless $artifact $package = $package || "#$group.#$artifact" command = ["mvn"] command << "-o" if $offline command << [ "archetype:create", "-DarchetypeGroupId=org.apache.tapestry", "-DarchetypeArtifactId=quickstart", "-DgroupId=#$group", "-DartifactId=#$artifact", "-DartifactVersion=#$version", "-DpackageName=#$package"] if $archetypeVersion command << "-DarchetypeVersion=#$archetypeVersion" end command = command.join ' ' exec command