TarPit provides the glue for an unholy union of build tools. TarPit includes general automation for any rubygems project. It originally used and remains heavily influenced by Hoe (e.g. Manifest.txt.) However, it fully supports use of Bundler. The gemspec benefits from sensible automation but remains in a <project>.gemspec per Bundler’s requirements.
For java platform projects, TarPit offers Maven integration via the rjack-maven gem. Maven package/install is run as needed, and jars are linked to the gem lib directory for inclusion, with semi-automatic Manifest.txt production. No need to bloat your git repo by checking in every version of every jar for all time. The standard Maven layout and configuration (i.e. src, target, pom.xml, assembly.xml) is otherwise retained for complete java tool set compatibility. Use Maven only for what is it good at: java compilation with dependencies. Use Rake for everything else.
In Rake/JVM process Maven execution via rjack-maven (speed)
Default, in Rake process Minitest launcher (speed)
Manifest.txt for gem file contents, derived from Manifest.static plus jars in Java projects
ReadmeParser for default specification url, summary, description values
Specification name defaults from <name>.gemspec
LineMatchTaskDefiner defines check_(history|init)_(version|date) tasks where appropriate to avoid missing history or version updates on release
Java projects require different strategies for integrating Maven, specified
s.maven_strategy= and summarized below:
pom.xml builds a single jar, default same name and same version as gem
project (SpecHelper.default_jar) or specified via
assembly.xml defines the jars at Maven package time. Changes to this set of jars must be incorporated by explicitly running the `rake manifest` task.
No java, or use assembly for multiple jars but specify
when they can be computed, for example from common version number or other
gem data. This avoids the need for the `rake manifest` step of
Assemblies are built and located with the pom version number. This defaults to gem project version, but can be fixed (i.e. s.assembly_version=‘1.0’) to avoid a separate version to bump, where the project will not export the pom, for example when the project is re-packaging upstream jars as a gem.
Sample gemspec for a gem including a single jar, built from java source with maven (see also included test/jproject):
gem 'rjack-tarpit', '~> 2.0' require 'rjack-tarpit/spec' RJack::TarPit.specify do |s| require 'jproject/base' s.version = JProject::VERSION s.add_developer 'David Kellum', 'firstname.lastname@example.org' s.maven_strategy = :no_assembly s.depend 'rjack-slf4j', '~> 1.6.4' s.depend 'minitest', '~> 2.3', :dev end
And the associated Rakefile (assuming use of Bundler):
require 'rubygems' require 'bundler/setup' require 'rjack-tarpit' RJack::TarPit.new( "jproject" ).define_tasks
And a Bundler Gemfile:
source :rubygems gemspec
Java projects should provide a Manifest.static. Jars or other generated files will be added to this to produce Manifest.txt for use as the gemspec’s files.
See the gem dependencies. The rjack-maven gem is only a dependency on the java platform. With JRuby 1.6.x, you may need to install jruby-openssl for builds requiring SSL support.
Copyright © 2009-2012 David Kellum
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at:
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.