jruby / mavengem

Mavengem protocol and mavengem wagon
Eclipse Public License 1.0
3 stars 4 forks source link

mavengem failing on Java 9+ #4

Closed kares closed 4 years ago

kares commented 4 years ago

could use a newer release with a JRuby upgrade for now, still seems to be stucked with JRuby 1.7 which has issues on Java 11 (any Java >= 9)

using jruby-openssl ~ 0.9.5 - assumed the default key store type to be JKS, but it started returning PKCS12 on Java 9, thus we always fail on require 'openssl' :

org.jruby.exceptions.RaiseException: (OpenSSL::X509::StoreError) setting default path failed: No password supplied for PKCS#12 KeyStore

caused by :

java.lang.NullPointerException: No password supplied for PKCS#12 KeyStore.
    at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(Unknown Source)
    at java.base/java.security.KeyStore.load(KeyStore.java:1479)
    at org.jruby.ext.openssl.x509store.Lookup.loadDefaultJavaCACertsFile(Lookup.java:279)
    at org.jruby.ext.openssl.x509store.Lookup$ByFile.call(Lookup.java:428)
    at org.jruby.ext.openssl.x509store.Lookup$ByFile.call(Lookup.java:411)
    at org.jruby.ext.openssl.x509store.Lookup.control(Lookup.java:123)
    at org.jruby.ext.openssl.x509store.Lookup.loadFile(Lookup.java:92)
    at org.jruby.ext.openssl.x509store.Store.setDefaultPaths(Store.java:336)
    at org.jruby.ext.openssl.X509Store.set_default_paths(X509Store.java:161)
    at org.jruby.ext.openssl.X509Store$INVOKER$i$0$0$set_default_paths.call(X509Store$INVOKER$i$0$0$set_default_paths.gen)
Full Maven Log ``` [DEBUG] ======================================================================= [DEBUG] Skipped remote request for rubygems:jar-dependencies/maven-metadata.xml, locally cached metadata up-to-date. [DEBUG] Using transporter WagonTransporter with priority -1.0 for mavengem:https://rubygems.org [DEBUG] Using connector BasicRepositoryConnector with priority 0.0 for mavengem:https://rubygems.org Downloading from mavengems: mavengem:https://rubygems.org/rubygems/jar-dependencies/maven-metadata.xml OpenSSL::X509::StoreError: setting default path failed: No password supplied for PKCS#12 KeyStore. set_default_paths at org/jruby/ext/openssl/X509Store.java:165 SSLContext at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl19/openssl/ssl-internal.rb:31 SSL at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl19/openssl/ssl-internal.rb:22 OpenSSL at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl19/openssl/ssl-internal.rb:21 (root) at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl19/openssl/ssl-internal.rb:20 load at org/jruby/RubyKernel.java:1087 (root) at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/openssl/ssl-internal.rb:1 require at org/jruby/RubyKernel.java:1071 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:53 (root) at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/openssl/ssl-internal.rb:4 load at org/jruby/RubyKernel.java:1087 (root) at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl19/openssl.rb:1 require at org/jruby/RubyKernel.java:1071 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:53 (root) at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl19/openssl.rb:21 require at org/jruby/RubyKernel.java:1071 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:53 (root) at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl/load.rb:1 require at org/jruby/RubyKernel.java:1071 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:53 (root) at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl/load.rb:24 require at org/jruby/RubyKernel.java:1071 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:53 (root) at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/openssl.rb:1 require at org/jruby/RubyKernel.java:1071 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:53 (root) at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/openssl.rb:1 require at org/jruby/RubyKernel.java:1071 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:53 (root) at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/security.rb:1 require at org/jruby/RubyKernel.java:1071 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55 require at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:53 (root) at uri:classloader:/META-INF/jruby.home/lib/ruby/shared/rubygems/security.rb:11 [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.884 s [INFO] Finished at: 2020-02-04T11:05:02+01:00 [INFO] ------------------------------------------------------------------------ --------------------------------------------------- constituent[0]: file:/opt/maven/conf/logging/ constituent[1]: file:/opt/maven/lib/wagon-provider-api-3.1.0.jar constituent[2]: file:/opt/maven/lib/javax.inject-1.jar constituent[3]: file:/opt/maven/lib/cdi-api-1.0.jar constituent[4]: file:/opt/maven/lib/plexus-interpolation-1.24.jar constituent[5]: file:/opt/maven/lib/guice-4.2.0-no_aop.jar constituent[6]: file:/opt/maven/lib/org.eclipse.sisu.inject-0.3.3.jar constituent[7]: file:/opt/maven/lib/maven-resolver-transport-wagon-1.1.1.jar constituent[8]: file:/opt/maven/lib/maven-slf4j-provider-3.5.4.jar constituent[9]: file:/opt/maven/lib/plexus-component-annotations-1.7.1.jar constituent[10]: file:/opt/maven/lib/maven-compat-3.5.4.jar constituent[11]: file:/opt/maven/lib/guava-20.0.jar constituent[12]: file:/opt/maven/lib/jsr250-api-1.0.jar constituent[13]: file:/opt/maven/lib/commons-lang3-3.5.jar constituent[14]: file:/opt/maven/lib/plexus-utils-3.1.0.jar constituent[15]: file:/opt/maven/lib/wagon-http-3.1.0-shaded.jar constituent[16]: file:/opt/maven/lib/maven-repository-metadata-3.5.4.jar constituent[17]: file:/opt/maven/lib/maven-builder-support-3.5.4.jar constituent[18]: file:/opt/maven/lib/maven-model-3.5.4.jar constituent[19]: file:/opt/maven/lib/maven-resolver-spi-1.1.1.jar constituent[20]: file:/opt/maven/lib/maven-embedder-3.5.4.jar constituent[21]: file:/opt/maven/lib/maven-shared-utils-3.2.1.jar constituent[22]: file:/opt/maven/lib/aopalliance-1.0.jar constituent[23]: file:/opt/maven/lib/maven-core-3.5.4.jar constituent[24]: file:/opt/maven/lib/maven-settings-builder-3.5.4.jar constituent[25]: file:/opt/maven/lib/maven-plugin-api-3.5.4.jar constituent[26]: file:/opt/maven/lib/plexus-sec-dispatcher-1.4.jar constituent[27]: file:/opt/maven/lib/maven-resolver-impl-1.1.1.jar constituent[28]: file:/opt/maven/lib/maven-artifact-3.5.4.jar constituent[29]: file:/opt/maven/lib/plexus-cipher-1.7.jar constituent[30]: file:/opt/maven/lib/wagon-file-3.1.0.jar constituent[31]: file:/opt/maven/lib/maven-resolver-util-1.1.1.jar constituent[32]: file:/opt/maven/lib/jcl-over-slf4j-1.7.25.jar constituent[33]: file:/opt/maven/lib/maven-settings-3.5.4.jar constituent[34]: file:/opt/maven/lib/maven-model-builder-3.5.4.jar constituent[35]: file:/opt/maven/lib/slf4j-api-1.7.25.jar constituent[36]: file:/opt/maven/lib/commons-cli-1.4.jar constituent[37]: file:/opt/maven/lib/maven-resolver-provider-3.5.4.jar constituent[38]: file:/opt/maven/lib/maven-resolver-api-1.1.1.jar constituent[39]: file:/opt/maven/lib/org.eclipse.sisu.plexus-0.3.3.jar constituent[40]: file:/opt/maven/lib/commons-io-2.5.jar constituent[41]: file:/opt/maven/lib/jansi-1.17.1.jar constituent[42]: file:/opt/maven/lib/maven-resolver-connector-basic-1.1.1.jar --------------------------------------------------- Exception in thread "main" java.lang.ExceptionInInitializerError at org.torquebox.mojo.mavengem.RubygemsFactory.getOrCreate(RubygemsFactory.java:116) at org.torquebox.mojo.mavengem.MavenGemURLConnection.connect(MavenGemURLConnection.java:103) at org.torquebox.mojo.mavengem.MavenGemURLConnection.getInputStream(MavenGemURLConnection.java:83) at org.torquebox.mojo.mavengem.wagon.MavenGemWagon.fillInputData(MavenGemWagon.java:51) at org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:126) at org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88) at org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61) at org.eclipse.aether.transport.wagon.WagonTransporter$GetTaskRunner.run(WagonTransporter.java:567) at org.eclipse.aether.transport.wagon.WagonTransporter.execute(WagonTransporter.java:435) at org.eclipse.aether.transport.wagon.WagonTransporter.get(WagonTransporter.java:412) at org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask(BasicRepositoryConnector.java:453) at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:360) at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:75) at org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute(BasicRepositoryConnector.java:583) at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:232) at org.eclipse.aether.internal.impl.DefaultMetadataResolver$ResolveTask.run(DefaultMetadataResolver.java:593) at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:75) at org.eclipse.aether.internal.impl.DefaultMetadataResolver$1.execute(DefaultMetadataResolver.java:513) at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolve(DefaultMetadataResolver.java:368) at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolveMetadata(DefaultMetadataResolver.java:191) at org.apache.maven.repository.internal.DefaultVersionRangeResolver.getVersions(DefaultVersionRangeResolver.java:218) at org.apache.maven.repository.internal.DefaultVersionRangeResolver.resolveVersionRange(DefaultVersionRangeResolver.java:168) at org.eclipse.aether.internal.impl.DefaultDependencyCollector.cachedResolveRangeResult(DefaultDependencyCollector.java:619) at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:394) at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:365) at org.eclipse.aether.internal.impl.DefaultDependencyCollector.process(DefaultDependencyCollector.java:353) at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:256) at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:282) at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:169) at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:243) at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:147) at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:246) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:200) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:954) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288) at org.apache.maven.cli.MavenCli.main(MavenCli.java:192) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Caused by: org.jruby.embed.EvalFailedException: (OpenSSL::X509::StoreError) setting default path failed: No password supplied for PKCS#12 KeyStore. at org.jruby.embed.internal.EmbedEvalUnitImpl.run(EmbedEvalUnitImpl.java:133) at org.jruby.embed.ScriptingContainer.runUnit(ScriptingContainer.java:1340) at org.jruby.embed.ScriptingContainer.runScriptlet(ScriptingContainer.java:1333) at org.sonatype.nexus.ruby.DefaultRubygemsGateway.(DefaultRubygemsGateway.java:43) at org.torquebox.mojo.mavengem.Rubygems.(Rubygems.java:27) ... 53 more Caused by: org.jruby.exceptions.RaiseException: (OpenSSL::X509::StoreError) setting default path failed: No password supplied for PKCS#12 KeyStore. at org.jruby.ext.openssl.X509Store.set_default_paths(org/jruby/ext/openssl/X509Store.java:165) at RUBY.SSLContext(uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl19/openssl/ssl-internal.rb:31) at RUBY.SSL(uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl19/openssl/ssl-internal.rb:22) at RUBY.OpenSSL(uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl19/openssl/ssl-internal.rb:21) at RUBY.(root)(uri:classloader:/META-INF/jruby.home/lib/ruby/shared/jopenssl19/openssl/ssl-internal.rb:20) at org.jruby.RubyKernel.load(org/jruby/RubyKernel.java:1087) ```

there was a discussion that loading OpenSSL really would not be needed in this case and there's an open unpolished experiment: https://github.com/jruby/mavengem/pull/2 ... with JRuby 9.2.9.0 could maybe just force -Djruby.cli.rubygems.enable=false ?

either way a newer JRuby release might be necessary to properly run on newer Java ...

kares commented 4 years ago

right, won't boot if we simply just try disabling rubygems :

Caused by: org.jruby.exceptions.NameError: (NameError) uninitialized constant Maven::Tools::DSL::Gem
    at org.jruby.RubyModule.const_missing (org/jruby/RubyModule.java:3746)
    at RUBY.gemspec_without_gem_dependencies? (uri:classloader:/maven/tools/dsl.rb:401)
    at RUBY.gemspec (uri:classloader:/maven/tools/dsl.rb:390)
    at RUBY.eval_pom (/home/kares/workspace/oss/jruby-openssl/Mavenfile:4)
    at RUBY.nested_block (uri:classloader:/maven/tools/dsl.rb:1484)
    at RUBY.tesla (uri:classloader:/maven/tools/dsl.rb:20)
    at RUBY.eval_pom (/home/kares/workspace/oss/jruby-openssl/Mavenfile:1)
    at org.jruby.RubyKernel.eval (org/jruby/RubyKernel.java:1061)
    at RUBY.eval_pom (uri:classloader:/maven/tools/dsl.rb:67)
    at RUBY.parse (classpath:/parser.rb:80)
deivid-rodriguez commented 4 years ago

I think this should've been actually fixed in the last version of mavengem? At least this commit seems to intend fixing it.

I run into this error when running mvn -Pbootstrap on the jruby repo and fixed it by grepping for mavengem and replacing the old version (0.2.0) with the new one (1.0.3).

kares commented 4 years ago

Thanks David, yes that handles the case but not for every case - haven't looked into details. Did upgrade mavengem previous to the report as I also thought this had been resolved (lately):

  <extension>
    <groupId>org.torquebox.mojo</groupId>
    <artifactId>mavengem-wagon</artifactId>
    <version>1.0.3</version>
  </extension>
[DEBUG] Populating class realm coreExtension>org.torquebox.mojo:mavengem-wagon:1.0.3
[DEBUG]   Included /opt/local/maven-repo/org/torquebox/mojo/mavengem-wagon/1.0.3/mavengem-wagon-1.0.3.jar
[DEBUG]   Included /opt/local/maven-repo/org/torquebox/mojo/mavengem-protocol/1.0.3/mavengem-protocol-1.0.3.jar
[DEBUG]   Included /opt/local/maven-repo/org/torquebox/mojo/rubygems-tools/1.0.3/rubygems-tools-1.0.3.jar
[DEBUG]   Included /opt/local/maven-repo/commons-codec/commons-codec/1.11/commons-codec-1.11.jar
[DEBUG]   Included /opt/local/maven-repo/org/jruby/jruby/9.1.17.0/jruby-9.1.17.0.pom
[DEBUG]   Included /opt/local/maven-repo/org/jruby/jruby/9.1.17.0/jruby-9.1.17.0.jar
[DEBUG]   Included /opt/local/maven-repo/org/jruby/jruby-core/9.1.17.0/jruby-core-9.1.17.0.jar

while doing that I also noticed (further down the build debug) :

[DEBUG] Created new class realm extension>org.torquebox.mojo:mavengem-wagon:0.2.1
[DEBUG] Importing foreign packages into class realm extension>org.torquebox.mojo:mavengem-wagon:0.2.1
[DEBUG]   Imported:  < maven.api
[DEBUG] Populating class realm extension>org.torquebox.mojo:mavengem-wagon:0.2.1
[DEBUG]   Included: org.torquebox.mojo:mavengem-wagon:jar:0.2.1
[DEBUG]   Included: org.torquebox.mojo:mavengem-protocol:jar:0.2.1
[DEBUG]   Included: org.sonatype.nexus.plugins:nexus-ruby-tools:jar:2.11.4-01
[DEBUG]   Included: org.jruby:jruby:pom:1.7.19
[DEBUG]   Included: org.jruby:jruby-core:jar:1.7.19

... which is coming from polyglot-ruby defaulting to old an old mavengem version, fixed on master (not released atm): https://github.com/takari/polyglot-maven/commit/8a8a6f8ef5898555d27522f15fb20f802784e5d3