Skip to content

Not working with Nexus nor as proxy nor as hosted repos #17

@ngr-ilmarh

Description

@ngr-ilmarh

I'm trying to build jruby in isolated environment with no direct central and rubygems access.
Using settings.xml like this:

<settings>
  <servers>
    <server>
      <id>mavengems</id>
      <configuration>
          <mirror>https://nexus.local.net/repository/rubygems</mirror>
      </configuration>
    </server>
  </servers>
  <mirrors>
    <mirror>
        <id>maven.proxy</id>
        <url>https://nexus.local.net/repository/maven-proxy-group</url>
        <mirrorOf>central,sonatype-nexus-snapshots,apache.snapshots,sonatype,ow2-snapshot,!mavengems,!https://rubygems.org</mirrorOf>
    </mirror>
  </mirrors>
</settings>

But Nexus don't provide rubygems v2 api, so mavengem ends up writing zipped gemspec in ~/.mavengem/https___nexus_local_net_repository_rubygems/api/v2/rubygems//versions/.json. And this causes exception (not very usefull):

...
Downloading from mavengems: mavengem:https://rubygems.org/rubygems/pattern-match/1.1.0/pattern-match-1.1.0.pom
[DEBUG] Writing tracking file /home/ilmar/.m2/repository/rubygems/pattern-match/1.1.0/pattern-match-1.1.0.pom.lastUpdated
[DEBUG] Using transporter WagonTransporter with priority -1.0 for https://nexus.local.net/repository/maven-proxy-group
[DEBUG] Using connector BasicRepositoryConnector with priority 0.0 for https://nexus.local.net/repository/maven-proxy-group
Downloading from maven.proxy: https://nexus.local.net/repository/maven-proxy-group/rubygems/pattern-match/1.1.0/pattern-match-1.1.0.pom
[DEBUG] Writing tracking file /home/ilmar/.m2/repository/rubygems/pattern-match/1.1.0/pattern-match-1.1.0.pom.lastUpdated
[DEBUG] Dependency collection stats: {ConflictMarker.analyzeTime=419508, ConflictMarker.markTime=97065, ConflictMarker.nodeCount=158, ConflictIdSorter.graphTime=158085, ConflictIdSorter.topsortTime=68819, ConflictIdSorter.conflictIdCount=89, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=3790388, ConflictResolver.conflictItemCount=151, DefaultDependencyCollector.collectTime=106885526599, DefaultDependencyCollector.transformTime=4669911}
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:55 min
[INFO] Finished at: 2025-07-09T16:01:39+03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project jruby-stdlib: Could not resolve dependencies for project org.jruby:jruby-stdlib:jar:9.4.10.1: Failed to collect dependencies at rubygems:rubygems-update:gem:3.3.26: Failed to read artifact descriptor for rubygems:rubygems-update:gem:3.3.26: Could not transfer artifact rubygems:rubygems-update:pom:3.3.26 from/to mavengems (mavengem:https://rubygems.org): org.jruby.exceptions.RaiseException: (ParserError) unexpected token at 'x�mTmkA��\�J��J��R�z��(�RۓJ_ �6w��%{�qw/i�)�����ٽKJ�
                                                      �
[ERROR] ��̳��dy���O����>�  �\ɥ��˫�q��ax��ǛqkK��Y��yV�Sf18j�>F��jC��ຌ�q5{��u���AO��rP�D�VЈ[�.     �
                                                                                                 p
                                                                                                  �,�
                                                                                                     �`�>J
                                                                                                          C�
[ERROR] �*=�����ê�}����\��~@�������8
[ERROR] ��b�r4���p�j��9�O�␦޸S��T4�m0sM_�m%7�MP�vV0.�DU�1cZɶE��j��]'<"8��\���
[ERROR]
        ����L5����n                                       a�=ίB�*�vn����L0W:��a�/�3r͓�.��ޫ�@]y�SNU��N9����?P���c����[ɚ^�%
[ERROR] 8�h�����;t�t��<&�p�+����;�Z��C�4~��u*�ҟ[���0a���J`N"�����)$JZ�3hA
[ERROR] aX��    �       ngk6gj:@�r�F��`F�NE0�*#m�)��akd�?�6�'9{����

                                                                   i��&�GF�s�v�R��z�J   zQwc�rjbq����.���K���<��Р��[x��Dp�*������=�Q�@���5���V���!Zjj\3Gԧ␦�˸1@�3M�s�KS
[ERROR] RkM�)NP�1I"�."8�Y�S���Ӄ��p�w2W*�Pn��D����z�����zC���y�sַ�_w�|�'
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project jruby-stdlib: Could not resolve dependencies for project org.jruby:jruby-stdlib:jar:9.4.10.1: Failed to collect dependencies at rubygems:rubygems-update:gem:3.3.26
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:269)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:147)
    at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:248)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:202)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    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:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
    at java.lang.reflect.Method.invoke (Method.java:580)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.apache.maven.project.DependencyResolutionException: Could not resolve dependencies for project org.jruby:jruby-stdlib:jar:9.4.10.1: Failed to collect dependencies at rubygems:rubygems-update:gem:3.3.26

I've inserted catch with printStackTrace() in

and tried to change
private void pomFromGemspec(PomFile file, boolean snapshot, DependencyData dependencyData) throws IOException {
with something like

    private void pomFromGemspec(PomFile file, boolean snapshot, DependencyData dependencyData) throws IOException {
        GemspecFile gemspec = file.gemspec(dependencyData);
        if (gemspec.notExists()) {
            file.markAsNotExists();
        } else {
            try (InputStream is = store.getInputStream(gemspec)) {
                try {
                    store.memory(gateway.newGemspecHelperFromV2GemInfo(is).pom(snapshot), file);
                } catch (Exception e) {
                    store.memory(gateway.newGemspecHelper(is).pom(snapshot), file);
                }
            } 
        }
    }

but apparently it's wrong. Anyway here is stacktrace from this and possible point of interest:

org.jruby.embed.InvokeFailedException: org.jruby.exceptions.RaiseException: (ParserError) unexpected token at '<zipped gemspec>'
        at org.jruby.embed.internal.EmbedRubyObjectAdapterImpl.doInvokeMethod(EmbedRubyObjectAdapterImpl.java:251)
        at org.jruby.embed.internal.EmbedRubyObjectAdapterImpl.callMethod(EmbedRubyObjectAdapterImpl.java:156)
        at org.jruby.embed.ScriptingContainer.callMethod(ScriptingContainer.java:1448)
        at org.torquebox.mojo.rubygems.DefaultRubygemsGateway.newGemspecHelperFromV2GemInfo(DefaultRubygemsGateway.java:92)
        at org.torquebox.mojo.rubygems.layout.GETLayout.pomFromGemspec(GETLayout.java:197)
        at org.torquebox.mojo.rubygems.layout.GETLayout.setPomPayload(GETLayout.java:184)
        at org.torquebox.mojo.rubygems.layout.GETLayout.pom(GETLayout.java:243)
        at org.torquebox.mojo.rubygems.cuba.maven.MavenReleasesRubygemsArtifactIdVersionCuba.on(MavenReleasesRubygemsArtifactIdVersionCuba.java:55)
        at org.torquebox.mojo.rubygems.cuba.State.nested(State.java:63)
        at org.torquebox.mojo.rubygems.cuba.maven.MavenReleasesRubygemsArtifactIdCuba.on(MavenReleasesRubygemsArtifactIdCuba.java:52)
        at org.torquebox.mojo.rubygems.cuba.State.nested(State.java:63)
        at org.torquebox.mojo.rubygems.cuba.maven.MavenReleasesRubygemsCuba.on(MavenReleasesRubygemsCuba.java:34)
        at org.torquebox.mojo.rubygems.cuba.State.nested(State.java:63)
        at org.torquebox.mojo.rubygems.cuba.maven.MavenReleasesCuba.on(MavenReleasesCuba.java:41)
        at org.torquebox.mojo.rubygems.cuba.State.nested(State.java:63)
        at org.torquebox.mojo.rubygems.cuba.maven.MavenCuba.on(MavenCuba.java:46)
        at org.torquebox.mojo.rubygems.cuba.State.nested(State.java:63)
        at org.torquebox.mojo.rubygems.cuba.RootCuba.on(RootCuba.java:81)
        at org.torquebox.mojo.rubygems.cuba.State.nested(State.java:63)
        at org.torquebox.mojo.rubygems.cuba.RubygemsFileSystem.visit(RubygemsFileSystem.java:86)
        at org.torquebox.mojo.rubygems.cuba.RubygemsFileSystem.get(RubygemsFileSystem.java:57)
        at org.torquebox.mojo.mavengem.Rubygems.get(Rubygems.java:44)
        at org.torquebox.mojo.mavengem.MavenGemURLConnection.connect(MavenGemURLConnection.java:105)
        at org.torquebox.mojo.mavengem.MavenGemURLConnection.connect(MavenGemURLConnection.java:101)
        at org.torquebox.mojo.mavengem.MavenGemURLConnection.getInputStream(MavenGemURLConnection.java:81)
        at org.torquebox.mojo.mavengem.wagon.MavenGemWagon.fillInputData(MavenGemWagon.java:50)
        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:457)
        at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:364)
        at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:75)
        at org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute(BasicRepositoryConnector.java:644)
        at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:262)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:499)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:401)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:229)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:207)
        at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:240)
        at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:171)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.resolveCachedArtifactDescriptor(DefaultDependencyCollector.java:541)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.getArtifactDescriptorResult(DefaultDependencyCollector.java:526)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:413)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:365)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process(DefaultDependencyCollector.java:352)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:254)
        at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:284)
        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:248)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:202)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
        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:957)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:289)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:193)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
Caused by: org.jruby.exceptions.RaiseException: (ParserError) unexpected token at '<zipped gemspec, not json>'
        at json.ext.Parser.parse(json/ext/Parser.java:238)
        at RUBY.parse(uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/json/common.rb:216)
        at RUBY.load(uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/json/common.rb:569)
        at RUBY.json_load(uri:classloader:/nexus/rubygems_helper.rb:92)
        at RUBY.rubygems_v2_info_gemspec(uri:classloader:/nexus/gemspec_helper_impl.rb:146)
        at RUBY.initialize(uri:classloader:/nexus/gemspec_helper_impl.rb:57)
        at org.jruby.RubyClass.new(org/jruby/RubyClass.java:917)
        at RUBY.from_rubygems_v2_gem_info(uri:classloader:/nexus/gemspec_helper_impl.rb:76)

How to reproduce: simply create nexus container as stated here https://github.com/sonatype/docker-nexus/blob/main/README.md, then create rubygems proxy and try to build jruby through it.

@headius maybe you will come with quick triage, what if it's a configuration issue that i didn't get yet

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions