Kristian, Hiro mentions a couple of more items needed to complete issue 912 and some things which we need to release 1.7.5. Any chance you can take a look and weigh in (or better yet make it work)?
-Tom On Thu, Jul 25, 2013 at 6:35 AM, kristian <m.krist...@web.de> wrote: > hi, > > the missing bits are roughly (as far I am right ;) > > * maven artifacts jruby-core, jruby-stdlib, jruby-complete > * dist files tar.gz and zip > * jruby-jars gem > * osgi > * various gems: bouncy-castle-java, openssl > > I just pushed a branch 'pom-proposal' to github where the above is > partially done but misses the dist files and openssl gem and osgi. on top > of it there are improvements in building the core jar, i.e. repeated run > dropped from 16s to 10s on my machine (I guess 9s is still possible ;). > > ## vendored jars and some possible improvement ## > > with the jruby stdlib maven artifact I did NOT include the bouncy-castle > and jline jars as "vendored" jars. I guess that is my personal thingy that > vendored jars and gems are better avoided to prevent version clashes with > jars/gems used somehow along with that artifact. instead it declares them > as regular dependency. i.e. for bouncy-castle that approach allows to use a > different version of BC for jruby maven artifact. actually even though the > latest BC does not compile openssl the compile error ONLY affects a single > method for a password protected container (I would have fixed the code but > there are no tests and to figure a way of trying out the new code is a > bigger task for me). > > vendored jars whether with jruby or within gems always bothered me - I > have no control over them and there is no easy to find out which version I > am using and there is no way to isolate the hidden jars from gems from the > java application which uses the ScriptingContainer. > > short list of problematic gems is (I might be wrong here and there since I > did not verify them right now - just out of my head): > * jrjackson - has some jackson jar > * nokogiri - xercers and other xml related jars > * neo4j - have not check what they all have > * jruby-openssl - bouncy castle > > one way to help a java application to choose their "own" version of those > jars is to isolate the jrubyclassloader from its parent classloader. this > is done for servlet-classloader via a configuration setting "load the > classes from war first before going to the parent classloader". this is > also done with other projects where you want to separate plugins and their > dependencies from the containing application and their dependencies. and > this I have done with the commit 9b9ee54022c54a5e49d6ef3dae73e5dad30a6039 > > that should be perfectly save since if an application had no jar versions > conflict problems nothing really changes beside the search order of those > classes. but now you can use any gem with your ScriptingContainer and you > are still be free to choose any jar for your java application or you can > use any bouncy-castle-java gem with ScriptingContainer without affecting > the java application. > > the commit 86d23de4687e8ca6e7eba9ac5f9f5ca2257eda24 adds some integration > tests for the jruby artifact as well the jruby-complete artifact showing > how to use different version BC for java and ruby in ONE application. one > could a system property for that behavior to be switched on/off but it > should be just fine without the switch - maybe java scripting has some say > in that as well ? > > for me that lifts both gems and jars on a more equal level: the BC gem > gets updated the same way as you would update a newer minitest gem with MRI > and the BC jar from jruby can be "overwritten" by just adding the desired > version to the classloader/classpath along with jruby. > > there is a slight difference between the jruby artifact and > jruby-complete: jruby-complete has the BC jars vendored, i.e. a different > BC jar in the classpath will not affect openssl. with the jruby artifact > the BC jar is not vendored, i.e. it will take the BC version from the > classloader and that can be a different one than the declared dependency of > the jruby artifact. > > please note that > * not vendoring BC and jline with jruby artifact > * reverse class loading on the JRubyClassLoader > are TWO independent topics. > > ## jruby-core maven artifact for maven projects ## > > next change I need to point out is: there are three maven artifacts: > jruby, jruby-core and jruby-stdlib > in order to use jruby for a maven/ivy/buildr/... project you need to use > org.jruby:jruby:1.7.5.dev, with jruby-1.7.4 you needed to use > org.jruby:jruby-core:1.7.4 and in older version you needed to add both > jruby-core and jruby-stdlib in your project. the reason for that change is > just that jruby-core (./core/pom.xml) does not have a dependency to > jruby-stdlib and can not have it at that point of the build. > > ## gems with maven ## > > for packaging gems I used the gem-maven-plugin, actually I used the > https://github.com/tesla/tesla-polyglot to generate the pom.xml but you > can just use tesla maven to execute it directly. currently I am working on > getting this on rubygems.org as ruby-maven gem. all the pom.rb from the > pom-proposal branch are generated by tesla and can be executed directly. it > is possible that a tesla maven run dumps the generated pom.xml (it is also > possible as readonly dumps). any feedback on the DSL itself are welcome as > well ! > > ### bouncy-castle-java gem ### > > the bouncy-castle-java gem looks rather straight forward with ruby-maven: > ./gems/bouncy-castle-java/Mavenfile > where the jar is declared as deps inside > ./gems/bouncy-castle-java/bouncy-castle-java.gemspec > the version comes from an external version file which could be included > with the gem as well but I just kept the gem as close as it was before. > > ### jruby-jars gem ### > > that one has almost the same setup as the bouncy-castle-java gem. the > version is coded inside the gemspec and the pom parent declaration (is > called inherit in Mavenfile) uses the gemspec version. you all might have > seen that 1.7.5.dev is hardcoded in all pom.xml !!! the dependencies I put > into the Mavenfile instead of the gemspec file. these dependencies are just > shaded jruby-core and jruby-stdlib artifacts and they need to have them > built first. due to that built order it feels that > ./gems/jruby-jars > ./gems/jruby-core-complete > ./gems/jruby-stdlib-complete > should move to > ./maven/jruby-jars > ./maven/jruby-core-complete > ./maven/jruby-stdlib-complete > > ## openssl gem ## > > that one I did not make yet since it should move into ext/openssl since it > is easy to package a gem with a "jar extension" and the ./ext/opensll part > is not meant to deploy on maven central itself.ext/openssl/pom.rb would > probably just get a "gemspec :jar=>'jopenssl'" declaration and some more > little mods' > > ## profile to build all or parts ## > > built all - without the 'package' goal it makes all the reporting as well > which takes a long long time > $ mvn -Pall package > > jruby-complete artifact > $ mvn -P complete > > jruby artifact > $ mvn -P main > > jruby-rake-plugin artifact > $ mvn -P rake-plugin > > jruby dist files > $ mvn -P dist > > jruby docs > $ mvn -P docs > > jruby gems > $ mvn -P gems > > the reporting needs to go away from all in its own profile. the gems > profile should become jruby-jars and the bouncy-castle-java gem will get > some rake tasks (using ruby-maven gem) to build the gem. > > ## epilog ## > > it is a bigger task for me to write up such an email then writing code ;) > and for me once something works I can easily get carried away with the > next thing and forgetting to push and/or publish things so the issue > https://github.com/jruby/jruby/issues/912 was the hint that I have > forgotten something !!! > > the idea or vision to treat jars and gems more equal reflects in jbundler > project. I will have a look in how warbler can make use main jruby maven > artifact as well use jbundler for getting all the jar inside the war-file > by taking the dependency of jruby into account. > > hope I stayed in line with the jruby project !!! > > regards, > christian > > -- blog: http://blog.enebo.com twitter: tom_enebo mail: tom.en...@gmail.com