maven-tools 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README.md +1 -0
- data/lib/maven-tools.rb +1 -0
- data/lib/maven-tools.rb~ +1 -0
- data/lib/maven/jarfile.rb~ +77 -0
- data/lib/maven/maven_util.rb~ +56 -0
- data/lib/maven/model/dependencies.rb +230 -0
- data/lib/maven/model/dependencies.rb~ +247 -0
- data/lib/maven/model/model.rb +540 -0
- data/lib/maven/model/model.rb~ +528 -0
- data/lib/maven/model/model_utils.rb~ +832 -0
- data/lib/maven/model/utils.rb +343 -0
- data/lib/maven/model/utils.rb~ +322 -0
- data/lib/maven/tools/coordinate.rb +84 -0
- data/lib/maven/tools/coordinate.rb~ +81 -0
- data/lib/maven/tools/execute_in_phase.rb +9 -0
- data/lib/maven/tools/gem_project.rb +503 -0
- data/lib/maven/tools/gem_project.rb~ +498 -0
- data/lib/maven/tools/gemfile_lock.rb +70 -0
- data/lib/maven/tools/gemfile_lock.rb~ +67 -0
- data/lib/maven/tools/jarfile.rb +95 -0
- data/lib/maven/tools/jarfile.rb~ +79 -0
- data/lib/maven/tools/pom_generator.rb +63 -0
- data/lib/maven/tools/rails_project.rb +183 -0
- data/lib/maven/tools/version.rb +5 -0
- data/lib/maven/tools/versions.rb +15 -0
- data/lib/maven/tools/versions.rb~ +13 -0
- data/lib/maven_tools.rb +1 -0
- data/lib/maven_tools.rb~ +1 -0
- data/spec/coordinate_spec.rb +47 -0
- data/spec/jarfile_spec.rb +124 -0
- metadata +118 -0
| @@ -0,0 +1,70 @@ | |
| 1 | 
            +
            module Maven
         | 
| 2 | 
            +
              module Tools
         | 
| 3 | 
            +
                class GemfileLock < Hash
         | 
| 4 | 
            +
                 
         | 
| 5 | 
            +
                  class Dependency
         | 
| 6 | 
            +
                    attr_accessor :name, :version, :dependencies
         | 
| 7 | 
            +
                    def initialize(line, deps = {})
         | 
| 8 | 
            +
                      @name = line.sub(/\ .*/,'')
         | 
| 9 | 
            +
                      @version =  line.sub(/.*\(/, '').sub(/\).*/, '').sub(/-java$/, '')
         | 
| 10 | 
            +
                      @dependencies = deps
         | 
| 11 | 
            +
                    end
         | 
| 12 | 
            +
                    
         | 
| 13 | 
            +
                    def add(line)
         | 
| 14 | 
            +
                      dependencies[line.sub(/\ .*/,'')] = line.sub(/.*\(/, '').sub(/\).*/, '')
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def initialize(file)
         | 
| 19 | 
            +
                    super()
         | 
| 20 | 
            +
                    current = nil
         | 
| 21 | 
            +
                    f = file.is_a?(File) ? file.path: file
         | 
| 22 | 
            +
                    if File.exists? f
         | 
| 23 | 
            +
                      File.readlines(f).each do |line|
         | 
| 24 | 
            +
                        if line =~ /^    [^ ]/
         | 
| 25 | 
            +
                          line.strip!
         | 
| 26 | 
            +
                          current = Dependency.new(line)
         | 
| 27 | 
            +
                          self[current.name] = current
         | 
| 28 | 
            +
                        elsif line =~ /^      [^ ]/
         | 
| 29 | 
            +
                          line.strip!
         | 
| 30 | 
            +
                          current.add(line) if current
         | 
| 31 | 
            +
                        end
         | 
| 32 | 
            +
                      end
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  def recurse(result, dep)
         | 
| 37 | 
            +
                    result[dep] = self[dep].version if self[dep] && !result.key?(dep)
         | 
| 38 | 
            +
                    if d = self[dep]
         | 
| 39 | 
            +
                      d.dependencies.each do |name, version|
         | 
| 40 | 
            +
                        unless result.key? name
         | 
| 41 | 
            +
                          if name != 'bundler'
         | 
| 42 | 
            +
                            result[name] = self[name].nil?? version : self[name].version
         | 
| 43 | 
            +
                            recurse(result, name)
         | 
| 44 | 
            +
                          end
         | 
| 45 | 
            +
                        end
         | 
| 46 | 
            +
                      end
         | 
| 47 | 
            +
                    end
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  def dependency_hull(deps = [])
         | 
| 51 | 
            +
                    deps = deps.is_a?(Array) ? deps : [deps]
         | 
| 52 | 
            +
                    result = {}
         | 
| 53 | 
            +
                    deps.each do |dep|
         | 
| 54 | 
            +
                      recurse(result, dep)
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
                    result
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  def hull
         | 
| 60 | 
            +
                    dependency_hull(keys)
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
            end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            if $0 == __FILE__
         | 
| 67 | 
            +
              lockfile = Maven::Tools::GemfileLock.new(File.new(ARGV[0] || 'Gemfile.lock'))
         | 
| 68 | 
            +
              p lockfile
         | 
| 69 | 
            +
              p lockfile.dependency_hull("rails")
         | 
| 70 | 
            +
            end
         | 
| @@ -0,0 +1,67 @@ | |
| 1 | 
            +
            module Maven
         | 
| 2 | 
            +
              module Tools
         | 
| 3 | 
            +
                class GemfileLock < Hash
         | 
| 4 | 
            +
                 
         | 
| 5 | 
            +
                  class Dependency
         | 
| 6 | 
            +
                    attr_accessor :name, :version, :dependencies
         | 
| 7 | 
            +
                    def initialize(line, deps = {})
         | 
| 8 | 
            +
                      @name = line.sub(/\ .*/,'')
         | 
| 9 | 
            +
                      @version =  line.sub(/.*\(/, '').sub(/\).*/, '').sub(/-java$/, '')
         | 
| 10 | 
            +
                      @dependencies = deps
         | 
| 11 | 
            +
                    end
         | 
| 12 | 
            +
                    
         | 
| 13 | 
            +
                    def add(line)
         | 
| 14 | 
            +
                      dependencies[line.sub(/\ .*/,'')] = line.sub(/.*\(/, '').sub(/\).*/, '')
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                
         | 
| 18 | 
            +
                  def initialize(file)
         | 
| 19 | 
            +
                    current = nil
         | 
| 20 | 
            +
                    f = file.is_a?(File) ? file.path: file
         | 
| 21 | 
            +
                    if File.exists? f
         | 
| 22 | 
            +
                      File.readlines(f).each do |line|
         | 
| 23 | 
            +
                        if line =~ /^    [^ ]/
         | 
| 24 | 
            +
                          line.strip!
         | 
| 25 | 
            +
                          current = Dependency.new(line)
         | 
| 26 | 
            +
                          self[current.name] = current
         | 
| 27 | 
            +
                        elsif line =~ /^      [^ ]/
         | 
| 28 | 
            +
                          line.strip!
         | 
| 29 | 
            +
                          current.add(line) if current
         | 
| 30 | 
            +
                        end
         | 
| 31 | 
            +
                      end
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  def recurse(result, dep)
         | 
| 36 | 
            +
                    result[dep] = self[dep].version if self[dep] && !result.key?(dep)
         | 
| 37 | 
            +
                    if d = self[dep]
         | 
| 38 | 
            +
                      d.dependencies.each do |name, version|
         | 
| 39 | 
            +
                        unless result.key? name
         | 
| 40 | 
            +
                          result[name] = self[name].nil?? version : self[name].version
         | 
| 41 | 
            +
                          recurse(result, name)
         | 
| 42 | 
            +
                        end
         | 
| 43 | 
            +
                      end
         | 
| 44 | 
            +
                    end
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  def dependency_hull(deps = [])
         | 
| 48 | 
            +
                    deps = deps.is_a?(Array) ? deps : [deps]
         | 
| 49 | 
            +
                    result = {}
         | 
| 50 | 
            +
                    deps.each do |dep|
         | 
| 51 | 
            +
                      recurse(result, dep)
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
                    result
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  def hull
         | 
| 57 | 
            +
                    dependency_hull(keys)
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
            end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
            if $0 == __FILE__
         | 
| 64 | 
            +
              lockfile = Maven::Tools::GemfileLock.new(File.new(ARGV[0] || 'Gemfile.lock'))
         | 
| 65 | 
            +
              p lockfile
         | 
| 66 | 
            +
              p lockfile.dependency_hull("rails")
         | 
| 67 | 
            +
            end
         | 
| @@ -0,0 +1,95 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), 'coordinate.rb')
         | 
| 2 | 
            +
            module Maven
         | 
| 3 | 
            +
              module Tools
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                class Jarfile
         | 
| 6 | 
            +
                  include Coordinate
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def initialize(file = 'Jarfile')
         | 
| 9 | 
            +
                    @file = file
         | 
| 10 | 
            +
                    @lockfile = file + ".lock"
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def mtime
         | 
| 14 | 
            +
                    File.mtime(@file)
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  def exists?
         | 
| 18 | 
            +
                    File.exists?(@file)
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def mtime_lock
         | 
| 22 | 
            +
                    File.mtime(@lockfile)
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def exists_lock?
         | 
| 26 | 
            +
                    File.exists?(@lockfile)
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def load_lockfile
         | 
| 30 | 
            +
                    _locked = []
         | 
| 31 | 
            +
                    if exists_lock?
         | 
| 32 | 
            +
                      File.read(@lockfile).each_line do |line|
         | 
| 33 | 
            +
                        line.strip!
         | 
| 34 | 
            +
                        if line.size > 0 && !(line =~ /^\s*#/)
         | 
| 35 | 
            +
                          _locked << line
         | 
| 36 | 
            +
                        end
         | 
| 37 | 
            +
                      end
         | 
| 38 | 
            +
                    end
         | 
| 39 | 
            +
                    _locked
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def locked
         | 
| 43 | 
            +
                    @locked ||= load_lockfile
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  def locked?(coordinate)
         | 
| 47 | 
            +
                    coord = coordinate.sub(/^([^:]+:[^:]+):.+/) { $1 }
         | 
| 48 | 
            +
                    locked.detect { |l| l.sub(/^([^:]+:[^:]+):.+/) { $1 } == coord } != nil
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  def populate_unlocked(container)
         | 
| 52 | 
            +
                    if File.exists?(@file)
         | 
| 53 | 
            +
                      File.read(@file).each_line do |line| 
         | 
| 54 | 
            +
                        if coord = to_coordinate(line)
         | 
| 55 | 
            +
                          unless locked?(coord)
         | 
| 56 | 
            +
                            container.add_artifact(coord)
         | 
| 57 | 
            +
                          end
         | 
| 58 | 
            +
                        elsif line =~ /^\s*(repository|source)\s/
         | 
| 59 | 
            +
                          # allow `source :name, "http://url"`
         | 
| 60 | 
            +
                          # allow `source "name", "http://url"`
         | 
| 61 | 
            +
                          # allow `source "http://url"`
         | 
| 62 | 
            +
                          # also allow `repository` instead of `source`
         | 
| 63 | 
            +
                          name, url = line.sub(/.*(repository|source)\s+/, '').split(/,/)
         | 
| 64 | 
            +
                          url = name unless url
         | 
| 65 | 
            +
                          # remove whitespace and trailing/leading ' or "
         | 
| 66 | 
            +
                          name.strip!
         | 
| 67 | 
            +
                          name.gsub!(/^:/, '')
         | 
| 68 | 
            +
                          name.gsub!(/^['"]|['"]$/,'')
         | 
| 69 | 
            +
                          url.strip!
         | 
| 70 | 
            +
                          url.gsub!(/^['"]|['"]$/,'')
         | 
| 71 | 
            +
                          container.add_repository(name, url)
         | 
| 72 | 
            +
                        end
         | 
| 73 | 
            +
                      end
         | 
| 74 | 
            +
                    end
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                  def populate_locked(container)
         | 
| 78 | 
            +
                    locked.each { |l| container.add_artifact(l) }
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  def generate_lockfile(dependency_coordinates)
         | 
| 82 | 
            +
                    if dependency_coordinates.empty?
         | 
| 83 | 
            +
                      FileUtils.rm_f(@lockfile) if exists_lock?
         | 
| 84 | 
            +
                    else
         | 
| 85 | 
            +
                      File.open(@lockfile, 'w') do |f|
         | 
| 86 | 
            +
                        dependency_coordinates.each do |d|
         | 
| 87 | 
            +
                          f.puts d.to_s
         | 
| 88 | 
            +
                        end
         | 
| 89 | 
            +
                      end
         | 
| 90 | 
            +
                    end
         | 
| 91 | 
            +
                  end
         | 
| 92 | 
            +
                end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
            end
         | 
| @@ -0,0 +1,79 @@ | |
| 1 | 
            +
            require 'maven/tools/coordinate'
         | 
| 2 | 
            +
            module Maven
         | 
| 3 | 
            +
              module Tools
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                class Jarfile
         | 
| 6 | 
            +
                  include Coordinate
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def initialize(file = 'Jarfile')
         | 
| 9 | 
            +
                    @file = file
         | 
| 10 | 
            +
                    @lockfile = file + ".lock"
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def mtime
         | 
| 14 | 
            +
                    File.mtime(@file)
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  def exists?
         | 
| 18 | 
            +
                    File.exists?(@file)
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def mtime_lock
         | 
| 22 | 
            +
                    File.mtime(@lockfile)
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def exists_lock?
         | 
| 26 | 
            +
                    File.exists?(@lockfile)
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def load_lockfile
         | 
| 30 | 
            +
                    _locked = []
         | 
| 31 | 
            +
                    if exists_lock?
         | 
| 32 | 
            +
                      File.read(@lockfile).each_line do |line|
         | 
| 33 | 
            +
                        line.strip!
         | 
| 34 | 
            +
                        if line.size > 0 && !(line =~ /^\s*#/)
         | 
| 35 | 
            +
                          _locked << line
         | 
| 36 | 
            +
                        end
         | 
| 37 | 
            +
                      end
         | 
| 38 | 
            +
                    end
         | 
| 39 | 
            +
                    _locked
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def locked
         | 
| 43 | 
            +
                    @locked ||= load_lockfile
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  def locked?(coordinate)
         | 
| 47 | 
            +
                    coord = coordinate.sub(/^([^:]+:[^:]+):.+/) { $1 }
         | 
| 48 | 
            +
                    locked.detect { |l| l.sub(/^([^:]+:[^:]+):.+/) { $1 } == coord } != nil
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  def populate_unlocked(aether)
         | 
| 52 | 
            +
                    File.read(@file).each_line do |line| 
         | 
| 53 | 
            +
                      if coord = to_coordinate(line)
         | 
| 54 | 
            +
                        unless locked?(coord)
         | 
| 55 | 
            +
                          aether.add_artifact(coord)
         | 
| 56 | 
            +
                        end
         | 
| 57 | 
            +
                      elsif line =~ /^\s*(repository|source)\s/
         | 
| 58 | 
            +
                        name, url = line.sub(/.*(repository|source)\s+/, '').gsub(/['":]/,'').split(/,/)
         | 
| 59 | 
            +
                        url = name unless url
         | 
| 60 | 
            +
                        aether.add_repository(name, url)
         | 
| 61 | 
            +
                      end
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                  def populate_locked(aether)
         | 
| 66 | 
            +
                    locked.each { |l| aether.add_artifact(l) }
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  def generate_lockfile(dependency_coordinates)
         | 
| 70 | 
            +
                    File.open(@lockfile, 'w') do |f|
         | 
| 71 | 
            +
                      dependency_coordinates.each do |d|
         | 
| 72 | 
            +
                        f.puts d.to_s
         | 
| 73 | 
            +
                      end
         | 
| 74 | 
            +
                    end
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              end
         | 
| 79 | 
            +
            end
         | 
| @@ -0,0 +1,63 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), 'rails_project.rb')
         | 
| 2 | 
            +
            module Maven
         | 
| 3 | 
            +
              module Tools
         | 
| 4 | 
            +
                class PomGenerator
         | 
| 5 | 
            +
                  def read_rails(filename, plugin_version = nil, jruby_version = nil)
         | 
| 6 | 
            +
                    proj = Maven::Tools::RailsProject.new
         | 
| 7 | 
            +
                    proj.load_gemfile(filename.to_s)
         | 
| 8 | 
            +
                    proj.load_jarfile(File.join(File.dirname(filename.to_s), 'Jarfile'))
         | 
| 9 | 
            +
                    proj.load_mavenfile(File.join(File.dirname(filename.to_s), 'Mavenfile'))
         | 
| 10 | 
            +
                    proj.add_defaults(versions(plugin_version, jruby_version))
         | 
| 11 | 
            +
                    proj.to_xml
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  # the dummy allows to have all three methods the same argument list
         | 
| 15 | 
            +
                  def read_gemfile(filename, plugin_version = nil, dummy = nil)
         | 
| 16 | 
            +
                    dir = File.dirname(filename)
         | 
| 17 | 
            +
                    proj = 
         | 
| 18 | 
            +
                      if File.exists? File.join( dir, 'config', 'application.rb' )
         | 
| 19 | 
            +
                        Maven::Tools::RailsProject.new
         | 
| 20 | 
            +
                      else
         | 
| 21 | 
            +
                        Maven::Tools::GemProject.new
         | 
| 22 | 
            +
                      end
         | 
| 23 | 
            +
                    proj.load_gemfile(filename.to_s)
         | 
| 24 | 
            +
                    proj.load_jarfile(File.join(File.dirname(filename.to_s), 'Jarfile'))
         | 
| 25 | 
            +
                    proj.load_mavenfile(File.join(File.dirname(filename.to_s), 'Mavenfile'))
         | 
| 26 | 
            +
                    proj.add_defaults(versions(plugin_version, nil))
         | 
| 27 | 
            +
                    proj.to_xml
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  # the dummy allows to have all three methods the same argument list
         | 
| 31 | 
            +
                  def read_gemspec(filename, plugin_version = nil, dummy = nil)
         | 
| 32 | 
            +
                    proj = Maven::Tools::GemProject.new
         | 
| 33 | 
            +
                    proj.load_gemspec(filename.to_s)
         | 
| 34 | 
            +
                    proj.load_jarfile(File.join(File.dirname(filename.to_s), 'Jarfile'))
         | 
| 35 | 
            +
                    proj.load_mavenfile(File.join(File.dirname(filename.to_s), 'Mavenfile'))
         | 
| 36 | 
            +
                    proj.add_defaults(versions(plugin_version, nil))
         | 
| 37 | 
            +
                    proj.to_xml
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  private
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def versions(plugin_version, jruby_version)
         | 
| 43 | 
            +
                    result = {}
         | 
| 44 | 
            +
                    result[:jruby_plugins] = plugin_version if plugin_version
         | 
| 45 | 
            +
                    result[:jruby_version] = jruby_version if jruby_version
         | 
| 46 | 
            +
                    result
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
            end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            generator = Maven::Tools::PomGenerator.new
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            case ARGV.size
         | 
| 55 | 
            +
            when 2
         | 
| 56 | 
            +
              puts generator.send("read_#{ARGV[0]}".to_sym, ARGV[1])
         | 
| 57 | 
            +
            when 3
         | 
| 58 | 
            +
              puts generator.send("read_#{ARGV[0]}".to_sym, ARGV[1], ARGV[2])
         | 
| 59 | 
            +
            when 4
         | 
| 60 | 
            +
              puts generator.send("read_#{ARGV[0]}".to_sym, ARGV[1], ARGV[2], ARGV[3])
         | 
| 61 | 
            +
            else
         | 
| 62 | 
            +
              generator
         | 
| 63 | 
            +
            end
         | 
| @@ -0,0 +1,183 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), 'gem_project.rb')
         | 
| 2 | 
            +
            module Maven
         | 
| 3 | 
            +
              module Tools
         | 
| 4 | 
            +
                class RailsProject < GemProject
         | 
| 5 | 
            +
                  tags :dummy
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  def initialize(name = dir_name, &block)
         | 
| 8 | 
            +
                    super(name, &block)
         | 
| 9 | 
            +
                    group_id "rails"
         | 
| 10 | 
            +
                    packaging "war"
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
                  
         | 
| 13 | 
            +
                  def has_gem?(gem)
         | 
| 14 | 
            +
                    assets = profile(:assets)
         | 
| 15 | 
            +
                    self.gem?(gem) || (assets && assets.gem?(gem))
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def add_defaults(args = {})
         | 
| 19 | 
            +
                    self.name = "#{dir_name} - rails application" unless name
         | 
| 20 | 
            +
                    
         | 
| 21 | 
            +
                    # setup bundler plugin
         | 
| 22 | 
            +
                    plugin(:bundler)
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    s_args = args.dup
         | 
| 25 | 
            +
                    s_args.delete(:jruby_plugins)
         | 
| 26 | 
            +
                    super(s_args)
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                    versions = VERSIONS.merge(args)
         | 
| 29 | 
            +
                    
         | 
| 30 | 
            +
                    rails_gem = dependencies.detect { |d| d.type.to_sym == :gem && d.artifact_id.to_s =~ /^rail.*s$/ } # allow rails or railties
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                    if !jar?("org.jruby:jruby-complete") && !jar?("org.jruby:jruby-core") && versions[:jruby_version]
         | 
| 33 | 
            +
                      minor = versions[:jruby_version].sub(/[0-9]*\./, '').sub(/\..*/, '')
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                      #TODO once jruby-core pom is working !!!
         | 
| 36 | 
            +
                      if minor.to_i > 55 #TODO fix minor minimum version
         | 
| 37 | 
            +
                        jar("org.jruby:jruby-core", versions[:jruby_version])
         | 
| 38 | 
            +
                        jar("org.jruby:jruby-stdlib", versions[:jruby_version])
         | 
| 39 | 
            +
                        # override deps which works
         | 
| 40 | 
            +
                        jar("jline:jline", '0.9.94') if versions[:jruby_version] =~ /1.6.[1-2]/
         | 
| 41 | 
            +
                        jar("org.jruby.extras:jffi", '1.0.8', 'native') if versions[:jruby_version] =~ /1.6.[0-2]/
         | 
| 42 | 
            +
                        jar("org.jruby.extras:jaffl", '0.5.10') if versions[:jruby_version] =~ /1.6.[0-2]/
         | 
| 43 | 
            +
                      else
         | 
| 44 | 
            +
                        jar("org.jruby:jruby-complete", "${jruby.version}") 
         | 
| 45 | 
            +
                      end
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    jar("org.jruby.rack:jruby-rack", versions[:jruby_rack]) unless jar?("org.jruby.rack:jruby-rack")
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    self.properties = {
         | 
| 51 | 
            +
                      "jruby.version" => versions[:jruby_version],
         | 
| 52 | 
            +
                      "jetty.version" => versions[:jetty_plugin],
         | 
| 53 | 
            +
                      "rails.env" => "development",
         | 
| 54 | 
            +
                      "gem.includeRubygemsInTestResources" => false
         | 
| 55 | 
            +
                    }.merge(self.properties)
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                    plugin(:rails3) do |rails|
         | 
| 58 | 
            +
                      rails.version = "${jruby.plugins.version}" unless rails.version
         | 
| 59 | 
            +
                      rails.in_phase(:validate).execute_goal(:initialize)#.goals << "initialize"
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                    plugin(:war, versions[:war_plugin]) unless plugin?(:war)
         | 
| 63 | 
            +
                    plugin(:war) do |w|
         | 
| 64 | 
            +
                      options = {
         | 
| 65 | 
            +
                        :webResources => Maven::Model::NamedArray.new(:resource) do |l|
         | 
| 66 | 
            +
                          l << { :directory => "public" }
         | 
| 67 | 
            +
                          l << { 
         | 
| 68 | 
            +
                            :directory => ".",
         | 
| 69 | 
            +
                            :targetPath => "WEB-INF",
         | 
| 70 | 
            +
                            :includes => ['app/**', 'config/**', 'lib/**', 'vendor/**', 'Gemfile']
         | 
| 71 | 
            +
                          }
         | 
| 72 | 
            +
                          l << {
         | 
| 73 | 
            +
                            :directory => '${gem.path}',
         | 
| 74 | 
            +
                            :targetPath => 'WEB-INF/gems',
         | 
| 75 | 
            +
                            :includes => ['gems/**', 'specifications/**']
         | 
| 76 | 
            +
                          }
         | 
| 77 | 
            +
                          if plugin(:bundler).dependencies.detect { |d| d.type.to_sym == :gem }
         | 
| 78 | 
            +
                            l << {
         | 
| 79 | 
            +
                              :directory => '${gem.path}-bundler-maven-plugin',
         | 
| 80 | 
            +
                              :targetPath => 'WEB-INF/gems',
         | 
| 81 | 
            +
                              :includes => ['specifications/**']
         | 
| 82 | 
            +
                            }
         | 
| 83 | 
            +
                          end
         | 
| 84 | 
            +
                        end
         | 
| 85 | 
            +
                      }
         | 
| 86 | 
            +
                      options[:webXml] = 'config/web.xml' if File.exists?('config/web.xml') || !File.exists?('src/main/webapp/WEB-INF/web.xml')
         | 
| 87 | 
            +
                      w.with options
         | 
| 88 | 
            +
                    end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                    profile(:assets).activation.by_default if profiles.key?(:assets)
         | 
| 91 | 
            +
                    profile(:development).activation.by_default
         | 
| 92 | 
            +
                    profile(:test).activation.by_default
         | 
| 93 | 
            +
                    profile(:test).activation.property("rails.env", "test")
         | 
| 94 | 
            +
                    profile(:production) do |prod|   
         | 
| 95 | 
            +
                      prod.activation.property("rails.env", "production")
         | 
| 96 | 
            +
                      prod.properties = { 
         | 
| 97 | 
            +
                        "gem.home" => "${project.build.directory}/rubygems-production", 
         | 
| 98 | 
            +
                        "gem.path" => "${project.build.directory}/rubygems-production" 
         | 
| 99 | 
            +
                      }.merge(prod.properties)
         | 
| 100 | 
            +
                    end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                    profile(:war).plugin("org.mortbay.jetty:jetty-maven-plugin",
         | 
| 103 | 
            +
                                         "${jetty.version}")
         | 
| 104 | 
            +
                     
         | 
| 105 | 
            +
                    profile(:run) do |run|
         | 
| 106 | 
            +
                      overrideDescriptor = '${project.build.directory}/jetty/override-${rails.env}-web.xml'
         | 
| 107 | 
            +
                      run.activation.by_default
         | 
| 108 | 
            +
                      run.plugin("org.mortbay.jetty:jetty-maven-plugin",
         | 
| 109 | 
            +
                                   "${jetty.version}") do |jetty|
         | 
| 110 | 
            +
                        options = {
         | 
| 111 | 
            +
                            :webAppConfig => {
         | 
| 112 | 
            +
                              :overrideDescriptor => overrideDescriptor           
         | 
| 113 | 
            +
                            },
         | 
| 114 | 
            +
                            :systemProperties => {
         | 
| 115 | 
            +
                              :systemProperty => {
         | 
| 116 | 
            +
                                :name => 'jbundle.skip',
         | 
| 117 | 
            +
                                :value => 'true'
         | 
| 118 | 
            +
                              }
         | 
| 119 | 
            +
                            },
         | 
| 120 | 
            +
                            :connectors => <<-XML
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
         | 
| 123 | 
            +
                              <port>8080</port>
         | 
| 124 | 
            +
                            </connector>
         | 
| 125 | 
            +
                            <connector implementation="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
         | 
| 126 | 
            +
                              <port>8443</port>
         | 
| 127 | 
            +
                              <keystore>${project.basedir}/src/test/resources/server.keystore</keystore>
         | 
| 128 | 
            +
                              <keyPassword>123456</keyPassword>
         | 
| 129 | 
            +
                              <password>123456</password>
         | 
| 130 | 
            +
                            </connector>
         | 
| 131 | 
            +
            XML
         | 
| 132 | 
            +
                          }
         | 
| 133 | 
            +
                        options[:webXml] = 'config/web.xml' if File.exists?('config/web.xml')
         | 
| 134 | 
            +
                        jetty.with options
         | 
| 135 | 
            +
                      end
         | 
| 136 | 
            +
                    end
         | 
| 137 | 
            +
                    profile(:warshell) do |exec|
         | 
| 138 | 
            +
                      exec.plugin_repository('kos').url = 'http://opensource.kantega.no/nexus/content/groups/public/'
         | 
| 139 | 
            +
                      exec.plugin('org.simplericity.jettyconsole:jetty-console-maven-plugin', '1.42').execution do |jetty|
         | 
| 140 | 
            +
                        jetty.execute_goal(:createconsole)
         | 
| 141 | 
            +
                        jetty.configuration.comment <<-TEXT
         | 
| 142 | 
            +
                              see http://simplericity.com/2009/11/10/1257880778509.html for more info
         | 
| 143 | 
            +
                            -->
         | 
| 144 | 
            +
                            <!--
         | 
| 145 | 
            +
            		  <backgroundImage>${basedir}/src/main/jettyconsole/puffin.jpg</backgroundImage>
         | 
| 146 | 
            +
            		  <additionalDependencies>
         | 
| 147 | 
            +
            		    <additionalDependency>
         | 
| 148 | 
            +
            		      <artifactId>jetty-console-winsrv-plugin</artifactId>
         | 
| 149 | 
            +
            		    </additionalDependency>
         | 
| 150 | 
            +
            		    <additionalDependency>
         | 
| 151 | 
            +
            		      <artifactId>jetty-console-requestlog-plugin</artifactId>
         | 
| 152 | 
            +
            		    </additionalDependency>
         | 
| 153 | 
            +
            		    <additionalDependency>
         | 
| 154 | 
            +
            		      <artifactId>jetty-console-log4j-plugin</artifactId>
         | 
| 155 | 
            +
            		    </additionalDependency>
         | 
| 156 | 
            +
            		    <additionalDependency>
         | 
| 157 | 
            +
            		      <artifactId>jetty-console-jettyxml-plugin</artifactId>
         | 
| 158 | 
            +
            		    </additionalDependency>
         | 
| 159 | 
            +
            		    <additionalDependency>
         | 
| 160 | 
            +
            		      <artifactId>jetty-console-ajp-plugin</artifactId>
         | 
| 161 | 
            +
            		    </additionalDependency>
         | 
| 162 | 
            +
            		    <additionalDependency>
         | 
| 163 | 
            +
            		      <artifactId>jetty-console-gzip-plugin</artifactId>
         | 
| 164 | 
            +
            		    </additionalDependency>
         | 
| 165 | 
            +
            		    <additionalDependency>
         | 
| 166 | 
            +
            		      <artifactId>jetty-console-startstop-plugin</artifactId>
         | 
| 167 | 
            +
            		    </additionalDependency>
         | 
| 168 | 
            +
            		  </additionalDependencies>
         | 
| 169 | 
            +
            TEXT
         | 
| 170 | 
            +
                      end
         | 
| 171 | 
            +
                    end
         | 
| 172 | 
            +
                  end
         | 
| 173 | 
            +
                end
         | 
| 174 | 
            +
              end
         | 
| 175 | 
            +
            end
         | 
| 176 | 
            +
             | 
| 177 | 
            +
            if $0 == __FILE__
         | 
| 178 | 
            +
              proj = Maven::Tools::RailsProject.new
         | 
| 179 | 
            +
              proj.load(ARGV[0] || 'Gemfile')
         | 
| 180 | 
            +
              proj.load(ARGV[1] || 'Mavenfile')
         | 
| 181 | 
            +
              proj.add_defaults
         | 
| 182 | 
            +
              puts proj.to_xml
         | 
| 183 | 
            +
            end
         |