Uploaded image for project: 'ShrinkWrap Resolvers'
  1. ShrinkWrap Resolvers
  2. SHRINKRES-238

Maven resolver always throws at with(out)Transitivity

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • 3.0.0-alpha-2
    • 2.2.1, 2.2.2
    • maven-plugin
    • None
    • Hide

      I have a GitHub project that can reproduce the problem. Please note the settings.xml posted in the description, which understandably isn't part of the repro.

      Show
      I have a GitHub project that can reproduce the problem. Please note the settings.xml posted in the description, which understandably isn't part of the repro.

      When trying to build a Shrinkwrapped package using the Maven POM resolver, the withoutTransitivity or withTransitivity method throws an InvocationTargetException with the root being an AbstractMethodError.

      Java stanza that throws the exception
      PomEquippedResolveStage pomFromFile = Maven.resolver().loadPomFromFile("pom.xml");  
      File[] files = pomFromFile  
              .importRuntimeDependencies()  
              .resolve()  
              .withoutTransitivity() // or .withTransitivity()  
              .asFile();
      
      Stacktrace
      java.lang.RuntimeException: Could not invoke deployment method: public static org.jboss.shrinkwrap.api.Archive com.terradatum.TestMlsAreasBean.createDeployment()  
        at org.jboss.arquillian.container.test.impl.client.deployment.AnnotationDeploymentScenarioGenerator.invoke(AnnotationDeploymentScenarioGenerator.java:181)  
        at org.jboss.arquillian.container.test.impl.client.deployment.AnnotationDeploymentScenarioGenerator.generateDeployment(AnnotationDeploymentScenarioGenerator.java:103)  
        at org.jboss.arquillian.container.test.impl.client.deployment.AnnotationDeploymentScenarioGenerator.generate(AnnotationDeploymentScenarioGenerator.java:64)  
        at org.jboss.arquillian.container.test.impl.client.deployment.DeploymentGenerator.generateDeployment(DeploymentGenerator.java:79)  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
        at java.lang.reflect.Method.invoke(Method.java:497)  
        at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)  
        at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)  
        at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)  
        at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:145)  
        at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:116)  
        at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67)  
        at org.jboss.arquillian.container.test.impl.client.ContainerEventController.execute(ContainerEventController.java:100)  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
        at java.lang.reflect.Method.invoke(Method.java:497)  
        at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)  
        at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)  
        at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)  
        at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:92)  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
        at java.lang.reflect.Method.invoke(Method.java:497)  
        at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)  
        at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)  
        at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:73)  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
        at java.lang.reflect.Method.invoke(Method.java:497)  
        at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)  
        at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)  
        at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:145)  
        at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:116)  
        at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.beforeClass(EventTestRunnerAdaptor.java:87)  
        at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:201)  
        at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:422)  
        at org.jboss.arquillian.junit.Arquillian.access$200(Arquillian.java:54)  
        at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:218)  
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)  
        at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:166)  
        at org.junit.runners.Suite.runChild(Suite.java:127)  
        at org.junit.runners.Suite.runChild(Suite.java:26)  
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)  
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)  
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)  
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)  
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)  
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)  
        at org.junit.runner.JUnitCore.run(JUnitCore.java:160)  
        at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)  
        at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)  
        at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)  
      Caused by: java.lang.reflect.InvocationTargetException  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
        at java.lang.reflect.Method.invoke(Method.java:497)  
        at org.jboss.arquillian.container.test.impl.client.deployment.AnnotationDeploymentScenarioGenerator.invoke(AnnotationDeploymentScenarioGenerator.java:177)  
        ... 56 more  
      Caused by: java.lang.AbstractMethodError  
        at org.apache.maven.model.building.DefaultModelBuilder.configureResolver(DefaultModelBuilder.java:644)  
        at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:388)  
        at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:361)  
        at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:217)  
        at org.eclipse.aether.internal.impl.DefaultDependencyCollector.resolveCachedArtifactDescriptor(DefaultDependencyCollector.java:525)  
        at org.eclipse.aether.internal.impl.DefaultDependencyCollector.getArtifactDescriptorResult(DefaultDependencyCollector.java:509)  
        at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:409)  
        at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:363)  
        at org.eclipse.aether.internal.impl.DefaultDependencyCollector.process(DefaultDependencyCollector.java:351)  
        at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:254)  
        at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:341)  
        at org.jboss.shrinkwrap.resolver.impl.maven.bootstrap.MavenRepositorySystem.resolveDependencies(MavenRepositorySystem.java:121)  
        at org.jboss.shrinkwrap.resolver.impl.maven.MavenWorkingSessionImpl.resolveDependencies(MavenWorkingSessionImpl.java:228)  
        at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.using(MavenStrategyStageBaseImpl.java:71)  
        at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.withoutTransitivity(MavenStrategyStageBaseImpl.java:58)  
        at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.withoutTransitivity(MavenStrategyStageBaseImpl.java:40)  
        at com.terradatum.TestMlsAreasBean.createDeployment(TestMlsAreasBean.java:51)  
        ... 61 more  
      

      When I step through the code, the ultimate failure is in org.apache.maven.model.building.DefaultModelBuilder#configureResolver():

      Java in the resolver where the problem presents
      private void configureResolver( ModelResolver modelResolver, Model model, DefaultModelProblemCollector problems,  
                                      boolean replaceRepositories )  
      {  
          if ( modelResolver == null )  
          {  
              return;  
          }  
        
          problems.setSource( model );  
        
          List<Repository> repositories = model.getRepositories();  
        
          for ( Repository repository : repositories )  
          {  
              try  
              {  
                  modelResolver.addRepository( repository, replaceRepositories );  
              }  
              catch ( InvalidRepositoryException e )  
              {  
                  problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )  
                          .setMessage( "Invalid repository " + repository.getId() + ": " + e.getMessage() )  
                          .setLocation( repository.getLocation( "" ) )  
                          .setException( e ) );  
              }  
          }  
      }
      

      Specifically at line #14, where at modelResolver#addRepository() the exception is thrown, seemingly out of nowhere. When viewed under the debugger, everything looks just fine. As well, it's clearly the correct method signature (which is the first thought I had since it's a AbstractMethodError), and I've checked the dependency chain and runtime classpath and I can't find anything untoward.

      This happens with the embedded IntelliJ IDEA 15 Maven (3.0.5) and my system's Maven installation (3.3.9).

      I should note that we use an internal Nexus server, and therefore have the following settings.xml:

      settings.xml
      <?xml version="1.0" encoding="UTF-8"?>
      
      <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
        <mirrors>
          <mirror>
            <!-- This sends everything else to /public -->
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>https://nexus.INTERNAL.com/content/groups/public</url>
          </mirror>
        </mirrors>
      
        <servers>
          <server>
            <id>releases</id>
            <username>SOME-FANCY-USER</username>
            <password>SOME-FANCY-PASSWORD</password>
          </server>
          <server>
            <id>snapshots</id>
            <username>SOME-FANCY-USER</username>
            <password>SOME-FANCY-PASSWORD</password>
          </server>
        </servers>
      
        <profiles>
          <profile>
            <id>nexus</id>
            <!-- Enable snapshots for the built in central repo to direct -->
            <!-- all requests to nexus via the mirror -->
            <repositories>
              <repository>
                <id>central</id>
                <url>http://central</url>
                <releases><enabled>true</enabled></releases>
                <snapshots><enabled>true</enabled></snapshots>
              </repository>
            </repositories>
            <pluginRepositories>
              <pluginRepository>
                <id>central</id>
                <url>http://central</url>
                <releases><enabled>true</enabled></releases>
                <snapshots><enabled>true</enabled></snapshots>
              </pluginRepository>
            </pluginRepositories>
          </profile>
        </profiles>
        <activeProfiles>
          <!-- make the profile active all the time -->
          <activeProfile>nexus</activeProfile>
        </activeProfiles>
      
        <pluginGroups>
          <!-- define the sonatype plugin group, so the nexus plugins will work without typing the groupId -->
          <pluginGroup>org.sonatype.plugins</pluginGroup>
        </pluginGroups>
      
      </settings>
      

              mjobanek Matous Jobanek
              rbellamy_jira G. Richard Bellamy (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: